@firestitch/report 18.13.0 → 18.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/components/component-grid/component-grid.component.d.ts +4 -0
- package/app/reports/data/report-grid-source.d.ts +1 -0
- package/app/reports/interfaces/{report-chat-viewer-detail.interface.d.ts → report-chat-viewer-show-rows.interface.d.ts} +1 -1
- package/app/reports/interfaces/report-chat-viewer-state.interface.d.ts +2 -2
- package/app/reports/interfaces/report-mark-action.type.d.ts +1 -1
- package/app/reports/interfaces/report-temporary-state.interface.d.ts +1 -1
- package/app/reports/interfaces/report-viewer-feature.type.d.ts +1 -1
- package/app/reports/report-grid-layout.d.ts +2 -1
- package/esm2022/app/reports/components/component-grid/component-grid.component.mjs +40 -5
- package/esm2022/app/reports/data/report-grid-source.mjs +11 -2
- package/esm2022/app/reports/interfaces/report-chat-viewer-show-rows.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-mark-action.type.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-viewer-feature.type.mjs +1 -1
- package/esm2022/app/reports/mark-click.mjs +2 -2
- package/esm2022/app/reports/option-builder.mjs +4 -4
- package/esm2022/app/reports/report-grid-layout.mjs +43 -2
- package/esm2022/app/reports/report-viewer-features.mjs +4 -2
- package/esm2022/app/reports/services/report-filter-state.service.mjs +2 -2
- package/fesm2022/{firestitch-report-echarts-EecIloKo.mjs → firestitch-report-echarts-DMflI6jp.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-EecIloKo.mjs.map → firestitch-report-echarts-DMflI6jp.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-DbdLxQSE.mjs → firestitch-report-firestitch-report-C94rjx24.mjs} +104 -19
- package/fesm2022/firestitch-report-firestitch-report-C94rjx24.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/esm2022/app/reports/interfaces/report-chat-viewer-detail.interface.mjs +0 -2
- package/fesm2022/firestitch-report-firestitch-report-DbdLxQSE.mjs.map +0 -1
|
@@ -96,16 +96,16 @@ const COMPARED_PRIOR_PREFIX = 'vs';
|
|
|
96
96
|
// The tooltip's last line on a chart whose marks act on a click
|
|
97
97
|
// (markActionHint): one action by its full name, several by their short
|
|
98
98
|
// names, in this order. Interface text, English in every report locale.
|
|
99
|
-
const MARK_ACTION_ORDER = ['drill', 'crossFilter', '
|
|
99
|
+
const MARK_ACTION_ORDER = ['drill', 'crossFilter', 'showRows'];
|
|
100
100
|
const MARK_ACTION_HINTS = {
|
|
101
101
|
drill: 'drill down',
|
|
102
102
|
crossFilter: 'filter other tiles',
|
|
103
|
-
|
|
103
|
+
showRows: 'show rows',
|
|
104
104
|
};
|
|
105
105
|
const MARK_ACTION_SHORT_HINTS = {
|
|
106
106
|
drill: 'drill down',
|
|
107
107
|
crossFilter: 'filter',
|
|
108
|
-
|
|
108
|
+
showRows: 'show rows',
|
|
109
109
|
};
|
|
110
110
|
// The words a statistic line's label starts with. They are interface text,
|
|
111
111
|
// English in every report locale; only the value after them follows it.
|
|
@@ -2068,4 +2068,4 @@ function periodAxisLabel(granularity, categories, locale, dateLabel) {
|
|
|
2068
2068
|
},
|
|
2069
2069
|
};
|
|
2070
2070
|
}
|
|
2071
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvb3B0aW9uLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFFBQVEsRUFDUixRQUFRLEVBQ1IsVUFBVSxFQUNWLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLEdBQUcsSUFBSSxRQUFRLEVBQ2YsR0FBRyxJQUFJLFVBQVUsRUFDakIsUUFBUSxFQUNSLFVBQVUsR0FDWCxNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsU0FBUyxFQUNULFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxFQUNmLGVBQWUsRUFFZixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLHdCQUF3QixFQUN4QixVQUFVLEdBQ1gsTUFBTSxV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QkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRCw2RUFBNkU7QUFDN0UsZ0ZBQWdGO0FBQ2hGLDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFDMUUscUVBQXFFO0FBQ3JFLFNBQVMsZUFBZSxDQUN0QixXQUFvQyxFQUNwQyxVQUFvQixFQUNwQixNQUF1QixFQUN2QixTQUErQjtJQUUvQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFakQsT0FBTztRQUNMLFNBQVMsRUFBRTtZQUNULFNBQVMsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFO2dCQUMzQixNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBRUQsT0FBTyxTQUFTLElBQUksZUFBZSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUM7b0JBQ3pELENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLFNBQVMsS0FBSyxDQUFDLElBQUksR0FBRztvQkFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDcEIsQ0FBQztZQUNELElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUU7U0FDakU7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRUNoYXJ0c09wdGlvbixcbiAgTGVnZW5kQ29tcG9uZW50T3B0aW9uLFxuICBTZXJpZXNPcHRpb24sXG4gIFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcyxcbiAgVG9vbHRpcENvbXBvbmVudE9wdGlvbixcbn0gZnJvbSAnZWNoYXJ0cyc7XG5cbmltcG9ydCB7XG4gIGFkZERheXMsXG4gIGFkZE1vbnRocyxcbiAgYWRkUXVhcnRlcnMsXG4gIGFkZFdlZWtzLFxuICBhZGRZZWFycyxcbiAgZW5kT2ZNb250aCxcbiAgZm9ybWF0SVNPLFxuICBpc0xhc3REYXlPZk1vbnRoLFxuICBpc1ZhbGlkLFxuICBtYXggYXMgbGF0ZXN0T2YsXG4gIG1pbiBhcyBlYXJsaWVzdE9mLFxuICBwYXJzZUlTTyxcbiAgc3RhcnRPZkRheSxcbn0gZnJvbSAnZGF0ZS1mbnMnO1xuXG5pbXBvcnQgeyBSZXBvcnRDaGFydENvbG9yIH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtY2hhcnQtY29sb3IuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydERhdGFMYWJlbHMgfSBmcm9tICcuL2VudW1zL3JlcG9ydC1jaGFydC1kYXRhLWxhYmVscy5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0RGF0ZUxhYmVsIH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0ZS1sYWJlbC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TGluZVN0eWxlIH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtY2hhcnQtbGluZS1zdHlsZS5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TWFya1N0YXQgfSBmcm9tICcuL2VudW1zL3JlcG9ydC1jaGFydC1tYXJrLXN0YXQuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRMaXN0Q29sdW1uRm9ybWF0IH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtbGlzdC1jb2x1bW4tZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0TnVtYmVyVW5pdHMgfSBmcm9tICcuL2VudW1zL3JlcG9ydC1udW1iZXItdW5pdHMuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRWYWx1ZUZvcm1hdCB9IGZyb20gJy4vZW51bXMvcmVwb3J0LXZhbHVlLWZvcm1hdC5lbnVtJztcbmltcG9ydCB7XG4gIGF4aXNOdW1iZXJGb3JtYXQsXG4gIENoYXJ0TnVtYmVyRm9ybWF0LFxuICBjaGFydFZhbHVlUGVhayxcbiAgY29tcGFyaXNvbk9mZnNldExhYmVsLFxuICBEQVlfU0hPUlQsXG4gIGRhdGVGb3JtYXQsXG4gIGZvcm1hdERheVJhbmdlLFxuICBmb3JtYXREYXlXaW5kb3csXG4gIGZvcm1hdExvY2FsRGF0ZSxcbiAgRm9ybWF0dGVkT3V0cHV0VmFsdWUsXG4gIGZvcm1hdE51bWJlcixcbiAgZm9ybWF0T3V0cHV0VmFsdWUsXG4gIGZvcm1hdFBsYWluTnVtYmVyLFxuICBoYXNOdW1iZXJGb3JtYXQsXG4gIGxhbmVPdXRwdXRBbGlhcyxcbiAgTU9OVEhfREFZLFxuICBNT05USF9MT05HLFxuICBNT05USF9ZRUFSLFxuICByZXNvbHZlQ2hhcnROdW1iZXJGb3JtYXQsXG4gIHdpbmRvd1RleHQsXG59IGZyb20gJy4vZm9ybWF0JztcbmltcG9ydCB7XG4gIEF4aXNDaGFydFR5cGUsXG4gIENoYXJ0Q29uZmlnLFxuICBDaGFydEdyYW51bGFyaXR5LFxuICBDaGFydE1lYXN1cmUsXG4gIENoYXJ0UmVmZXJlbmNlLFxuICBDaGFydFZhbHVlQXhpcyxcbiAgQ29tcGFyaXNvbk9mZnNldCxcbiAgQ29tcGFyaXNvbldpbmRvdyxcbiAgQ29tcG9uZW50Q29tcGFyaXNvbixcbiAgQ29tcG9uZW50RGF0YSxcbiAgR1JBTlVMQVJJVFlfT1BUSU9OUyxcbiAgTGVnZW5kUG9zaXRpb24sXG4gIExpc3RDb2x1bW4sXG4gIExpc3RDb25maWcsXG4gIE51bWJlckZvcm1hdFNwZWMsXG4gIE91dHB1dE1ldGEsXG4gIE91dHB1dFJvbGUsXG4gIFJlcG9ydENvbXBvbmVudCxcbiAgUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgUmVwb3J0TG9jYWxlVGFnLFxuICBXYXRlcmZhbGxTdGVwS2luZCxcbiAgV2luZG93TWV0YSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0TWFya0FjdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQtbWFyay1hY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnLi90ZXh0JztcbmltcG9ydCB7XG4gIFJFUE9SVF9DSEFSVF9DT0xPUl9CWV9OQU1FLFxuICBSRVBPUlRfQ0hBUlRfQ09MT1JTLFxuICBSRVBPUlRfQ0hBUlRfQ09MT1JTX0NTUyxcbiAgUkVQT1JUX1JFRkVSRU5DRV9DT0xPUixcbiAgUkVQT1JUX1dBVEVSRkFMTF9DT0xPUlMsXG59IGZyb20gJy4vdGhlbWUvcGFsZXR0ZSc7XG5pbXBvcnQgeyBSRVBPUlRfQVhJU19MQUJFTF9GT05UX1NJWkUsIFJFUE9SVF9DSEFSVF9GT05UX0ZBTUlMWSwgUkVQT1JUX0RBVEFfTEFCRUxfRk9OVF9TSVpFIH0gZnJvbSAnLi90aGVtZS90eXBvZ3JhcGh5JztcblxuXG4vLyBSb29tIGZvciBhbiBheGlzIHRpdGxlLiBFQ2hhcnRzIDUncyBjb250YWluTGFiZWwga2VlcHMgdGhlIFRJQ0sgbGFiZWxzIGluc2lkZVxuLy8gdGhlIGdyaWQgYnV0IG5vdCB0aGUgYXhpcyBuYW1lLCBzbyB3aXRob3V0IHRoaXMgYSB2ZXJ0aWNhbCBjaGFydCdzIGNhdGVnb3J5XG4vLyB0aXRsZSBydW5zIG9mZiB0aGUgYm90dG9tIGVkZ2Ugb3IgdW5kZXIgYSBib3R0b20gbGVnZW5kLCBhbmQgaXRzIHZhbHVlIHRpdGxlXG4vLyBhYm92ZSB0aGUgcGxvdCBydW5zIG9mZiB0aGUgdG9wIG9yIHVuZGVyIGEgdG9wIGxlZ2VuZC5cbmNvbnN0IEFYSVNfTkFNRV9ST09NID0gMjA7XG4vLyBFQ2hhcnRzJyBvd24gZGVmYXVsdCBnYXAgYmV0d2VlbiB0aGUgYXhpcyBsaW5lIGFuZCBpdHMgdGljayBsYWJlbHMuXG5jb25zdCBBWElTX0xBQkVMX01BUkdJTiA9IDg7XG4vLyBDbGVhcmFuY2UgYmV0d2VlbiB0aGUgbG9uZ2VzdCB0aWNrIGxhYmVsIGFuZCBhIGhvcml6b250YWwgY2hhcnQncyByb3RhdGVkXG4vLyB0aXRsZSwgc28gdGhlIHR3byBuZXZlciB0b3VjaC5cbmNvbnN0IEFYSVNfTkFNRV9DTEVBUkFOQ0UgPSA2O1xuLy8gQSBob3Jpem9udGFsIGNoYXJ0J3MgY2F0ZWdvcnkgbGFiZWxzIGFyZSBjdXQgc2hvcnQgd2l0aCBhbiBlbGxpcHNpcyBwYXN0XG4vLyB0aGlzIHdpZHRoICh0aGUgdG9vbHRpcCBzdGlsbCBzaG93cyB0aGVtIGluIGZ1bGwpLCBzbyBvbmUgbG9uZyBsYWJlbCBjYW5ub3Rcbi8vIHNxdWVlemUgdGhlIHBsb3QgYXdheS5cbmNvbnN0IENBVEVHT1JZX0xBQkVMX01BWF9XSURUSCA9IDE2MDtcbmNvbnN0IExBQkVMX0VMTElQU0lTID0gJ+KApic7XG4vLyBUaGUgZm9udCB0aGUgdGhlbWUgZHJhd3MgYXhpcyBsYWJlbHMgaW4sIGFzIGEgY2FudmFzIGZvbnQgc3RyaW5nLiBMYWJlbHMgYXJlXG4vLyBtZWFzdXJlZCBpbiBpdCB0aGUgd2F5IEVDaGFydHMgbWVhc3VyZXMgdGhlbSBmb3IgY29udGFpbkxhYmVsLCBzbyBhXG4vLyBob3Jpem9udGFsIGNoYXJ0J3MgdGl0bGUgbGFuZHMgZXhhY3RseSBiZXlvbmQgdGhlIHdpZGVzdCBsYWJlbC5cbmNvbnN0IEFYSVNfTEFCRUxfRk9OVCA9IGAke1JFUE9SVF9BWElTX0xBQkVMX0ZPTlRfU0laRX1weCAke1JFUE9SVF9DSEFSVF9GT05UX0ZBTUlMWX1gO1xuLy8gVGhlIGxldHRlciBhIHF1YXJ0ZXIgbGFiZWwgc3RhcnRzIHdpdGgsIGJ5IGxhbmd1YWdlIHN1YnRhZy4gRnJlbmNoIHdyaXRlcyB0aGVcbi8vIHNlY29uZCBxdWFydGVyICdUMicgKHRyaW1lc3RyZSk7IGV2ZXJ5IG90aGVyIGxhbmd1YWdlIHJlYWRzICdRMicuXG5jb25zdCBRVUFSVEVSX1BSRUZJWEVTID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZnInLCAnVCddXSk7XG5jb25zdCBRVUFSVEVSX1BSRUZJWCA9ICdRJztcbi8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3MgdmFsdWUgYXhpczogd2hvbGUgcGVyY2VudGFnZXMsIGEgZ3JpZGxpbmUgZXZlcnkgMjUlLFxuLy8gdXAgdG8gMTAwJS4gSXRzIHRvb2x0aXAgZ2l2ZXMgZWFjaCBzaGFyZSB0byBvbmUgZGVjaW1hbC5cbmNvbnN0IFBFUkNFTlRfQVhJU19GT1JNQVQ6IE51bWJlckZvcm1hdFNwZWMgPSB7IGZvcm1hdDogUmVwb3J0VmFsdWVGb3JtYXQuUGVyY2VudCwgcHJlY2lzaW9uOiAwIH07XG5jb25zdCBQRVJDRU5UX1NIQVJFX0ZPUk1BVDogTnVtYmVyRm9ybWF0U3BlYyA9IHsgZm9ybWF0OiBSZXBvcnRWYWx1ZUZvcm1hdC5QZXJjZW50LCBwcmVjaXNpb246IDEgfTtcbmV4cG9ydCBjb25zdCBQRVJDRU5UX0FYSVNfTUFYID0gMTtcbmV4cG9ydCBjb25zdCBQRVJDRU5UX0FYSVNfSU5URVJWQUwgPSAwLjI1O1xuLy8gQSByZWZlcmVuY2UgYmFuZCdzIGZpbGw6IHRoZSByZWZlcmVuY2Ugc2xhdGUsIGZhaW50IGVub3VnaCB0aGF0IHRoZSBzZXJpZXNcbi8vIGRyYXduIGFjcm9zcyBpdCBzdGF5IHJlYWRhYmxlLlxuY29uc3QgUkVGRVJFTkNFX0JBTkRfRklMTCA9ICdyZ2JhKDgyLCA5NiwgMTA5LCAwLjA4KSc7XG4vLyBBIHJlZmVyZW5jZSdzIG9yIHN0YXRpc3RpYyBsaW5lJ3MgbGFiZWwgc2l0cyBvbiBhIGxpZ2h0IGJveCwgc28gaXQgc3RheXNcbi8vIHJlYWRhYmxlIHdoZXJlIGl0IGNyb3NzZXMgYSBiYXIgb3IgYSBsaW5lLlxuY29uc3QgTUFSS19MQUJFTF9CT1ggPSB7IGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSknLCBwYWRkaW5nOiBbMSwgM10sIGJvcmRlclJhZGl1czogMiB9O1xuLy8gVGhlIHJvb20gYW4gYXhpcyBzdHJldGNoZWQgdG8gYSByZWZlcmVuY2UgbGVhdmVzIGFib3ZlIGl0LCBmb3IgaXRzIGxhYmVsOlxuLy8gdGhlIGJvdW5kIGlzIHRoZSByb3VuZCBudW1iZXIgYXQgb3IgcGFzdCB0aGUgcmVmZXJlbmNlIHBsdXMgdGhpcyBzaGFyZS5cbmNvbnN0IFJFRkVSRU5DRV9IRUFEUk9PTSA9IDEuMDU7XG5cbi8vIEhvdyBhIGNoYXJ0IG1hcmtzIHdoYXQgdGhlIHNlcnZlciBzYXlzIG9mIGl0cyBudW1iZXJzIChDb21wb25lbnREYXRhJ3Ncbi8vIGNvbXBhcmlzb24sIG91dHB1dHMsIHdpbmRvd3MgYW5kIHBhcnRpYWxQZXJpb2QpLiBUaGUgd29yZHMgYXJlIGludGVyZmFjZVxuLy8gdGV4dCwgRW5nbGlzaCBpbiBldmVyeSByZXBvcnQgbG9jYWxlLlxuLy8gLSBUaGUgaGVhZGluZyBvZiBhIHBlcmlvZCBub3Qgb3ZlciB5ZXQgKCdTZXB0ZW1iZXIgMjAyNiAodG8gZGF0ZSknKS5cbmNvbnN0IFBBUlRJQUxfUEVSSU9EX1RFWFQgPSAndG8gZGF0ZSc7XG4vLyAtIEEgY29tcGFyZWQgc2VyaWVzJyBuYW1lOiBpdHMgbWVhc3VyZSdzLCB0aGVuIGl0cyByb2xlIGFuZCBsYW5lICgnUmV2ZW51ZVxuLy8gICBjaGFuZ2UgKHZzIHByZXZpb3VzIHdlZWspJykuIEEgcHJpb3Iga2VlcHMgdGhlIG1lYXN1cmUncyBuYW1lIGFsb25lLlxuY29uc3QgUk9MRV9OQU1FX1NVRkZJWEVTOiBSZWNvcmQ8RXhjbHVkZTxPdXRwdXRSb2xlLCAnY3VycmVudCc+LCBzdHJpbmc+ID0ge1xuICBwcmlvcjogJycsXG4gIGNoYW5nZTogJyBjaGFuZ2UnLFxuICBwZXJjZW50X2NoYW5nZTogJyAlIGNoYW5nZScsXG59O1xuLy8gLSBBIHByaW9yIHNlcmllcycgYmFyczogaXRzIGN1cnJlbnQgc2VyaWVzJyBjb2xvciwgZmFkZWQsIHdpdGggYSBkYXNoZWRcbi8vICAgZWRnZS4gSXRzIGxpbmUgaXMgZGFzaGVkIChQUklPUl9MSU5FX1NUWUxFKSB1bmxlc3MgaXRzIG1lYXN1cmUgbmFtZXMgb25lLlxuY29uc3QgUFJJT1JfQkFSX09QQUNJVFkgPSAwLjQ1O1xuY29uc3QgUFJJT1JfTElORV9TVFlMRSA9IFJlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZDtcbi8vIC0gVGhlIHBlcmlvZCBub3Qgb3ZlciB5ZXQ6IGl0cyBiYXIgaGF0Y2hlZCBpbiBsaWdodCBzdHJpcGVzLCBpdHMgcG9pbnQgb24gYVxuLy8gICBsaW5lIGRyYXduIGxhcmdlciB3aXRoIGEgZGFzaGVkIGVkZ2UsIGFuZCwgd2hlbiBpdCBpcyB0aGUgbGFzdCBvbmUsIHRoZVxuLy8gICBsaW5lJ3MgbGFzdCBzZWdtZW50IGRhc2hlZC5cbmNvbnN0IFBBUlRJQUxfTElORV9TVFlMRSA9IFJlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZDtcbmNvbnN0IFBBUlRJQUxfQkFSX0RFQ0FMID0ge1xuICBzeW1ib2w6ICdub25lJyxcbiAgZGFzaEFycmF5WDogWzEsIDBdLFxuICBkYXNoQXJyYXlZOiBbMywgNV0sXG4gIHJvdGF0aW9uOiAtTWF0aC5QSSAvIDQsXG4gIGNvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpJyxcbn07XG5jb25zdCBQQVJUSUFMX1BPSU5UX01BUksgPSB7IHN5bWJvbDogJ2VtcHR5Q2lyY2xlJywgc3ltYm9sU2l6ZTogOSwgaXRlbVN0eWxlOiB7IGJvcmRlclR5cGU6ICdkYXNoZWQnIH0gfTtcbi8vIC0gVGhlIGxhc3Qgc2VnbWVudCdzIHNlcmllcyBpZDogdGhpcywgdGhlbiB0aGUgaW5kZXggb2YgdGhlIHNlcmllcyBpdFxuLy8gICBjb250aW51ZXMgKHBhcnRpYWxTZWdtZW50SWQpLlxuY29uc3QgUEFSVElBTF9TRUdNRU5UX0lEID0gJ3BhcnRpYWwtc2VnbWVudC0nO1xuLy8gLSBBIHZhbHVlIGF4aXMgb2YgcmFua3Mgb25seTogcmFuayAxIGF0IHRoZSB0b3AsIHdob2xlIHN0ZXBzLCBmcm9tIDEuXG5jb25zdCBSQU5LX0FYSVNfRk9STUFUOiBOdW1iZXJGb3JtYXRTcGVjID0geyBmb3JtYXQ6IFJlcG9ydFZhbHVlRm9ybWF0Lk51bWJlciwgcHJlY2lzaW9uOiAwIH07XG4vLyAoU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnQgZXhwb3J0LCB3aG9zZSByYW5rIGF4ZXMgc3RhcnQgdGhlcmUgdG9vLilcbmV4cG9ydCBjb25zdCBSQU5LX0FYSVNfTUlOID0gMTtcbi8vIC0gQSB2YWx1ZSBheGlzIG9mIDAtMSBmcmFjdGlvbnMgb25seSAoc2hhcmVzLCBwZXJjZW50IGNoYW5nZXMpIGlzIGFcbi8vICAgcGVyY2VudCBheGlzLCBpdHMgZGVjaW1hbHMgZGVjaWRlZCBieSBpdHMgcGVhay5cbmNvbnN0IEZSQUNUSU9OX0FYSVNfRk9STUFUOiBOdW1iZXJGb3JtYXRTcGVjID0geyBmb3JtYXQ6IFJlcG9ydFZhbHVlRm9ybWF0LlBlcmNlbnQgfTtcbi8vIC0gQmV0d2VlbiBhIHRvb2x0aXAgdmFsdWUgYW5kIHdoYXQgaXQgY292ZXJzLlxuY29uc3QgVE9PTFRJUF9ERVRBSUxfU0VQQVJBVE9SID0gJyDCtyAnO1xuLy8gLSBUaGUgcHJpb3IgYSB0b29sdGlwIHZhbHVlIGlzIGNvbXBhcmVkIHdpdGgsIHdoZW4gdGhlIGNoYXJ0IGRvZXMgbm90IHBsb3Rcbi8vICAgaXQgKCd2cyA1MCUgKFNlcCAxIOKAkyAyLCAyMDI2KScpLlxuY29uc3QgQ09NUEFSRURfUFJJT1JfUFJFRklYID0gJ3ZzJztcblxuLy8gVGhlIHRvb2x0aXAncyBsYXN0IGxpbmUgb24gYSBjaGFydCB3aG9zZSBtYXJrcyBhY3Qgb24gYSBjbGlja1xuLy8gKG1hcmtBY3Rpb25IaW50KTogb25lIGFjdGlvbiBieSBpdHMgZnVsbCBuYW1lLCBzZXZlcmFsIGJ5IHRoZWlyIHNob3J0XG4vLyBuYW1lcywgaW4gdGhpcyBvcmRlci4gSW50ZXJmYWNlIHRleHQsIEVuZ2xpc2ggaW4gZXZlcnkgcmVwb3J0IGxvY2FsZS5cbmNvbnN0IE1BUktfQUNUSU9OX09SREVSOiByZWFkb25seSBSZXBvcnRNYXJrQWN0aW9uW10gPSBbJ2RyaWxsJywgJ2Nyb3NzRmlsdGVyJywgJ2RldGFpbCddO1xuY29uc3QgTUFSS19BQ1RJT05fSElOVFM6IFJlY29yZDxSZXBvcnRNYXJrQWN0aW9uLCBzdHJpbmc+ID0ge1xuICBkcmlsbDogJ2RyaWxsIGRvd24nLFxuICBjcm9zc0ZpbHRlcjogJ2ZpbHRlciBvdGhlciB0aWxlcycsXG4gIGRldGFpbDogJ3Nob3cgcm93cycsXG59O1xuY29uc3QgTUFSS19BQ1RJT05fU0hPUlRfSElOVFM6IFJlY29yZDxSZXBvcnRNYXJrQWN0aW9uLCBzdHJpbmc+ID0ge1xuICBkcmlsbDogJ2RyaWxsIGRvd24nLFxuICBjcm9zc0ZpbHRlcjogJ2ZpbHRlcicsXG4gIGRldGFpbDogJ3Nob3cgcm93cycsXG59O1xuXG4vLyBUaGUgd29yZHMgYSBzdGF0aXN0aWMgbGluZSdzIGxhYmVsIHN0YXJ0cyB3aXRoLiBUaGV5IGFyZSBpbnRlcmZhY2UgdGV4dCxcbi8vIEVuZ2xpc2ggaW4gZXZlcnkgcmVwb3J0IGxvY2FsZTsgb25seSB0aGUgdmFsdWUgYWZ0ZXIgdGhlbSBmb2xsb3dzIGl0LlxuZXhwb3J0IGNvbnN0IFNUQVRfTEFCRUw6IFJlY29yZDxSZXBvcnRDaGFydE1hcmtTdGF0LCBzdHJpbmc+ID0ge1xuICBbUmVwb3J0Q2hhcnRNYXJrU3RhdC5BdmVyYWdlXTogJ0F2ZXJhZ2UnLFxuICBbUmVwb3J0Q2hhcnRNYXJrU3RhdC5NZWRpYW5dOiAnTWVkaWFuJyxcbiAgW1JlcG9ydENoYXJ0TWFya1N0YXQuTWluXTogJ01pbmltdW0nLFxuICBbUmVwb3J0Q2hhcnRNYXJrU3RhdC5NYXhdOiAnTWF4aW11bScsXG59O1xuXG4vLyBXaGljaCBlZGdlIG9mIHRoZSBwbG90IGFuIGF4aXMgdGl0bGUgc2l0cyBvbi4gVGhlIGNhdGVnb3J5IGF4aXMncyBpcyBiZWxvdyBhXG4vLyB2ZXJ0aWNhbCBjaGFydCBhbmQgdG8gdGhlIGxlZnQgb2YgYSBob3Jpem9udGFsIG9uZTsgdGhlIHZhbHVlIGF4aXMncyBpcyBhYm92ZVxuLy8gYSB2ZXJ0aWNhbCBjaGFydCBhbmQgYmVsb3cgYSBob3Jpem9udGFsIG9uZS5cbnR5cGUgQXhpc1RpdGxlU2lkZSA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5cbi8vIFdoaWNoIHZhbHVlIGF4aXMgYSBzZXJpZXMgaXMgcGxvdHRlZCBhZ2FpbnN0OiAwIHRoZSBwcmltYXJ5LCAxIHRoZSBzZWNvbmRcbi8vIGF4aXMgb24gdGhlIHJpZ2h0LlxuZXhwb3J0IHR5cGUgVmFsdWVBeGlzSW5kZXggPSAwIHwgMTtcblxuLy8gV2hhdCB2YWx1ZUF4aXNPcHRpb24gYWRkcyBmb3Igb25lIGF4aXMuIGBpbmRleGAgaXMgdGhlIGF4aXMgb2YgYSB0d28tYXhpc1xuLy8gY2hhcnQgaXQgYnVpbGRzOiB0aGUgc2Vjb25kIG9uZSdzIHRpdGxlIGlzIGFsaWduZWQgdG8gcmVhZCBsZWZ0d2FyZCBmcm9tIHRoZVxuLy8gcmlnaHQgZWRnZS4gYHBlcmNlbnRNaW5gIG1ha2VzIGl0IGEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpcywgZnJvbVxuLy8gdGhhdCBib3VuZCAoMCwgb3IgLTEgd2hlbiBhIHNoYXJlIGlzIG5lZ2F0aXZlKSB1cCB0byAxMDAlLCB3aGF0ZXZlciByYW5nZVxuLy8gdGhlIGNvbmZpZyBwaW5zLiBgcmVhY2hgIGlzIHRoZSBzcGFuIG9mIHRoZSByZWZlcmVuY2VzIHBsb3R0ZWQgYWdhaW5zdCBpdCxcbi8vIHdoaWNoIHRoZSBheGlzIHN0cmV0Y2hlcyB0byB3aGVuIHRoZSBkYXRhIGZhbGxzIHNob3J0IG9mIHRoZW0uIGByYW5rYFxuLy8gaW52ZXJ0cyBpdC5cbmludGVyZmFjZSBWYWx1ZUF4aXNFeHRyYXMge1xuICBpbmRleD86IFZhbHVlQXhpc0luZGV4O1xuICBwZXJjZW50TWluPzogbnVtYmVyO1xuICByZWFjaD86IFJlZmVyZW5jZVJlYWNoO1xuICAvLyBFdmVyeSBzZXJpZXMgb24gdGhlIGF4aXMgcGxvdHMgYSByYW5rOiBpdCBydW5zIGZyb20gcmFuayAxIGF0IHRoZSB0b3AgaW5cbiAgLy8gd2hvbGUgc3RlcHMuXG4gIHJhbms/OiBib29sZWFuO1xufVxuXG4vLyBBIHJlZmVyZW5jZSBhcyB0aGUgY2hhcnQgZHJhd3MgaXQ6IGl0cyBsb3dlciBhbmQgdXBwZXIgZWRnZSAodGhlIHNhbWUgdmFsdWVcbi8vIGZvciBhIGxpbmUpLCB3aGV0aGVyIGl0IGlzIGEgYmFuZCwgYW5kIHRoZSB2YWx1ZSBheGlzIGl0IGlzIHBsb3R0ZWQgYWdhaW5zdC5cbi8vIFNoYXJlZCB3aXRoIHRoZSBQb3dlclBvaW50IGV4cG9ydCwgd2hpY2ggZHJhd3MgZWFjaCBlZGdlIGFzIGEgY29uc3RhbnQgbGluZS5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhd25SZWZlcmVuY2Uge1xuICBsYWJlbDogc3RyaW5nO1xuICBsb3c6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xuICBiYW5kOiBib29sZWFuO1xuICBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4O1xufVxuXG4vLyBUaGUgbG93ZXN0IGFuZCBoaWdoZXN0IGVkZ2Ugb2YgdGhlIHJlZmVyZW5jZXMgb24gb25lIHZhbHVlIGF4aXMuXG5pbnRlcmZhY2UgUmVmZXJlbmNlUmVhY2gge1xuICBsb3c6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xufVxuXG4vLyBXaGF0IEVDaGFydHMgaGFuZHMgYSB2YWx1ZSBheGlzJ3MgbWluIGFuZCBtYXggY2FsbGJhY2tzOiB0aGUgZXh0ZW50IG9mIHRoZVxuLy8gZGF0YSBwbG90dGVkIGFnYWluc3QgaXQuXG5pbnRlcmZhY2UgQXhpc0V4dGVudCB7XG4gIG1pbjogbnVtYmVyO1xuICBtYXg6IG51bWJlcjtcbn1cblxuLy8gT25lIHBvaW50IG9mIGEgMTAwJSBzdGFja2VkIHNlcmllczogaXRzIHNoYXJlIG9mIHRoZSBjYXRlZ29yeSdzIHRvdGFsLFxuLy8gd2hpY2ggRUNoYXJ0cyBwbG90cyBhbmQgc3RhY2tzLCBhbmQgdGhlIHZhbHVlIGl0IGNhbWUgZnJvbS5cbmludGVyZmFjZSBTaGFyZURhdGFJdGVtIHtcbiAgdmFsdWU6IG51bWJlciB8IG51bGw7XG4gIHJhdzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gQSBwb2ludCB0aGF0IHByaW50cyBpdHMgb3duIGRhdGEgbGFiZWw6IGEgJ2xhc3QnIHNlcmllcycgbGF0ZXN0IHBvaW50LFxuLy8ga2VlcGluZyB0aGUgcmF3IHZhbHVlIGEgMTAwJSBzdGFja2VkIHBvaW50IGNhcnJpZXMuXG5pbnRlcmZhY2UgTGFiZWxlZERhdGFJdGVtPFAgZXh0ZW5kcyBEYXRhTGFiZWxQb3NpdGlvbj4ge1xuICB2YWx1ZTogbnVtYmVyIHwgbnVsbDtcbiAgcmF3PzogbnVtYmVyIHwgbnVsbDtcbiAgbGFiZWw6IERhdGFMYWJlbDxQPjtcbn1cblxudHlwZSBTZXJpZXNEYXRhSXRlbTxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24+ID0gbnVtYmVyIHwgbnVsbCB8IFNoYXJlRGF0YUl0ZW0gfCBMYWJlbGVkRGF0YUl0ZW08UD47XG5cbi8vIFdoYXQgYSBkYXRhIGxhYmVsJ3MgZm9ybWF0dGVyIGlzIGhhbmRlZDogdGhlIHBvaW50J3MgcGxvdHRlZCB2YWx1ZSwgaXRzXG4vLyBkYXRhIGl0ZW0gYXMgZ2l2ZW4gKGEgbnVtYmVyLCBvciBhbiBvYmplY3QgY2FycnlpbmcgdGhlIHJhdyB2YWx1ZSksIGFuZCBpdHNcbi8vIGluZGV4LlxuaW50ZXJmYWNlIERhdGFMYWJlbFBhcmFtcyB7XG4gIHZhbHVlPzogdW5rbm93bjtcbiAgZGF0YT86IHVua25vd247XG4gIGRhdGFJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRGF0YUxhYmVsRm9ybWF0dGVyID0gKHBhcmFtczogRGF0YUxhYmVsUGFyYW1zKSA9PiBzdHJpbmc7XG5cbi8vIFdoZXJlIGEgZGF0YSBsYWJlbCBzaXRzOiAnb3V0c2lkZScgcGFzdCBhbiB1bnN0YWNrZWQgYmFyJ3MgZW5kLCBvbiB0aGUgc2lkZVxuLy8gaXRzIHNpZ24gcG9pbnRzIHRvOyAnaW5zaWRlJyBhIHN0YWNrZWQgYmFyOyAndG9wJyBhYm92ZSBhIGxpbmUgb3IgYXJlYVxuLy8gcG9pbnQuIEVDaGFydHMgdGFrZXMgJ291dHNpZGUnIG9uIGEgYmFyIG9ubHkuXG5leHBvcnQgdHlwZSBEYXRhTGFiZWxQb3NpdGlvbiA9ICd0b3AnIHwgJ2luc2lkZScgfCAnb3V0c2lkZSc7XG5cbi8vIE9uZSBFQ2hhcnRzIGxhYmVsLCBhcyBhIHNlcmllcyBvciBhIHNpbmdsZSBwb2ludCBwcmludHMgaXQuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFMYWJlbDxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24gPSBEYXRhTGFiZWxQb3NpdGlvbj4ge1xuICBzaG93OiB0cnVlO1xuICBwb3NpdGlvbjogUDtcbiAgZm9udFNpemU6IG51bWJlcjtcbiAgZm9ybWF0dGVyOiBEYXRhTGFiZWxGb3JtYXR0ZXI7XG59XG5cbi8vIEEgc2VyaWVzJyBkYXRhIGxhYmVscyBhcyBkYXRhTGFiZWxPcHRpb24gZGVjaWRlcyB0aGVtLCBiZWZvcmUgYnVpbGRTZXJpZXNcbi8vIHBsYWNlcyB0aGVtIGJ5IHdoYXQgdGhlIHNlcmllcyBkcmF3czogdGhlIGxhYmVsJ3MgdGV4dCBhbmQgc2l6ZSwgd2hldGhlclxuLy8gbGFiZWxzIHRoYXQgd291bGQgb3ZlcmxhcCBhcmUgaGlkZGVuICgnYXV0bycpLCBhbmQgd2hldGhlciBvbmx5IHRoZSBsYXRlc3Rcbi8vIHBvaW50IHByaW50cyBvbmUgKCdsYXN0JykuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmllc0RhdGFMYWJlbHMge1xuICB0ZXh0OiBPbWl0PERhdGFMYWJlbCwgJ3Bvc2l0aW9uJz47XG4gIGhpZGVPdmVybGFwOiBib29sZWFuO1xuICBsYXN0T25seTogYm9vbGVhbjtcbn1cblxuLy8gQSBzZXJpZXMnIGRhdGEgbGFiZWxzIHBsYWNlZDogYHNlcmllc2AgaXMgc3ByZWFkIG92ZXIgdGhlIHNlcmllcyAoaXRzXG4vLyBsYWJlbCwgYW5kIGZvciAnYXV0bycgdGhlIG92ZXJsYXAgaGlkaW5nKSwgYW5kIGBkYXRhYCBpcyBpdHMgcG9pbnRzLCB0aGVcbi8vIGxhdGVzdCBub24tZW1wdHkgb25lIGNhcnJ5aW5nIHRoZSBsYWJlbCBmb3IgJ2xhc3QnLlxuaW50ZXJmYWNlIFBsYWNlZERhdGFMYWJlbHM8UCBleHRlbmRzIERhdGFMYWJlbFBvc2l0aW9uPiB7XG4gIHNlcmllczogeyBsYWJlbD86IERhdGFMYWJlbDxQPjsgbGFiZWxMYXlvdXQ/OiB7IGhpZGVPdmVybGFwOiBib29sZWFuIH0gfTtcbiAgZGF0YTogU2VyaWVzRGF0YUl0ZW08UD5bXTtcbn1cblxuLy8gQSB2YWx1ZSBheGlzJ3MgbnVtYmVyIGZvcm1hdCwgZGVjaWRlZCBvbmNlIGZvciB0aGUgYXhpczogdGhlIGZvcm1hdCB0aGVcbi8vIG1lYXN1cmVzIHBsb3R0ZWQgYWdhaW5zdCBpdCBhZ3JlZSBvbiAoYXhpc051bWJlckZvcm1hdCksIHdpdGggdGhlIHVuaXRzIGFuZFxuLy8gZGVjaW1hbHMgaXRzIHBlYWsgY2FsbHMgZm9yLCBhbmQgdGhlIGNvbnRleHQgaXRzIHRpY2tzIGFyZSB3cml0dGVuIGluIChhblxuLy8gYXhpcyBvZiAwLTEgZnJhY3Rpb25zIHJlYWRzIHRoZW0gYXMgcmF0aW9zIHdoYXRldmVyIHRoZSByZXBvcnQnc1xuLy8gcGVyY2VudEZvcm1hdCkuIG51bGwgaXMgYSBwbGFpbiBheGlzLiBJdHMgdGlja3MgYW5kIGl0cyBzZXJpZXMnIGRhdGEgbGFiZWxzXG4vLyBib3RoIHdyaXRlIGluIGl0LlxuaW50ZXJmYWNlIFZhbHVlQXhpc0Zvcm1hdCB7XG4gIHNwZWM6IE51bWJlckZvcm1hdFNwZWM7XG4gIGNoYXJ0OiBDaGFydE51bWJlckZvcm1hdDtcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dDtcbn1cblxuLy8gVGhlIHNoYXJlcyBhIDEwMCUgc3RhY2tlZCBjaGFydCBkcmF3cywgYnkgdGhlIGluZGV4IG9mIHRoZSBleHRyYWN0ZWQgc2VyaWVzXG4vLyB0aGV5IHJlcGxhY2UuXG5leHBvcnQgdHlwZSBQZXJjZW50U2hhcmVzID0gTWFwPG51bWJlciwgKG51bWJlciB8IG51bGwpW10+O1xuXG4vLyBUaGUgcGxvdCdzIGRpc3RhbmNlIGZyb20gZWFjaCBlZGdlIG9mIHRoZSBjaGFydCwgaW4gcGl4ZWxzLlxuaW50ZXJmYWNlIEF4aXNHcmlkUm9vbSB7XG4gIGxlZnQ6IG51bWJlcjtcbiAgcmlnaHQ6IG51bWJlcjtcbiAgdG9wOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xuICBjb250YWluTGFiZWw6IGJvb2xlYW47XG59XG5cblxuLy8gY29sb3JCeSBhcHBsaWVzIG9ubHkgdG8gc2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzLCBhbmQgb25seSB3aGVuIHNwbGl0Qnlcbi8vIGlzbid0IGFscmVhZHkgZHJpdmluZyBtdWx0aXBsZSBzZXJpZXM6IGl0IGNvbG9ycyBlYWNoIGJhciBieSBpdHMgY2F0ZWdvcnkgYW5kXG4vLyBzaG93cyBhIGxlZ2VuZCAob25lIHNlcmllcyBwZXIgY2F0ZWdvcnksIG92ZXJsYXBwZWQgdG8gZnVsbCB3aWR0aCkuXG4vL1xuLy8gSXQgaXMgdGhlIERFRkFVTFQgZm9yIGEgY2F0ZWdvcmljYWwgYmFyIGNoYXJ0IHJhdGhlciB0aGFuIHNvbWV0aGluZyB0aGUgY29uZmlnXG4vLyBoYXMgdG8gYXNrIGZvci4gQSBiYXIgY2hhcnQgd2hvc2UgeC1heGlzIGlzIGEgY2F0ZWdvcnkg4oCUIHJlZ2lvbnMsIHN0YXR1c2VzLFxuLy8gc3RvcmVzIOKAlCBpcyBjb21wYXJpbmcgdGhvc2UgY2F0ZWdvcmllcyB0byBlYWNoIG90aGVyLCBhbmQgb25lIGZsYXQgY29sb3Igd2l0aFxuLy8gbm8gbGVnZW5kIGlzIHRoZSB3cm9uZyByZWFkaW5nIG9mIGl0IGluIGVzc2VudGlhbGx5IGV2ZXJ5IGNhc2UuIFJlcXVpcmluZ1xuLy8gY29sb3JCeSB0byBvcHQgaW4gbWVhbnQgZXZlcnkgc3VjaCBjaGFydCByZW5kZXJlZCBtb25vY2hyb21lIHVubGVzcyB3aG9ldmVyXG4vLyB3cm90ZSB0aGUgY29uZmlnIHJlbWVtYmVyZWQgYW4gb3B0aW9uYWwgcHJvcGVydHksIHdoaWNoIGlzIGEgZGVmYXVsdCBzZXQgdGhlXG4vLyB3cm9uZyB3YXkgcm91bmQ6IHRoZSBjb21tb24gY2FzZSBzaG91bGQgbm90IG5lZWQgdGhlIGZsYWcuXG4vL1xuLy8gQSBUSU1FIGF4aXMgaXMgZXhjbHVkZWQ6IGNvbnNlY3V0aXZlIHBlcmlvZHMgYXJlIG9uZSBzZXJpZXMgbW92aW5nLCBub3Rcbi8vIGNhdGVnb3JpZXMgYmVpbmcgY29tcGFyZWQsIGFuZCBjb2xvcmluZyBlYWNoIG1vbnRoIGRpZmZlcmVudGx5IHJlYWRzIGFzXG4vLyB1bnJlbGF0ZWQgZ3JvdXBzLiBFeHBsaWNpdGx5IG9wdGluZyBvdXQg4oCUIGNvbG9yQnk6IHtjb2x1bW46ICcnfSwgYSBjb2xvciBvblxuLy8gdGhlIG1lYXN1cmUgb3IgYSBjb25maWcubGVnZW5kIG9mICdoaWRkZW4nIOKAlCBzdGlsbCB3aW5zLCBzbyBhIGNhbGxlciB0aGF0XG4vLyB3YW50cyBvbmUgZmxhdCBjb2xvciBjYW4gc2F5IHNvLlxuLy9cbi8vIFwiQmFyIGNoYXJ0XCIgaXMgdGhlIHR5cGUgdGhlIGxvbmUgbWVhc3VyZSBpcyBhY3R1YWxseSBEUkFXTiBhczogaXRzIG93biB0eXBlXG4vLyB3aGVuIGl0IG5hbWVzIG9uZSwgd2hpY2ggY2FuIHR1cm4gYSBsaW5lIGNoYXJ0J3Mgc2luZ2xlIHNlcmllcyBpbnRvIGJhcnMgb3Jcbi8vIGEgYmFyIGNoYXJ0J3MgaW50byBhIGxpbmUuXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xvckJ5KGNvbmZpZzogQ2hhcnRDb25maWcpOiBib29sZWFuIHtcbiAgaWYgKGNvbmZpZy5zcGxpdEJ5Py5jb2x1bW4gfHwgKGNvbmZpZy5tZWFzdXJlcz8uWzBdPy50eXBlID8/IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2JhcicpICE9PSAnYmFyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChjb25maWcuY29sb3JCeSkge1xuICAgIHJldHVybiAhIWNvbmZpZy5jb2xvckJ5LmNvbHVtbjtcbiAgfVxuXG4gIC8vIEEgbWVhc3VyZSBnaXZlbiBpdHMgb3duIGNvbG9yIGFza3MgZm9yIG9uZSBmbGF0IGNvbG9yLlxuICBpZiAobWVhc3VyZUNvbG9ySGV4KGNvbmZpZy5tZWFzdXJlcz8uWzBdKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoY29uZmlnLnhBeGlzPy5raW5kID8/ICdjYXRlZ29yeScpID09PSAnY2F0ZWdvcnknXG4gICAgJiYgIWNvbmZpZy54QXhpcz8uZ3JhbnVsYXJpdHlcbiAgICAmJiAoY29uZmlnLm1lYXN1cmVzPy5sZW5ndGggPz8gMSkgPD0gMTtcbn1cblxuXG4vLyBUaGUgY29sdW1uIGNvbG9yQnkgZ3JvdXBzIGJ5IOKAlCBpdHMgb3duIHdoZW4gdGhlIGNvbmZpZyBuYW1lZCBvbmUsIG90aGVyd2lzZVxuLy8gdGhlIHgtYXhpcyBpdCBkZWZhdWx0cyB0byBjb2xvcmluZy5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvckJ5Q29sdW1uKGNvbmZpZzogQ2hhcnRDb25maWcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXNDb2xvckJ5KGNvbmZpZylcbiAgICA/IChjb25maWcuY29sb3JCeT8uY29sdW1uIHx8IGNvbmZpZy54QXhpcz8uY29sdW1uKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5cbi8vIENhdGVnb3JpZXMgKyBuYW1lZCBzZXJpZXMgZXh0cmFjdGVkIGZyb20gYSBjaGFydCBjb21wb25lbnQncyBjb25maWcgKyByb3dzIOKAlFxuLy8gdGhlIG9uZSBwaXZvdCAoc3BsaXRCeSDihpIgc2VyaWVzLCBtZWFzdXJlcyDihpIgc2VyaWVzKSBzaGFyZWQgYnkgdGhlIG9uLXNjcmVlblxuLy8gRUNoYXJ0cyBvcHRpb24gYmVsb3cgQU5EIHRoZSBQb3dlclBvaW50IGV4cG9ydCdzIG5hdGl2ZSBjaGFydCBkYXRhLCBzbyBib3RoXG4vLyBtZWRpYSBwbG90IGlkZW50aWNhbCBudW1iZXJzLlxuLy9cbi8vIEEgc2VyaWVzJyBgdHlwZWAgaXMgdGhlIHR5cGUgaXRzIG1lYXN1cmUgYXNrcyB0byBiZSBkcmF3biBhcywgYW5kIGlzIGFic2VudFxuLy8gd2hlbiB0aGUgbWVhc3VyZSBsZWF2ZXMgaXQgdG8gdGhlIGNoYXJ0J3MgY2hhcnRUeXBlIChzZWUgc2VyaWVzVHlwZXMpLiBJdHNcbi8vIGBtZWFzdXJlYCBpcyB0aGUgb25lIGl0IHBsb3RzLCB3aG9zZSBudW1iZXIgZm9ybWF0IGl0cyB0b29sdGlwIHVzZXMgYW5kXG4vLyB3aG9zZSBkaXNwbGF5IGtleXMgKGNvbG9yLCBheGlzKSBpdCBmb2xsb3dzLCBhbmQgYG1lYXN1cmVJbmRleGAgdGhhdFxuLy8gbWVhc3VyZSdzIHBvc2l0aW9uOiB0aGUgZmlyc3QgbWVhc3VyZSwgMCwgZm9yIGV2ZXJ5IHNlcmllcyBvZiBhIHNwbGl0Qnkgb3Jcbi8vIGNvbG9yQnkgY2hhcnQuXG4vL1xuLy8gcmF3Q2F0ZWdvcmllcyBob2xkcyBlYWNoIGNhdGVnb3J5IGFzIGRhdGEucm93cyBob2xkIGl0LCBieSBwb3NpdGlvbiwgYW5kXG4vLyByYXdHcm91cHMgZWFjaCBzcGxpdCAob3IgY29sb3JCeSkgdmFsdWUgYnkgc2VyaWVzIHBvc2l0aW9uLCBlbXB0eSB3aGVuIHRoZVxuLy8gY2hhcnQgZG9lcyBub3Qgc3BsaXQ6IGEgY2xpY2sgbmFtZXMgdGhlIHJhdyB2YWx1ZXMsIG5ldmVyIHRoZSBkcmF3biB0ZXh0LlxuLy8gVGhlIFBvd2VyUG9pbnQgZXhwb3J0IHJlYWRzIG9ubHkgY2F0ZWdvcmllcyBhbmQgc2VyaWVzLlxuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRDaGFydFNlcmllcyB7XG4gIGNhdGVnb3JpZXM6IHN0cmluZ1tdO1xuICBzZXJpZXM6IEV4dHJhY3RlZENoYXJ0U2VyaWVzSXRlbVtdO1xuICByYXdDYXRlZ29yaWVzOiB1bmtub3duW107XG4gIHJhd0dyb3VwczogdW5rbm93bltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RlZENoYXJ0U2VyaWVzSXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXTtcbiAgdHlwZT86IEF4aXNDaGFydFR5cGU7XG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZTtcbiAgbWVhc3VyZUluZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q2hhcnRTZXJpZXMoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIGRhdGE6IENvbXBvbmVudERhdGEpOiBFeHRyYWN0ZWRDaGFydFNlcmllcyB7XG4gIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC5jb25maWcgYXMgQ2hhcnRDb25maWc7XG4gIGNvbnN0IHsgeENvbHVtbiwgZ3JvdXBDb2x1bW4gfSA9IGNoYXJ0Q29sdW1ucyhjb25maWcsIGRhdGEpO1xuICBjb25zdCBtZWFzdXJlcyA9IGNoYXJ0TWVhc3VyZXMoY29uZmlnLCBkYXRhKTtcblxuICBjb25zdCByYXdDYXRlZ29yaWVzID0gdW5pcXVlVmFsdWVzKGRhdGEucm93cywgeENvbHVtbik7XG4gIGNvbnN0IGNhdGVnb3JpZXMgPSByYXdDYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IFN0cmluZyhjYXRlZ29yeSA/PyAn4oCUJykpO1xuICBjb25zdCBzZXJpZXM6IEV4dHJhY3RlZENoYXJ0U2VyaWVzWydzZXJpZXMnXSA9IFtdO1xuICBjb25zdCByYXdHcm91cHMgPSBncm91cENvbHVtbiA/IHVuaXF1ZVZhbHVlcyhkYXRhLnJvd3MsIGdyb3VwQ29sdW1uKSA6IFtdO1xuXG4gIGlmIChncm91cENvbHVtbikge1xuICAgIC8vIE9uZSBzZXJpZXMgcGVyIGdyb3VwIHZhbHVlIChzcGxpdEJ5L2NvbG9yQnkpLCBwaXZvdGVkIG92ZXIgdGhlIGZpcnN0IG1lYXN1cmUuXG4gICAgY29uc3QgbWVhc3VyZSA9IG1lYXN1cmVzWzBdO1xuICAgIGZvciAoY29uc3QgZ3JvdXBWYWx1ZSBvZiByYXdHcm91cHMpIHtcbiAgICAgIHNlcmllcy5wdXNoKHtcbiAgICAgICAgbmFtZTogU3RyaW5nKGdyb3VwVmFsdWUgPz8gJ+KAlCcpLFxuICAgICAgICB2YWx1ZXM6IGNhdGVnb3J5VmFsdWVzKGRhdGEucm93cywgeENvbHVtbiwgcmF3Q2F0ZWdvcmllcywgbWVhc3VyZS5jb2x1bW4sIChyb3cpID0+IHJvd1tncm91cENvbHVtbl0gPT09IGdyb3VwVmFsdWUpLFxuICAgICAgICB0eXBlOiBtZWFzdXJlLnR5cGUsXG4gICAgICAgIG1lYXN1cmUsXG4gICAgICAgIG1lYXN1cmVJbmRleDogMCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IFttZWFzdXJlSW5kZXgsIG1lYXN1cmVdIG9mIG1lYXN1cmVzLmVudHJpZXMoKSkge1xuICAgICAgc2VyaWVzLnB1c2goe1xuICAgICAgICBuYW1lOiBjb21wYXJlZFNlcmllc05hbWUobWVhc3VyZSwgbWVhc3VyZXMsIGRhdGEpID8/IG1lYXN1cmUubGFiZWwgPz8gbWVhc3VyZS5jb2x1bW4sXG4gICAgICAgIHZhbHVlczogY2F0ZWdvcnlWYWx1ZXMoZGF0YS5yb3dzLCB4Q29sdW1uLCByYXdDYXRlZ29yaWVzLCBtZWFzdXJlLmNvbHVtbiksXG4gICAgICAgIHR5cGU6IG1lYXN1cmUudHlwZSxcbiAgICAgICAgbWVhc3VyZSxcbiAgICAgICAgbWVhc3VyZUluZGV4LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgY2F0ZWdvcmllcywgc2VyaWVzLCByYXdDYXRlZ29yaWVzLCByYXdHcm91cHMgfTtcbn1cblxuLy8gVGhlIGNvbHVtbiBhIGNoYXJ0J3MgY2F0ZWdvcmllcyBjb21lIGZyb20sIGFuZCB0aGUgb25lIHRoYXQgc3BsaXRzIGl0c1xuLy8gZmlyc3QgbWVhc3VyZSBpbnRvIGEgc2VyaWVzIHBlciB2YWx1ZSwgaWYgYW55LiBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyXG4vLyBjYXRlZ29yeSB0b28gKHNvIGVhY2ggYmFyIGNhcnJpZXMgaXRzIG93biBjb2xvciArIGxlZ2VuZCBlbnRyeSksIGJ1dCB0aGVcbi8vIGJhcnMgYXJlIG92ZXJsYXBwZWQgdG8gZnVsbCB3aWR0aCBpbiBidWlsZEF4aXNPcHRpb24gcmF0aGVyIHRoYW4gbGFpZFxuLy8gc2lkZS1ieS1zaWRlLiBzcGxpdEJ5IHdpbnMgaWYgYm90aCBhcmUgc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0Q29sdW1ucyhjb25maWc6IENoYXJ0Q29uZmlnLCBkYXRhOiBDb21wb25lbnREYXRhKTogeyB4Q29sdW1uOiBzdHJpbmc7IGdyb3VwQ29sdW1uOiBzdHJpbmcgfCB1bmRlZmluZWQgfSB7XG4gIHJldHVybiB7XG4gICAgeENvbHVtbjogY29uZmlnLnhBeGlzPy5jb2x1bW4gPz8gZGF0YS5jb2x1bW5zWzBdLFxuICAgIGdyb3VwQ29sdW1uOiBjb25maWcuc3BsaXRCeT8uY29sdW1uIHx8IGNvbG9yQnlDb2x1bW4oY29uZmlnKSxcbiAgfTtcbn1cblxuLy8gT25lIGNvbHVtbidzIHZhbHVlcyBieSBjYXRlZ29yeSwgZnJvbSB0aGUgcm93cyBgbWF0Y2hgIGtlZXBzIChhbGwgb2YgdGhlbVxuLy8gd2hlbiBpdCBpcyBsZWZ0IG91dCkuIEEgY2F0ZWdvcnkgd2l0aCBubyByb3cgaGFzIG5vIHZhbHVlLlxuZnVuY3Rpb24gY2F0ZWdvcnlWYWx1ZXMoXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gIHhDb2x1bW46IHN0cmluZyxcbiAgcmF3Q2F0ZWdvcmllczogdW5rbm93bltdLFxuICBjb2x1bW46IHN0cmluZyxcbiAgbWF0Y2g/OiAocm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gYm9vbGVhbixcbik6IChudW1iZXIgfCBudWxsKVtdIHtcbiAgY29uc3QgYnlDYXRlZ29yeSA9IG5ldyBNYXA8dW5rbm93biwgdW5rbm93bj4oKTtcbiAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgIGlmICghbWF0Y2ggfHwgbWF0Y2gocm93KSkge1xuICAgICAgYnlDYXRlZ29yeS5zZXQocm93W3hDb2x1bW5dLCByb3dbY29sdW1uXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJhd0NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gbnVtZXJpYyhieUNhdGVnb3J5LmdldChjYXRlZ29yeSkpKTtcbn1cblxuLy8gQSBjb21wYXJlZCBzZXJpZXMnIG5hbWUsIHdvcmRlZCBmcm9tIGl0cyBsYW5lJ3Mgb2Zmc2V0IHJhdGhlciB0aGFuIGZyb20gaXRzXG4vLyBvd24gbGFiZWwsIHNvIGEgY2hhcnQgdGhlIHZpZXdlciByZWdyb3VwZWQgc2F5cyB3aGF0IGl0IG5vdyBjb21wYXJlczpcbi8vICdSZXZlbnVlICh2cyBwcmV2aW91cyB3ZWVrKScsICdSZXZlbnVlIGNoYW5nZSAodnMgcHJldmlvdXMgd2VlayknLCAnUmV2ZW51ZVxuLy8gJSBjaGFuZ2UgKHZzIHByZXZpb3VzIHllYXIpJy4gVGhlIG1lYXN1cmUgaXMgbmFtZWQgYXMgaXRzIGN1cnJlbnQgdmFsdWUnc1xuLy8gc2VyaWVzIGlzLiBudWxsIGZvciBhbnkgb3RoZXIgc2VyaWVzLCB3aGljaCBrZWVwcyBpdHMgb3duIG5hbWUsIGFuZCBmb3Jcbi8vIGRhdGEgd2l0aG91dCB0aGUgY29tcGFyaXNvbiBrZXlzLlxuZnVuY3Rpb24gY29tcGFyZWRTZXJpZXNOYW1lKG1lYXN1cmU6IENoYXJ0TWVhc3VyZSwgbWVhc3VyZXM6IENoYXJ0TWVhc3VyZVtdLCBkYXRhOiBDb21wb25lbnREYXRhKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IG91dHB1dCA9IGRhdGEub3V0cHV0cz8uW21lYXN1cmUuY29sdW1uXTtcbiAgY29uc3Qgb2Zmc2V0ID0gb3V0cHV0Py5vZmZzZXQgPyBkYXRhLmNvbXBhcmlzb24/Lm9mZnNldHM/LltvdXRwdXQub2Zmc2V0IC0gMV0gOiB1bmRlZmluZWQ7XG5cbiAgaWYgKCFvdXRwdXQgfHwgIW9mZnNldCB8fCAhb3V0cHV0LnJvbGUgfHwgb3V0cHV0LnJvbGUgPT09ICdjdXJyZW50Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY3VycmVudCA9IGN1cnJlbnRPdXRwdXRBbGlhcyhkYXRhLm91dHB1dHMsIG1lYXN1cmUuY29sdW1uKTtcbiAgY29uc3QgbGFiZWwgPSBtZWFzdXJlcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5jb2x1bW4gPT09IGN1cnJlbnQpPy5sYWJlbCA/PyBjdXJyZW50O1xuXG4gIHJldHVybiBgJHtsYWJlbH0ke1JPTEVfTkFNRV9TVUZGSVhFU1tvdXRwdXQucm9sZV19ICgke2NvbXBhcmlzb25PZmZzZXRMYWJlbChvZmZzZXQpfSlgO1xufVxuXG4vLyBUaGUgY29sdW1uIGFuIG91dHB1dCdzIGN1cnJlbnQgdmFsdWUgaXMgaW46IGl0cyBsYW5lJ3MgY3VycmVudCBvdXRwdXQsIGVsc2Vcbi8vIGZvciBhIHJhbmsgb3IgYSBzaGFyZSB0aGUgdW5jb21wYXJlZCBvbmUgb2YgdGhlIHNhbWUgbWVhc3VyZSwgZWxzZSB0aGVcbi8vIG1lYXN1cmUncyBvd24gY29sdW1uIChhIHdpbmRvd2VkIHZhbHVlJ3Mgc291cmNlKS5cbmZ1bmN0aW9uIGN1cnJlbnRPdXRwdXRBbGlhcyhvdXRwdXRzOiBSZWNvcmQ8c3RyaW5nLCBPdXRwdXRNZXRhPiwgYWxpYXM6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbYWxpYXNdO1xuICBjb25zdCB1bmNvbXBhcmVkID0gb3V0cHV0LmtpbmQgPT09ICd2YWx1ZSdcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogT2JqZWN0LmtleXMob3V0cHV0cykuZmluZCgoa2V5KSA9PiBvdXRwdXRzW2tleV0ubWVhc3VyZSA9PT0gb3V0cHV0Lm1lYXN1cmVcbiAgICAgICYmIG91dHB1dHNba2V5XS5raW5kID09PSBvdXRwdXQua2luZFxuICAgICAgJiYgb3V0cHV0c1trZXldLnJvbGUgPT09IG51bGwpO1xuXG4gIHJldHVybiBsYW5lT3V0cHV0QWxpYXMob3V0cHV0cywgYWxpYXMsICdjdXJyZW50JykgPz8gdW5jb21wYXJlZCA/PyBvdXRwdXQubWVhc3VyZTtcbn1cblxuLy8gQSBzZXJpZXMnIG93biBjb2xvciBhcyBDU1MgaGV4OiBpdHMgbWVhc3VyZSdzIG5hbWVkIGNvbG9yLCBvciB1bmRlZmluZWQgd2hlblxuLy8gaXQgbmFtZXMgbm9uZSAob3IgYSBuYW1lIHRoZSBwYWxldHRlIGRvZXMgbm90IGtub3cpIGFuZCB0aGUgdGhlbWUgY29sb3JzIGl0XG4vLyBieSBpdHMgcG9zaXRpb24uXG5leHBvcnQgZnVuY3Rpb24gc2VyaWVzQ29sb3Ioc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBoZXggPSBuYW1lZENvbG9ySGV4KHNlcmllcyk7XG5cbiAgcmV0dXJuIGhleCA/IGAjJHtoZXh9YCA6IHVuZGVmaW5lZDtcbn1cblxuLy8gQSBzZXJpZXMnIGNvbG9yIGFzIHRoZSBiYXJlIGhleCBQb3dlclBvaW50IHRha2VzOiBpdHMgbWVhc3VyZSdzIG5hbWVkIGNvbG9yLFxuLy8gZWxzZSB0aGUgcGFsZXR0ZSBjb2xvciBvZiBpdHMgcG9zaXRpb24sIGFzIHRoZSBzY3JlZW4ncyB0aGVtZSBwaWNrcyBpdC5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpZXNIZXgoc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0sIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZWRDb2xvckhleChzZXJpZXMpID8/IFJFUE9SVF9DSEFSVF9DT0xPUlNbaW5kZXggJSBSRVBPUlRfQ0hBUlRfQ09MT1JTLmxlbmd0aF07XG59XG5cbmZ1bmN0aW9uIG5hbWVkQ29sb3JIZXgoc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gbWVhc3VyZUNvbG9ySGV4KHNlcmllcy5tZWFzdXJlKTtcbn1cblxuLy8gQSBtZWFzdXJlJ3MgbmFtZWQgY29sb3IgYXMgYmFyZSBoZXgsIG9yIHVuZGVmaW5lZCB3aGVuIGl0IG5hbWVzIG5vbmUgb3IgYVxuLy8gbmFtZSB0aGUgcGFsZXR0ZSBkb2VzIG5vdCBrbm93LiBUaGUgbmFtZSBpcyByZWFkIHRocm91Z2ggdGhlIGVudW0sIHNvIGFcbi8vIHN0b3JlZCBuYW1lIHN1Y2ggYXMgJ19fcHJvdG9fXycgbmV2ZXIgcmVhY2hlcyB0aGUgbG9va3VwIG9iamVjdC5cbmZ1bmN0aW9uIG1lYXN1cmVDb2xvckhleChtZWFzdXJlOiBDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb2xvciA9IE9iamVjdC52YWx1ZXMoUmVwb3J0Q2hhcnRDb2xvcikuZmluZCgobmFtZSkgPT4gbmFtZSA9PT0gbWVhc3VyZT8uY29sb3IpO1xuXG4gIHJldHVybiBjb2xvciA/IFJFUE9SVF9DSEFSVF9DT0xPUl9CWV9OQU1FW2NvbG9yXSA6IHVuZGVmaW5lZDtcbn1cblxuLy8gQSBtZWFzdXJlJ3MgbGluZSBzdHlsZSB3aGVuIGl0IG5hbWVzIG9uZSBFQ2hhcnRzIGtub3dzLCBlbHNlIHVuZGVmaW5lZCBhbmRcbi8vIHRoZSBsaW5lIGlzIHNvbGlkLlxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVMaW5lU3R5bGUobWVhc3VyZTogQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkKTogUmVwb3J0Q2hhcnRMaW5lU3R5bGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhSZXBvcnRDaGFydExpbmVTdHlsZSkuZmluZCgoc3R5bGUpID0+IHN0eWxlID09PSBtZWFzdXJlPy5saW5lKTtcbn1cblxuLy8gQSBtZWFzdXJlJ3Mgc3RhdGlzdGljIGxpbmUgd2hlbiBpdCBuYW1lcyBvbmUgdGhlIHZpZXdlciBrbm93cywgZWxzZVxuLy8gdW5kZWZpbmVkIGFuZCBpdCBkcmF3cyBub25lLlxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVNYXJrU3RhdChtZWFzdXJlOiBDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQpOiBSZXBvcnRDaGFydE1hcmtTdGF0IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoUmVwb3J0Q2hhcnRNYXJrU3RhdCkuZmluZCgoc3RhdCkgPT4gc3RhdCA9PT0gbWVhc3VyZT8ubWFya0xpbmUpO1xufVxuXG4vLyBBIHNlcmllcycgc3RhdGlzdGljIG92ZXIgaXRzIHBvaW50cyB0aGF0IGhhdmUgYSB2YWx1ZTogdGhlaXIgbWVhbiwgdGhlaXJcbi8vIG1lZGlhbiAodGhlIG1lYW4gb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIHdoZW4gdGhlIGNvdW50IGlzIGV2ZW4pLCB0aGVcbi8vIGxvd2VzdCBvciB0aGUgaGlnaGVzdC4gbnVsbCB3aGVuIG5vIHBvaW50IGhhcyBhIHZhbHVlLiBTaGFyZWQgd2l0aCB0aGVcbi8vIFBvd2VyUG9pbnQgZXhwb3J0IHNvIGJvdGggbWVkaWEgZHJhdyB0aGUgbGluZSBhdCB0aGUgc2FtZSBoZWlnaHQuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWVzU3RhdCh2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLCBzdGF0OiBSZXBvcnRDaGFydE1hcmtTdGF0KTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IHByZXNlbnQgPSB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIG51bWJlciA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpO1xuXG4gIGlmICghcHJlc2VudC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoc3RhdCkge1xuICAgIGNhc2UgUmVwb3J0Q2hhcnRNYXJrU3RhdC5BdmVyYWdlOlxuICAgICAgcmV0dXJuIHByZXNlbnQucmVkdWNlKChzdW0sIHZhbHVlKSA9PiBzdW0gKyB2YWx1ZSwgMCkgLyBwcmVzZW50Lmxlbmd0aDtcbiAgICBjYXNlIFJlcG9ydENoYXJ0TWFya1N0YXQuTWVkaWFuOiB7XG4gICAgICBjb25zdCBzb3J0ZWQgPSBbLi4ucHJlc2VudF0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgY29uc3QgbWlkZGxlID0gTWF0aC5mbG9vcihzb3J0ZWQubGVuZ3RoIC8gMik7XG5cbiAgICAgIHJldHVybiBzb3J0ZWQubGVuZ3RoICUgMiA/IHNvcnRlZFttaWRkbGVdIDogKHNvcnRlZFttaWRkbGUgLSAxXSArIHNvcnRlZFttaWRkbGVdKSAvIDI7XG4gICAgfVxuICAgIGNhc2UgUmVwb3J0Q2hhcnRNYXJrU3RhdC5NaW46XG4gICAgICByZXR1cm4gTWF0aC5taW4oLi4ucHJlc2VudCk7XG4gICAgY2FzZSBSZXBvcnRDaGFydE1hcmtTdGF0Lk1heDpcbiAgICAgIHJldHVybiBNYXRoLm1heCguLi5wcmVzZW50KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy8gV2hldGhlciBhIGNoYXJ0IGRyYXdzIHN0YXRpc3RpYyBsaW5lcy4gQSBob3Jpem9udGFsIGNoYXJ0J3MgdmFsdWVzIHJ1blxuLy8gYWxvbmcgeCwgYW5kIFBvd2VyUG9pbnQgY2Fubm90IGRyYXcgYSBsaW5lIGJlc2lkZSBob3Jpem9udGFsIGJhcnMsIHNvXG4vLyBuZWl0aGVyIG1lZGl1bSBkcmF3cyBvbmUgdGhlcmUuXG5leHBvcnQgZnVuY3Rpb24gZHJhd3NTdGF0TGluZXMoY29uZmlnOiBDaGFydENvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gY29uZmlnLm9yaWVudGF0aW9uICE9PSAnaG9yaXpvbnRhbCc7XG59XG5cbi8vIEEgY29sb3JCeSBjaGFydCdzIG9uZSB2YWx1ZSBwZXIgY2F0ZWdvcnk6IHNlcmllcyBpIGhvbGRzIGNhdGVnb3J5IGkncyBiYXIuXG4vLyBQb3dlclBvaW50IGRyYXdzIHRoZXNlIGFzIGl0cyBvbmUgc2VyaWVzLCBhbmQgYSBzdGF0aXN0aWMgbGluZSBpcyB0YWtlblxuLy8gb3ZlciB0aGVtLlxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQnlWYWx1ZXMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyk6IChudW1iZXIgfCBudWxsKVtdIHtcbiAgcmV0dXJuIGV4dHJhY3RlZC5jYXRlZ29yaWVzLm1hcCgoXywgaW5kZXgpID0+IGV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdPy52YWx1ZXNbaW5kZXhdID8/IG51bGwpO1xufVxuXG4vLyBUaGUgcmVmZXJlbmNlcyBhIGNoYXJ0IGRyYXdzLiBBIHZlcnRpY2FsIGF4aXMgY2hhcnQgYW5kIGEgd2F0ZXJmYWxsIGRyYXdcbi8vIHRoZW07IGEgcGllIGhhcyBubyB2YWx1ZSBheGlzLCBhbmQgYSBob3Jpem9udGFsIGNoYXJ0IGlzIGxlZnQgd2l0aG91dCB0aGVtXG4vLyBhcyBQb3dlclBvaW50IGNhbm5vdCBkcmF3IGEgbGluZSBiZXNpZGUgaG9yaXpvbnRhbCBiYXJzLiBBbiBlbnRyeSB3aXRob3V0IGFcbi8vIGZpbml0ZSB2YWx1ZSBpcyBza2lwcGVkLCBhbmQgb25lIHdob3NlIGB0b2AgaXMgbWlzc2luZyBvciBlcXVhbCB0byBpdHMgdmFsdWVcbi8vIGlzIGEgbGluZS4gc2Vjb25kYXJ5IHJlYWNoZXMgdGhlIHNlY29uZCB2YWx1ZSBheGlzIG9ubHkgb24gYSBjaGFydCB0aGF0IGhhc1xuLy8gb25lICh0d29BeGVzKS4gU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnQgZXhwb3J0LlxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0UmVmZXJlbmNlcyhjb25maWc6IENoYXJ0Q29uZmlnLCB0d29BeGVzOiBib29sZWFuKTogRHJhd25SZWZlcmVuY2VbXSB7XG4gIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG4gIGNvbnN0IHJlZmVyZW5jZXM6IChDaGFydFJlZmVyZW5jZSB8IG51bGwgfCB1bmRlZmluZWQpW10gPSBBcnJheS5pc0FycmF5KGNvbmZpZy5yZWZlcmVuY2VzKSA/IGNvbmZpZy5yZWZlcmVuY2VzIDogW107XG5cbiAgaWYgKGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZXMuZmxhdE1hcCgocmVmZXJlbmNlKTogRHJhd25SZWZlcmVuY2VbXSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBheGlzTnVtYmVyKHJlZmVyZW5jZT8udmFsdWUpO1xuXG4gICAgaWYgKCFyZWZlcmVuY2UgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHRvID0gYXhpc051bWJlcihyZWZlcmVuY2UudG8pO1xuICAgIGNvbnN0IGxhYmVsID0gdHlwZW9mIHJlZmVyZW5jZS5sYWJlbCA9PT0gJ3N0cmluZycgPyByZWZlcmVuY2UubGFiZWwgOiAnJztcbiAgICBjb25zdCBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4ID0gdHdvQXhlcyAmJiByZWZlcmVuY2Uuc2Vjb25kYXJ5ID09PSB0cnVlID8gMSA6IDA7XG5cbiAgICByZXR1cm4gW3RvICE9PSB1bmRlZmluZWQgJiYgdG8gIT09IHZhbHVlXG4gICAgICA/IHsgbGFiZWwsIGxvdzogTWF0aC5taW4odmFsdWUsIHRvKSwgaGlnaDogTWF0aC5tYXgodmFsdWUsIHRvKSwgYmFuZDogdHJ1ZSwgYXhpc0luZGV4IH1cbiAgICAgIDogeyBsYWJlbCwgbG93OiB2YWx1ZSwgaGlnaDogdmFsdWUsIGJhbmQ6IGZhbHNlLCBheGlzSW5kZXggfV07XG4gIH0pO1xufVxuXG4vLyBFYWNoIHNlcmllcyBhcyBpdHMgc2hhcmUgb2YgaXRzIGNhdGVnb3J5J3MgdG90YWw6IHBlciBjYXRlZ29yeSwgdGhlXG4vLyBkZW5vbWluYXRvciBpcyB0aGUgc3VtIG9mIGV2ZXJ5IHNlcmllcycgYWJzb2x1dGUgdmFsdWUgdGhlcmUsIHNvIHRoZVxuLy8gbWFnbml0dWRlcyBvZiBhIGNhdGVnb3J5J3Mgc2hhcmVzIGFkZCB1cCB0byAxLiBBIG1peGVkLXNpZ24gY2F0ZWdvcnknc1xuLy8gbmVnYXRpdmUgdmFsdWVzIHRha2UgbmVnYXRpdmUgc2hhcmVzLCBkcmF3biBiZWxvdyB6ZXJvLiBBIG1pc3NpbmcgdmFsdWVcbi8vIHN0YXlzIG1pc3NpbmcsIGFuZCBhIGNhdGVnb3J5IHdob3NlIHRvdGFsIGlzIHplcm8gaGFzIG5vIHNoYXJlcy4gU2hhcmVkIGJ5XG4vLyB0aGUgc2NyZWVuLCB0aGUgUERGIGFuZCBQb3dlclBvaW50LCBzbyBhIDEwMCUgc3RhY2sgcmVhZHMgdGhlIHNhbWUgaW4gZWFjaC5cbmV4cG9ydCBmdW5jdGlvbiBwZXJjZW50U2hhcmVzKHZhbHVlczogKG51bWJlciB8IG51bGwpW11bXSk6IChudW1iZXIgfCBudWxsKVtdW10ge1xuICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCAuLi52YWx1ZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy5sZW5ndGgpKTtcbiAgY29uc3QgdG90YWxzID0gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaW5kZXgpID0+IHZhbHVlc1xuICAgIC5yZWR1Y2UoKHN1bSwgc2VyaWVzKSA9PiBzdW0gKyBNYXRoLmFicyhzZXJpZXNbaW5kZXhdID8/IDApLCAwKSk7XG5cbiAgcmV0dXJuIHZhbHVlcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiAoXG4gICAgdmFsdWUgPT09IG51bGwgfHwgIXRvdGFsc1tpbmRleF0gPyBudWxsIDogdmFsdWUgLyB0b3RhbHNbaW5kZXhdXG4gICkpKTtcbn1cblxuLy8gVGhlIHNoYXJlcyBhIDEwMCUgc3RhY2tlZCBjaGFydCBkcmF3cyBpbiBwbGFjZSBvZiBpdHMgdmFsdWVzLCBvciBudWxsIHdoZW5cbi8vIHRoZSBjaGFydCBpcyBub3Qgb25lLiBUaGUgcHJpbWFyeSBheGlzJ3MgYmFyIGFuZCBhcmVhIHNlcmllcyB0YWtlIHRoZW0sXG4vLyBlYWNoIHR5cGUncyBzZXJpZXMgc2hhcmluZyBhbW9uZyB0aGVtc2VsdmVzLCBhcyBlYWNoIHR5cGUgc3RhY2tzIGFwYXJ0LlxuLy8gTGluZXMgYW5kIHNlY29uZGFyeS1heGlzIHNlcmllcyBrZWVwIHRoZWlyIHZhbHVlcy4gQSBwaWUsIGEgd2F0ZXJmYWxsIGFuZCBhXG4vLyBjb2xvckJ5IGNoYXJ0IChvbmUgc2VyaWVzIHBlciBjYXRlZ29yeSwgZWFjaCBvZiB3aGljaCB3b3VsZCBiZSAxMDAlKSBhcmVcbi8vIG5ldmVyIDEwMCUgc3RhY2tlZCwgbm9yIGlzIGEgY2hhcnQgd2l0aCBubyBiYXIgb3IgYXJlYSBvbiBpdHMgcHJpbWFyeSBheGlzLlxuZXhwb3J0IGZ1bmN0aW9uIHBlcmNlbnRTdGFja2VkU2hhcmVzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIGNvbmZpZzogQ2hhcnRDb25maWcpOiBQZXJjZW50U2hhcmVzIHwgbnVsbCB7XG4gIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG5cbiAgaWYgKGNvbmZpZy5wZXJjZW50U3RhY2tlZCAhPT0gdHJ1ZVxuICAgIHx8IGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnIHx8IGNoYXJ0VHlwZSA9PT0gJ3dhdGVyZmFsbCdcbiAgICB8fCBpc0NvbG9yQnkoY29uZmlnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgdHlwZXMgPSBzZXJpZXNUeXBlcyhleHRyYWN0ZWQsIGNoYXJ0VHlwZSk7XG4gIGNvbnN0IGF4aXNJbmRleGVzID0gc2VyaWVzQXhpc0luZGV4ZXMoZXh0cmFjdGVkLCBjb25maWcpO1xuICBjb25zdCBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgPSBuZXcgTWFwKCk7XG5cbiAgZm9yIChjb25zdCB0eXBlIG9mIFsnYmFyJywgJ2FyZWEnXSBhcyBjb25zdCkge1xuICAgIGNvbnN0IGluZGV4ZXMgPSB0eXBlc1xuICAgICAgLm1hcCgoc2VyaWVzVHlwZSwgaW5kZXgpID0+IChzZXJpZXNUeXBlID09PSB0eXBlICYmIGF4aXNJbmRleGVzW2luZGV4XSA9PT0gMCA/IGluZGV4IDogLTEpKVxuICAgICAgLmZpbHRlcigoaW5kZXgpID0+IGluZGV4ID49IDApO1xuICAgIGNvbnN0IHR5cGVTaGFyZXMgPSBwZXJjZW50U2hhcmVzKGluZGV4ZXMubWFwKChpbmRleCkgPT4gZXh0cmFjdGVkLnNlcmllc1tpbmRleF0udmFsdWVzKSk7XG4gICAgaW5kZXhlcy5mb3JFYWNoKChzZXJpZXNJbmRleCwgcG9zaXRpb24pID0+IHNoYXJlcy5zZXQoc2VyaWVzSW5kZXgsIHR5cGVTaGFyZXNbcG9zaXRpb25dKSk7XG4gIH1cblxuICByZXR1cm4gc2hhcmVzLnNpemUgPyBzaGFyZXMgOiBudWxsO1xufVxuXG4vLyBXaGVyZSBhIDEwMCUgc3RhY2tlZCBjaGFydCdzIHZhbHVlIGF4aXMgc3RhcnRzOiBhdCAtMTAwJSB3aGVuIGFueSBzaGFyZSBpc1xuLy8gbmVnYXRpdmUsIGVsc2UgYXQgemVyby5cbmV4cG9ydCBmdW5jdGlvbiBwZXJjZW50QXhpc01pbihzaGFyZXM6IFBlcmNlbnRTaGFyZXMpOiBudW1iZXIge1xuICByZXR1cm4gWy4uLnNoYXJlcy52YWx1ZXMoKV0uc29tZSgoc2VyaWVzKSA9PiBzZXJpZXMuc29tZSgoc2hhcmUpID0+IChzaGFyZSA/PyAwKSA8IDApKSA/IC0xIDogMDtcbn1cblxuLy8gVGhlIG1lYXN1cmVzIGEgY2hhcnQgcGxvdHM6IGl0cyBjb25maWd1cmVkIG9uZXMsIGVsc2UgdGhlIHF1ZXJ5J3MgbGFzdFxuLy8gY29sdW1uLCB1bmZvcm1hdHRlZC5cbmZ1bmN0aW9uIGNoYXJ0TWVhc3VyZXMoY29uZmlnOiBDaGFydENvbmZpZywgZGF0YTogQ29tcG9uZW50RGF0YSk6IENoYXJ0TWVhc3VyZVtdIHtcbiAgcmV0dXJuIGNvbmZpZy5tZWFzdXJlcz8ubGVuZ3RoXG4gICAgPyBjb25maWcubWVhc3VyZXNcbiAgICA6IFt7IGNvbHVtbjogZGF0YS5jb2x1bW5zW2RhdGEuY29sdW1ucy5sZW5ndGggLSAxXSB9XTtcbn1cblxuLy8gVGhlIHR5cGUgZWFjaCBleHRyYWN0ZWQgc2VyaWVzIGlzIGRyYXduIGFzOiBpdHMgbWVhc3VyZSdzIG93biB0eXBlIHdoZW4gaXRcbi8vIG5hbWVzIG9uZSwgdGhlIGNoYXJ0J3MgY2hhcnRUeXBlIG90aGVyd2lzZS4gTW9yZSB0aGFuIG9uZSBkaXN0aW5jdCB0eXBlIGlzIGFcbi8vIGNvbWJvIGNoYXJ0LiBTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludCBleHBvcnQgc28gYm90aCBtZWRpYSBkcmF3IGVhY2ggc2VyaWVzXG4vLyB0aGUgc2FtZSB3YXkuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWVzVHlwZXMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcywgY2hhcnRUeXBlOiBBeGlzQ2hhcnRUeXBlKTogQXhpc0NoYXJ0VHlwZVtdIHtcbiAgcmV0dXJuIGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy50eXBlID8/IGNoYXJ0VHlwZSk7XG59XG5cbi8vIFRoZSB2YWx1ZSBheGlzIGVhY2ggZXh0cmFjdGVkIHNlcmllcyBpcyBwbG90dGVkIGFnYWluc3Q6IDEgd2hlbiBpdHMgbWVhc3VyZVxuLy8gaXMgc2Vjb25kYXJ5LCAwIG90aGVyd2lzZS4gQSBzZWNvbmQgYXhpcyBpcyBkcmF3biBvbmx5IG9uIGEgdmVydGljYWwgY2hhcnRcbi8vIHRoYXQga2VlcHMgYXQgbGVhc3Qgb25lIHNlcmllcyBvbiB0aGUgcHJpbWFyeSBheGlzLCBzbyBhIGNvbWJpbmF0aW9uIHRoZVxuLy8gc2VydmVyIHJlZnVzZXMgKGEgaG9yaXpvbnRhbCBjaGFydCwgZXZlcnkgbWVhc3VyZSBzZWNvbmRhcnksIHRoZSBvbmUgbWVhc3VyZVxuLy8gb2YgYSBzcGxpdEJ5IG9yIGNvbG9yQnkgY2hhcnQpIHBsb3RzIGV2ZXJ5dGhpbmcgb24gdGhlIHByaW1hcnkgYXhpcy4gU2hhcmVkXG4vLyB3aXRoIHRoZSBQb3dlclBvaW50IGV4cG9ydCBzbyBib3RoIG1lZGlhIHB1dCBlYWNoIHNlcmllcyBvbiB0aGUgc2FtZSBheGlzLlxuZXhwb3J0IGZ1bmN0aW9uIHNlcmllc0F4aXNJbmRleGVzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIGNvbmZpZzogQ2hhcnRDb25maWcpOiBWYWx1ZUF4aXNJbmRleFtdIHtcbiAgY29uc3Qgc2Vjb25kYXJ5ID0gZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gISFzZXJpZXMubWVhc3VyZS5zZWNvbmRhcnkpO1xuICBjb25zdCB0d29BeGVzID0gY29uZmlnLm9yaWVudGF0aW9uICE9PSAnaG9yaXpvbnRhbCcgJiYgc2Vjb25kYXJ5LmluY2x1ZGVzKHRydWUpICYmIHNlY29uZGFyeS5pbmNsdWRlcyhmYWxzZSk7XG5cbiAgcmV0dXJuIHNlY29uZGFyeS5tYXAoKGlzU2Vjb25kYXJ5KSA9PiAodHdvQXhlcyAmJiBpc1NlY29uZGFyeSA/IDEgOiAwKSk7XG59XG5cbi8vIE9uZSBiYXIgb2YgYSB3YXRlcmZhbGwuIGBzdGFydGAgaXMgdGhlIHJ1bm5pbmcgdG90YWwgYmVmb3JlIGl0LCB3aGVyZSB0aGUgYmFyXG4vLyBzdGFydHMsIGFuZCBgY2hhbmdlYCBpdHMgc2lnbmVkIGhlaWdodCwgc28gaXQgZW5kcyBhdCBzdGFydCArIGNoYW5nZS4gVGhlXG4vLyBjbG9zaW5nIHRvdGFsIHN0YXJ0cyBhdCB6ZXJvIGFuZCBpdHMgY2hhbmdlIGlzIHRoZSB3aG9sZSBydW5uaW5nIHRvdGFsLlxuZXhwb3J0IGludGVyZmFjZSBXYXRlcmZhbGxTdGVwIHtcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgc3RhcnQ6IG51bWJlcjtcbiAgY2hhbmdlOiBudW1iZXIgfCBudWxsO1xuICBraW5kOiBXYXRlcmZhbGxTdGVwS2luZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRXYXRlcmZhbGwge1xuICBuYW1lOiBzdHJpbmc7XG4gIHN0ZXBzOiBXYXRlcmZhbGxTdGVwW107XG59XG5cbmV4cG9ydCBjb25zdCBXQVRFUkZBTExfVE9UQUxfTEFCRUwgPSAnVG90YWwnO1xuXG4vLyBBIHdhdGVyZmFsbCdzIGJhcnMgZnJvbSBpdHMgb25lIG1lYXN1cmU6IGVhY2ggY2F0ZWdvcnkncyB2YWx1ZSBpcyBob3cgZmFyIHRoZVxuLy8gcnVubmluZyB0b3RhbCBtb3ZlcyB0aGVyZSwgYW5kIGEgbGFzdCBUb3RhbCBiYXIgc2hvd3Mgd2hlcmUgaXQgZW5kZWQuIEFcbi8vIGNhdGVnb3J5IHdpdGggbm8gdmFsdWUgbW92ZXMgbm90aGluZyBhbmQgZHJhd3Mgbm8gYmFyLiBTaGFyZWQgd2l0aCB0aGVcbi8vIFBvd2VyUG9pbnQgZXhwb3J0IHNvIGJvdGggbWVkaWEgZHJhdyB0aGUgc2FtZSBzdGVwcy5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0V2F0ZXJmYWxsKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBkYXRhOiBDb21wb25lbnREYXRhKTogRXh0cmFjdGVkV2F0ZXJmYWxsIHtcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IHZhbHVlcyA9IGV4dHJhY3RlZC5zZXJpZXNbMF0/LnZhbHVlcyA/PyBbXTtcbiAgY29uc3Qgc3RlcHM6IFdhdGVyZmFsbFN0ZXBbXSA9IFtdO1xuICBsZXQgdG90YWwgPSAwO1xuXG4gIGV4dHJhY3RlZC5jYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGNoYW5nZSA9IHZhbHVlc1tpbmRleF0gPz8gbnVsbDtcbiAgICBzdGVwcy5wdXNoKHsgY2F0ZWdvcnksIHN0YXJ0OiB0b3RhbCwgY2hhbmdlLCBraW5kOiAoY2hhbmdlID8/IDApIDwgMCA/ICdmYWxsJyA6ICdyaXNlJyB9KTtcbiAgICB0b3RhbCArPSBjaGFuZ2UgPz8gMDtcbiAgfSk7XG5cbiAgc3RlcHMucHVzaCh7IGNhdGVnb3J5OiBXQVRFUkZBTExfVE9UQUxfTEFCRUwsIHN0YXJ0OiAwLCBjaGFuZ2U6IHRvdGFsLCBraW5kOiAndG90YWwnIH0pO1xuXG4gIHJldHVybiB7IG5hbWU6IGV4dHJhY3RlZC5zZXJpZXNbMF0/Lm5hbWUgPz8gJycsIHN0ZXBzIH07XG59XG5cbi8vIFRoZSBvbmUgcHVyZSBtYXBwaW5nIGZyb20gb3VyIHN0YW5kYXJkIGNhbWVsQ2FzZSBjaGFydCBjb25maWcgKyB0aGUgZGF0YVxuLy8gZW5kcG9pbnQncyByb3dzIHRvIGFuIEVDaGFydHMgb3B0aW9uLiBFdmVyeXRoaW5nIHZpc3VhbCB0aGF0IGlzbid0IGluIHRoZVxuLy8gcmVnaXN0ZXJlZCAncmVwb3J0JyB0aGVtZSBpcyBkZWNpZGVkIGhlcmUsIHNvIHJlcG9ydCBzdGFuZGFyZHMgaGF2ZSBleGFjdGx5XG4vLyB0d28gaG9tZXMuXG4vL1xuLy8gRXZlcnkgbnVtYmVyIGFuZCBwZXJpb2QgdGhlIGNoYXJ0IHdyaXRlcyAodmFsdWUtYXhpcyB0aWNrcywgdG9vbHRpcCB2YWx1ZXMsXG4vLyBwZXJpb2QgbGFiZWxzKSBpcyBpbiB0aGUgY29udGV4dCdzIGxvY2FsZSwgbmV2ZXIgdGhlIGJyb3dzZXIncy4gQSBtZWFzdXJlXG4vLyB3aXRoIG51bWJlci1mb3JtYXQga2V5cyBmb3JtYXRzIGl0cyB0b29sdGlwcywgYW5kIHRoZSB2YWx1ZSBheGlzIHdoZW4gZXZlcnlcbi8vIG1lYXN1cmUgb24gaXQgYWdyZWVzIChheGlzTnVtYmVyRm9ybWF0KTsgd2l0aG91dCB0aGVtIHRoZSBheGlzIGFuZCB0b29sdGlwc1xuLy8ga2VlcCB0aGUgcGxhaW4gbG9jYWxlLWdyb3VwZWQgbnVtYmVyLlxuLy9cbi8vIGxlZ2VuZFNlbGVjdGVkIGlzIHRoZSB2aWV3ZXIncyBsZWdlbmQ6IHdoaWNoIGVudHJpZXMgYXJlIG9uLCBieSBzZXJpZXNcbi8vIG5hbWUgKGxlZ2VuZFdpdGhTZWxlY3RlZCkuIFdpdGhvdXQgaXQgdGhlIG9wdGlvbiBpcyBhcyBpdCBhbHdheXMgd2FzLlxuLy9cbi8vIGFjdGlvbnMgYXJlIHdoYXQgYSBjbGljayBvbiB0aGUgY2hhcnQncyBtYXJrcyBkb2VzIChCMTAuMiksIGZvciB0aGVcbi8vIHNjcmVlbiBvbmx5OiB0aGUgc2VyaWVzIGEgY2xpY2sgYWN0cyBvbiBzaG93IGEgaGFuZCBhbmQgYW5zd2VyIGEgY2xpY2sgb25cbi8vIHRoZSBsaW5lIGl0c2VsZiwgYW5kIHRoZSB0b29sdGlwIGVuZHMgd2l0aCBhIG11dGVkIGxpbmUgbmFtaW5nIHRoZSBhY3Rpb25zXG4vLyAod2l0aENsaWNrQWN0aW9ucykuIFdpdGhvdXQgYWN0aW9ucyB0aGUgcG9pbnRlciBzdGF5cyBhbiBhcnJvdy4gQW4gZXhwb3J0XG4vLyBwYXNzZXMgbm9uZS5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENoYXJ0T3B0aW9uKFxuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgbGVnZW5kU2VsZWN0ZWQ6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PiA9IHt9LFxuICBhY3Rpb25zOiByZWFkb25seSBSZXBvcnRNYXJrQWN0aW9uW10gPSBbXSxcbik6IEVDaGFydHNPcHRpb24ge1xuICByZXR1cm4gd2l0aENsaWNrQWN0aW9ucyhsZWdlbmRXaXRoU2VsZWN0ZWQoY2hhcnRPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjb250ZXh0KSwgbGVnZW5kU2VsZWN0ZWQpLCBhY3Rpb25zKTtcbn1cblxuLy8gVGhlIHRvb2x0aXAncyBsYXN0IGxpbmUgb24gYSBjaGFydCB3aG9zZSBtYXJrcyBhY3Qgb24gYSBjbGljazogdGhlIG9uZVxuLy8gYWN0aW9uICgnQ2xpY2sgdG8gZHJpbGwgZG93bicsICdDbGljayB0byBmaWx0ZXIgb3RoZXIgdGlsZXMnLCAnQ2xpY2sgdG9cbi8vIHNob3cgcm93cycpLCBvciB0aGUgc2hvcnQgbmFtZXMgb2Ygc2V2ZXJhbCAoJ0NsaWNrIHRvIGRyaWxsIGRvd24gb3Jcbi8vIGZpbHRlcicsICdDbGljayB0byBkcmlsbCBkb3duLCBmaWx0ZXIgb3Igc2hvdyByb3dzJykuIG51bGwgd2l0aG91dCBvbmUuXG5leHBvcnQgZnVuY3Rpb24gbWFya0FjdGlvbkhpbnQoYWN0aW9uczogcmVhZG9ubHkgUmVwb3J0TWFya0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IG9mZmVyZWQgPSBNQVJLX0FDVElPTl9PUkRFUi5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9ucy5pbmNsdWRlcyhhY3Rpb24pKTtcblxuICBpZiAob2ZmZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYENsaWNrIHRvICR7TUFSS19BQ1RJT05fSElOVFNbb2ZmZXJlZFswXV19YDtcbiAgfVxuXG4gIGNvbnN0IG5hbWVzID0gb2ZmZXJlZC5tYXAoKGFjdGlvbikgPT4gTUFSS19BQ1RJT05fU0hPUlRfSElOVFNbYWN0aW9uXSk7XG5cbiAgcmV0dXJuIG5hbWVzLmxlbmd0aFxuICAgID8gYENsaWNrIHRvICR7bmFtZXMuc2xpY2UoMCwgLTEpLmpvaW4oJywgJyl9IG9yICR7bmFtZXNbbmFtZXMubGVuZ3RoIC0gMV19YFxuICAgIDogbnVsbDtcbn1cblxuLy8gVGVsbHMgdGhlIHZpZXdlciB3aGF0IGEgY2xpY2sgb24gdGhlIGNoYXJ0IGRvZXMuIFdpdGggYWN0aW9ucywgZXZlcnlcbi8vIHNlcmllcyBhIGNsaWNrIHJlYWNoZXMgKGFsbCBidXQgdGhlIHNpbGVudCByZWZlcmVuY2UgY2FycmllcnMgYW5kIGFcbi8vIHdhdGVyZmFsbCdzIGJhc2UpIHNob3dzIGEgaGFuZCwgYSBsaW5lIG9yIGFyZWEgc2VyaWVzIGFuc3dlcnMgYSBjbGljayBvblxuLy8gaXRzIGxpbmUgdG9vICh0cmlnZ2VyTGluZUV2ZW50KSwgbm90IG9ubHkgb24gaXRzIHBvaW50cywgYW5kIHRoZSB0b29sdGlwXG4vLyBnYWlucyB0aGUgaGludCBhcyBpdHMgbGFzdCBsaW5lLCBtdXRlZC4gV2l0aG91dCBhY3Rpb25zIHRob3NlIHNlcmllcyBrZWVwXG4vLyB0aGUgYXJyb3cgYW5kIHRoZSB0b29sdGlwIGlzIHVuY2hhbmdlZC5cbmZ1bmN0aW9uIHdpdGhDbGlja0FjdGlvbnMob3B0aW9uOiBFQ2hhcnRzT3B0aW9uLCBhY3Rpb25zOiByZWFkb25seSBSZXBvcnRNYXJrQWN0aW9uW10pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgaGludCA9IG1hcmtBY3Rpb25IaW50KGFjdGlvbnMpO1xuICBjb25zdCBzZXJpZXMgPSAoKG9wdGlvbi5zZXJpZXMgPz8gW10pIGFzIFNlcmllc09wdGlvbltdKS5tYXAoKGl0ZW0pID0+IHtcbiAgICBpZiAoKGl0ZW0gYXMgeyBzaWxlbnQ/OiBib29sZWFuIH0pLnNpbGVudCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBjdXJzb3I6IGhpbnQgPyAncG9pbnRlcicgOiAnZGVmYXVsdCcsXG4gICAgICAuLi4oaGludCAmJiBpdGVtLnR5cGUgPT09ICdsaW5lJyA/IHsgdHJpZ2dlckxpbmVFdmVudDogdHJ1ZSB9IDoge30pLFxuICAgIH0gYXMgU2VyaWVzT3B0aW9uO1xuICB9KTtcblxuICByZXR1cm4gaGludFxuICAgID8geyAuLi5vcHRpb24sIHNlcmllcywgdG9vbHRpcDogaGludGVkVG9vbHRpcChvcHRpb24udG9vbHRpcCBhcyBUb29sdGlwQ29tcG9uZW50T3B0aW9uIHwgdW5kZWZpbmVkLCBzZXJpZXMsIGhpbnQpIH1cbiAgICA6IHsgLi4ub3B0aW9uLCBzZXJpZXMgfTtcbn1cblxuLy8gVGhlIGNoYXJ0J3MgdG9vbHRpcCB3aXRoIHRoZSBoaW50IGFzIGl0cyBtdXRlZCBsYXN0IGxpbmUuIEEgdG9vbHRpcCB0aGF0XG4vLyB3cml0ZXMgaXRzIG93biB0ZXh0IGtlZXBzIGl0OyBvbmUgRUNoYXJ0cyB3cml0ZXMgYnkgaXRzZWxmIGlzIHdyaXR0ZW4gaGVyZVxuLy8gYXMgdGhlIG90aGVyIHRvb2x0aXBzIGFyZTogdGhlIGNhdGVnb3J5LCB0aGVuIGVhY2ggc2VyaWVzJyB2YWx1ZSBpbiBpdHMgb3duXG4vLyB0b29sdGlwIGZvcm1hdCAoYW4gaXRlbSB0b29sdGlwIG5hbWVzIHRoZSBob3ZlcmVkIGl0ZW0gaW5zdGVhZCkuIEFuIGl0ZW1cbi8vIHRoYXQga2VlcHMgdGhlIGFycm93IChhIHdhdGVyZmFsbCdzIFRvdGFsKSBnZXRzIG5vIGhpbnQuXG5mdW5jdGlvbiBoaW50ZWRUb29sdGlwKFxuICB0b29sdGlwOiBUb29sdGlwQ29tcG9uZW50T3B0aW9uIHwgdW5kZWZpbmVkLFxuICBzZXJpZXM6IFNlcmllc09wdGlvbltdLFxuICBoaW50OiBzdHJpbmcsXG4pOiBUb29sdGlwQ29tcG9uZW50T3B0aW9uIHtcbiAgY29uc3QgbGluZSA9IGA8c3BhbiBzdHlsZT1cIm9wYWNpdHk6IDAuN1wiPiR7ZXNjYXBlSHRtbChoaW50KX08L3NwYW4+YDtcbiAgY29uc3Qgb3duID0gdHlwZW9mIHRvb2x0aXA/LmZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJyA/IHRvb2x0aXAuZm9ybWF0dGVyIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIC4uLnRvb2x0aXAsXG4gICAgZm9ybWF0dGVyOiAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBvd24gPyBTdHJpbmcob3duKHBhcmFtcywgJycsICgpID0+IHVuZGVmaW5lZCkgPz8gJycpIDogcGxhaW5Ub29sdGlwKHBhcmFtcywgc2VyaWVzKTtcblxuICAgICAgaWYgKCFhbnN3ZXJzQ2xpY2socGFyYW1zKSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRleHQgPyBgJHt0ZXh0fTxici8+JHtsaW5lfWAgOiBsaW5lO1xuICAgIH0sXG4gIH07XG59XG5cbi8vIFdoZXRoZXIgdGhlIGhvdmVyZWQgbWFyayBhY3RzIG9uIGEgY2xpY2s6IGV2ZXJ5IG1hcmsgb2YgYW4gYXhpcyB0b29sdGlwLFxuLy8gYW5kIGFuIGl0ZW0gdW5sZXNzIGl0cyBkYXRhIGl0ZW0ga2VlcHMgdGhlIGFycm93LlxuZnVuY3Rpb24gYW5zd2Vyc0NsaWNrKHBhcmFtczogVG9vbHRpcENvbXBvbmVudEZvcm1hdHRlckNhbGxiYWNrUGFyYW1zKTogYm9vbGVhbiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtcykgfHwgKHBhcmFtcy5kYXRhIGFzIHsgY3Vyc29yPzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZCk/LmN1cnNvciAhPT0gJ2RlZmF1bHQnO1xufVxuXG4vLyBUaGUgdG9vbHRpcCBFQ2hhcnRzIHdvdWxkIHdyaXRlLCBpbiB0aGlzIGZpbGUncyBmb3JtLiBBbiBheGlzIHRvb2x0aXA6IHRoZVxuLy8gY2F0ZWdvcnkgKHRoZSBheGlzIHBvaW50ZXIncyBsYWJlbCwgc28gYSBwZXJpb2QgcmVhZHMgYXMgb24gdGhlIGF4aXMpLFxuLy8gdGhlbiAn4pePIFNlcmllczogdmFsdWUnIHBlciBzZXJpZXMgc2hvd24uIEFuIGl0ZW0gdG9vbHRpcDogJ+KXjyBJdGVtOiB2YWx1ZScuXG4vLyBOYW1lcyBjb21lIGZyb20gdGhlIGRhdGEgYW5kIHRoZSBjb25maWcsIGFuZCBFQ2hhcnRzIHNldHMgdGhlIHRvb2x0aXAgYXNcbi8vIEhUTUwsIHNvIGJvdGggYXJlIGVzY2FwZWQuXG5mdW5jdGlvbiBwbGFpblRvb2x0aXAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMsIHNlcmllczogU2VyaWVzT3B0aW9uW10pOiBzdHJpbmcge1xuICBjb25zdCBheGlzID0gQXJyYXkuaXNBcnJheShwYXJhbXMpO1xuICBjb25zdCBpdGVtcyA9IGF4aXMgPyBwYXJhbXMgOiBbcGFyYW1zXTtcbiAgY29uc3QgbGluZXMgPSBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICBjb25zdCB3cml0ZSA9IChzZXJpZXNbaXRlbS5zZXJpZXNJbmRleCA/PyAtMV0/LnRvb2x0aXAgYXMgU2VyaWVzVG9vbHRpcCB8IHVuZGVmaW5lZCk/LnZhbHVlRm9ybWF0dGVyO1xuICAgIGNvbnN0IG1hcmtlciA9IHR5cGVvZiBpdGVtLm1hcmtlciA9PT0gJ3N0cmluZycgPyBpdGVtLm1hcmtlciA6ICcnO1xuICAgIGNvbnN0IG5hbWUgPSBTdHJpbmcoKGF4aXMgPyBpdGVtLnNlcmllc05hbWUgOiBpdGVtLm5hbWUpID8/ICcnKTtcbiAgICBjb25zdCB2YWx1ZSA9IHdyaXRlID8gd3JpdGUoaXRlbS52YWx1ZSkgOiBTdHJpbmcoaXRlbS52YWx1ZSA/PyAnJyk7XG5cbiAgICByZXR1cm4gYCR7bWFya2VyfSAke2VzY2FwZUh0bWwobmFtZSl9OiAke2VzY2FwZUh0bWwodmFsdWUpfWA7XG4gIH0pO1xuICBjb25zdCBmaXJzdCA9IGl0ZW1zWzBdIGFzIHsgYXhpc1ZhbHVlTGFiZWw/OiB1bmtub3duOyBuYW1lPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICBjb25zdCBoZWFkaW5nID0gYXhpcyA/IFN0cmluZyhmaXJzdD8uYXhpc1ZhbHVlTGFiZWwgPz8gZmlyc3Q/Lm5hbWUgPz8gJycpIDogJyc7XG5cbiAgcmV0dXJuIFsuLi4oaGVhZGluZyA/IFtlc2NhcGVIdG1sKGhlYWRpbmcpXSA6IFtdKSwgLi4ubGluZXNdLmpvaW4oJzxici8+Jyk7XG59XG5cbi8vIFRoZSBvcHRpb24sIGJ5IGNoYXJ0IHR5cGUuXG5mdW5jdGlvbiBjaGFydE9wdGlvbihcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICBpZiAoY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcpIHtcbiAgICByZXR1cm4gYnVpbGRQaWVPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUgPT09ICdkb251dCcsIGNvbnRleHQpO1xuICB9XG5cbiAgaWYgKGNoYXJ0VHlwZSA9PT0gJ3dhdGVyZmFsbCcpIHtcbiAgICByZXR1cm4gYnVpbGRXYXRlcmZhbGxPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEF4aXNPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUsIGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBidWlsZEF4aXNPcHRpb24oXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBjaGFydFR5cGU6IEF4aXNDaGFydFR5cGUsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IGhvcml6b250YWwgPSBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgY29uc3QgY29sb3JCeSA9IGlzQ29sb3JCeShjb25maWcpO1xuICBjb25zdCB0eXBlcyA9IHNlcmllc1R5cGVzKGV4dHJhY3RlZCwgY2hhcnRUeXBlKTtcbiAgY29uc3QgY29tYm8gPSBuZXcgU2V0KHR5cGVzKS5zaXplID4gMTtcblxuICAvLyBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5OyBvdmVybGFwcGluZyB0aGVtIChiYXJHYXAgLTEwMCUpIG1ha2VzXG4gIC8vIGVhY2ggcmVuZGVyIGF0IHRoZSBmdWxsIGNhdGVnb3J5LWJhbmQgd2lkdGgg4oCUIG9uZSBmdWxsLXdpZHRoLCBkaXN0aW5jdGx5XG4gIC8vIGNvbG9yZWQgYmFyIHBlciBjYXRlZ29yeSDigJQgaW5zdGVhZCBvZiBzaWRlLWJ5LXNpZGUgc2xpdmVycy4gVGhlIGxheW91dCBwcm9wc1xuICAvLyBhcmUgcmVhZCBmcm9tIHRoZSBmaXJzdCBzZXJpZXMgb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLlxuICAvL1xuICAvLyBTdGFja2luZyBzdW1zIGV2ZXJ5IHNlcmllcyB0aGF0IHNoYXJlcyBhIHN0YWNrIG5hbWUsIHdoYXRldmVyIGl0cyB0eXBlLiBJblxuICAvLyBhIGNvbWJvIGVhY2ggdHlwZSBzdGFja3Mgb25seSB3aXRoIGl0cyBvd24ga2luZCwgc28gYSBsaW5lIG9mIGEgcmF0ZSBuZXZlclxuICAvLyBzaXRzIG9uIHRvcCBvZiB0aGUgYmFycycgdG90YWwsIGFuZCBvbiBhIHR3by1heGlzIGNoYXJ0IG9ubHkgd2l0aCB0aGVcbiAgLy8gc2VyaWVzIG9uIGl0cyBvd24gYXhpcy5cbiAgLy9cbiAgLy8gQSAxMDAlIHN0YWNrZWQgY2hhcnQgKHBlcmNlbnRTdGFja2VkU2hhcmVzKSBwbG90cyBpdHMgcHJpbWFyeSBiYXJzIGFuZFxuICAvLyBhcmVhcyBhcyBzaGFyZXMsIGVhY2ggdHlwZSBpbiBpdHMgb3duIHN0YWNrLCBhbmQgbGVhdmVzIGV2ZXJ5IG90aGVyIHNlcmllc1xuICAvLyB1bnN0YWNrZWQgb24gaXRzIG93biB2YWx1ZXMuXG4gIC8vXG4gIC8vIFdoYXQgdGhlIHNlcnZlciBzYXlzIG9mIHRoZSBudW1iZXJzIChjaGFydEFubm90YXRpb25zKSBtYXJrcyB0aGVtOiBhXG4gIC8vIHByaW9yIHNlcmllcyBkYXNoZWQgaW4gaXRzIGN1cnJlbnQgc2VyaWVzJyBjb2xvciwgdGhlIHBlcmlvZCBub3Qgb3ZlciB5ZXRcbiAgLy8gaGF0Y2hlZCBvciBkYXNoZWQsIHJhbmtzIG9uIGFuIGludmVydGVkIGF4aXMsIGZyYWN0aW9ucyBvbiBhIHBlcmNlbnQgYXhpcyxcbiAgLy8gYW5kIHRoZSB0b29sdGlwIG5hbWluZyBlYWNoIHByaW9yJ3MgZGF5cyBhbmQgZWFjaCB3aW5kb3cuIERhdGEgd2l0aG91dFxuICAvLyB0aG9zZSBrZXlzIGRyYXdzIGV4YWN0bHkgYXMgYmVmb3JlLlxuICBjb25zdCBheGlzSW5kZXhlcyA9IHNlcmllc0F4aXNJbmRleGVzKGV4dHJhY3RlZCwgY29uZmlnKTtcbiAgY29uc3QgdHdvQXhlcyA9IGF4aXNJbmRleGVzLmluY2x1ZGVzKDEpO1xuICBjb25zdCBzaGFyZXMgPSBwZXJjZW50U3RhY2tlZFNoYXJlcyhleHRyYWN0ZWQsIGNvbmZpZyk7XG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBjaGFydFJlZmVyZW5jZXMoY29uZmlnLCB0d29BeGVzKTtcbiAgY29uc3QgYW5ub3RhdGlvbnMgPSBjaGFydEFubm90YXRpb25zKGNvbmZpZywgZGF0YSwgZXh0cmFjdGVkLCBjb2xvckJ5KTtcbiAgY29uc3QgYXhpc0Zvcm1hdHMgPSB2YWx1ZUF4aXNGb3JtYXRzKFxuICAgIGNvbmZpZyxcbiAgICBhbm5vdGF0aW9ucyA/IGFubm90YXRlZEF4aXNTZXJpZXMoZXh0cmFjdGVkLCBhbm5vdGF0aW9ucykgOiBleHRyYWN0ZWQsXG4gICAgYXhpc0luZGV4ZXMsXG4gICAgYW5ub3RhdGlvbnMgJiYgIXNoYXJlcyA/IGFubm90YXRlZEF4aXNDb250ZXh0cyhhbm5vdGF0aW9ucywgYXhpc0luZGV4ZXMsIGNvbnRleHQpIDogW2NvbnRleHQsIGNvbnRleHRdLFxuICAgICEhc2hhcmVzLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIGNvbnN0IHJhbmtBeGVzID0gYW5ub3RhdGlvbnMgJiYgIXNoYXJlcyA/IHJhbmtBeGlzRmxhZ3MoYW5ub3RhdGlvbnMub3V0cHV0cywgYXhpc0luZGV4ZXMpIDogW2ZhbHNlLCBmYWxzZV07XG4gIC8vIEEgc2VyaWVzJyBzdGF0aXN0aWMgbGluZSBpcyB0YWtlbiBvdmVyIHRoZSBwb2ludHMgaXQgcGxvdHMuIE9uIGEgY29sb3JCeVxuICAvLyBjaGFydCBlYWNoIHNlcmllcyBob2xkcyBvbmUgYmFyLCBzbyB0aGUgb25lIGxpbmUgaXMgdGFrZW4gb3ZlciB0aGUgYmFyc1xuICAvLyB0b2dldGhlciBhbmQgaGFuZ3Mgb2ZmIHRoZSBmaXJzdCBzZXJpZXMgKGNvbG9yQnlTdGF0TGluZSkuXG4gIGNvbnN0IHN0YXRMaW5lcyA9IGRyYXdzU3RhdExpbmVzKGNvbmZpZykgJiYgIWNvbG9yQnk7XG4gIGNvbnN0IHNlcmllczogU2VyaWVzT3B0aW9uW10gPSBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoZXh0cmFjdGVkU2VyaWVzLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHNlcmllc1NoYXJlcyA9IHNoYXJlcz8uZ2V0KGluZGV4KTtcbiAgICBsZXQgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoc2VyaWVzU2hhcmVzKSB7XG4gICAgICBzdGFjayA9IHN0YWNrS2V5KHR5cGVzW2luZGV4XSwgY29tYm8sIDApO1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLnN0YWNrZWQgJiYgIXNoYXJlcykge1xuICAgICAgc3RhY2sgPSBzdGFja0tleSh0eXBlc1tpbmRleF0sIGNvbWJvLCB0d29BeGVzID8gYXhpc0luZGV4ZXNbaW5kZXhdIDogdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICAvLyBBbiBvdXRwdXQgc2VyaWVzIChhIGNvbXBhcmVkLCB3aW5kb3dlZCwgcmFua2VkIG9yIHNoYXJlZCB2YWx1ZSkgd3JpdGVzXG4gICAgLy8gaXRzIHRvb2x0aXAsIGRhdGEgbGFiZWxzIGFuZCBzdGF0aXN0aWMgbGluZSBieSB3aGF0IGl0IGhvbGRzLlxuICAgIGNvbnN0IHdyaXRlID0gYW5ub3RhdGlvbnMgJiYgIXNlcmllc1NoYXJlcyAmJiBhbm5vdGF0aW9ucy5vdXRwdXRzW2luZGV4XVxuICAgICAgPyBvdXRwdXRXcml0ZXIoYW5ub3RhdGlvbnMsIGluZGV4LCBleHRyYWN0ZWRTZXJpZXMubWVhc3VyZSwgY29udGV4dClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBzdGF0ID0gc3RhdExpbmVzID8gbWVhc3VyZU1hcmtTdGF0KGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtYXJrTGluZSA9IHN0YXQgJiYgc3RhdE1hcmtMaW5lKFxuICAgICAgc2VyaWVzU2hhcmVzID8/IGV4dHJhY3RlZFNlcmllcy52YWx1ZXMsXG4gICAgICBzdGF0LFxuICAgICAgc2VyaWVzU2hhcmVzID8gc2hhcmVXcml0ZXIoY29udGV4dCkgOiB3cml0ZSA/PyBtZWFzdXJlV3JpdGVyKGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlLCBjb250ZXh0KSxcbiAgICApO1xuICAgIGNvbnN0IG9wdGlvbiA9IGJ1aWxkU2VyaWVzKFxuICAgICAgZXh0cmFjdGVkU2VyaWVzLFxuICAgICAgc2VyaWVzU2hhcmVzID8gc2hhcmVEYXRhKGV4dHJhY3RlZFNlcmllcy52YWx1ZXMsIHNlcmllc1NoYXJlcykgOiBleHRyYWN0ZWRTZXJpZXMudmFsdWVzLFxuICAgICAge1xuICAgICAgICB0eXBlOiB0eXBlc1tpbmRleF0sXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBvdmVybGFwOiBjb2xvckJ5ICYmIGluZGV4ID09PSAwLFxuICAgICAgICBjb21ibyxcbiAgICAgICAgdG9vbHRpcDogd3JpdGUgPyB7IHZhbHVlRm9ybWF0dGVyOiB3cml0ZSB9IDogc2VyaWVzVG9vbHRpcChleHRyYWN0ZWRTZXJpZXMubWVhc3VyZSwgY29udGV4dCksXG4gICAgICAgIGF4aXNJbmRleDogdHdvQXhlcyA/IGF4aXNJbmRleGVzW2luZGV4XSA6IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gQSBjb2xvckJ5IGNoYXJ0J3MgYmFycyB0YWtlIHRoZSBwYWxldHRlIGJ5IGNhdGVnb3J5LCBhcyBpblxuICAgICAgICAvLyBQb3dlclBvaW50LCB3aGF0ZXZlciBjb2xvciB0aGUgbWVhc3VyZSBuYW1lcy5cbiAgICAgICAgY29sb3I6IGNvbG9yQnkgPyB1bmRlZmluZWQgOiBhbm5vdGF0aW9ucz8uY29sb3JzPy5baW5kZXhdID8/IHNlcmllc0NvbG9yKGV4dHJhY3RlZFNlcmllcyksXG4gICAgICAgIGxhYmVsczogZGF0YUxhYmVsT3B0aW9uKGNvbmZpZy5kYXRhTGFiZWxzLCB3cml0ZVxuICAgICAgICAgID8gb3V0cHV0TGFiZWxGb3JtYXR0ZXIod3JpdGUpXG4gICAgICAgICAgOiBkYXRhTGFiZWxGb3JtYXR0ZXIoXG4gICAgICAgICAgICBleHRyYWN0ZWRTZXJpZXMubWVhc3VyZSxcbiAgICAgICAgICAgIGF4aXNGb3JtYXRzW2F4aXNJbmRleGVzW2luZGV4XV0gPz8gbnVsbCxcbiAgICAgICAgICAgICEhc2VyaWVzU2hhcmVzLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICApKSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBtYXJrZWQgPSBhbm5vdGF0aW9ucyA/IG1hcmtTZXJpZXMob3B0aW9uLCBhbm5vdGF0aW9ucywgaW5kZXgsIGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlKSA6IG9wdGlvbjtcblxuICAgIHJldHVybiBtYXJrTGluZSA/IHsgLi4ubWFya2VkLCBtYXJrTGluZSB9IGFzIFNlcmllc09wdGlvbiA6IG1hcmtlZDtcbiAgfSk7XG5cbiAgaWYgKGNvbG9yQnkgJiYgZHJhd3NTdGF0TGluZXMoY29uZmlnKSAmJiBzZXJpZXMubGVuZ3RoKSB7XG4gICAgc2VyaWVzWzBdID0gY29sb3JCeVN0YXRMaW5lKHNlcmllc1swXSwgZXh0cmFjdGVkLCBjb250ZXh0LCBhbm5vdGF0aW9ucz8ub3V0cHV0c1swXVxuICAgICAgPyBvdXRwdXRXcml0ZXIoYW5ub3RhdGlvbnMsIDAsIGV4dHJhY3RlZC5zZXJpZXNbMF0ubWVhc3VyZSwgY29udGV4dClcbiAgICAgIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8vIERyYXduIGFmdGVyIHRoZSBtZWFzdXJlIHNlcmllcywgc28gYSB0b29sdGlwIHJlYWRzIGEgc2VyaWVzIGJ5IGl0cyBpbmRleC5cbiAgY29uc3Qgc2VnbWVudHMgPSBhbm5vdGF0aW9ucyA/IHBhcnRpYWxTZWdtZW50cyhzZXJpZXMsIGFubm90YXRpb25zKSA6IFtdO1xuICBjb25zdCBwZXJjZW50TWluID0gc2hhcmVzID8gcGVyY2VudEF4aXNNaW4oc2hhcmVzKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY2F0ZWdvcnlBeGlzID0gY2F0ZWdvcnlBeGlzT3B0aW9uKGNvbmZpZywgZGF0YSwgZXh0cmFjdGVkLmNhdGVnb3JpZXMsIGhvcml6b250YWwsIGNvbnRleHQubG9jYWxlKTtcbiAgLy8gQW4gYXhpcyBvZiByYXRlIGNoYW5nZXMgYWxvbmUgcmVhZHMgaW4gcGVyY2VudGFnZSBwb2ludHMsIGFzIGl0cyB2YWx1ZXMgZG8uXG4gIGNvbnN0IGF4aXNMYWJlbHMgPSAoWzAsIDFdIGFzIGNvbnN0KS5tYXAoKGF4aXNJbmRleCkgPT4gKGFubm90YXRpb25zICYmICFzaGFyZXNcbiAgICA/IHBvaW50c0F4aXNMYWJlbChhbm5vdGF0aW9ucywgZXh0cmFjdGVkLCBheGlzSW5kZXhlcywgYXhpc0luZGV4LCBjb250ZXh0KVxuICAgIDogbnVsbCkgPz8gdmFsdWVBeGlzTGFiZWwoYXhpc0Zvcm1hdHNbYXhpc0luZGV4XSA/PyBudWxsLCBjb250ZXh0KSk7XG4gIGNvbnN0IHZhbHVlQXhpcyA9IHR3b0F4ZXNcbiAgICA/IHR3b1ZhbHVlQXhlc09wdGlvbihjb25maWcsIGF4aXNMYWJlbHMsIGNvbnRleHQsIHBlcmNlbnRNaW4sIHJlZmVyZW5jZXMsIHJhbmtBeGVzKVxuICAgIDogdmFsdWVBeGlzT3B0aW9uKGNvbmZpZy52YWx1ZUF4aXMsIGhvcml6b250YWwsIHBlcmNlbnRNaW4gPT09IHVuZGVmaW5lZFxuICAgICAgPyBheGlzTGFiZWxzWzBdXG4gICAgICA6IHBlcmNlbnRBeGlzTGFiZWwoY29udGV4dCksIHsgcGVyY2VudE1pbiwgcmVhY2g6IHJlZmVyZW5jZVJlYWNoKHJlZmVyZW5jZXMsIDApLCByYW5rOiByYW5rQXhlc1swXSB9KTtcblxuICBjb25zdCBsZWdlbmRQb3NpdGlvbiA9IHJlc29sdmVMZWdlbmRQb3NpdGlvbihjb25maWcsIHNlcmllcy5sZW5ndGgsIGNvbG9yQnkpO1xuICBjb25zdCB2YWx1ZVRpdGxlcyA9IFtjb25maWcudmFsdWVBeGlzLCB0d29BeGVzID8gY29uZmlnLnNlY29uZGFyeUF4aXMgOiB1bmRlZmluZWRdO1xuICBjb25zdCBncmFudWxhcml0eSA9IGJ1Y2tldEdyYW51bGFyaXR5KGRhdGEpO1xuXG4gIHJldHVybiB7XG4gICAgZ3JpZDogYXhpc0dyaWQoXG4gICAgICBsZWdlbmRQb3NpdGlvbixcbiAgICAgIGNhdGVnb3J5VGl0bGVTaWRlKGNvbmZpZywgZGF0YSwgaG9yaXpvbnRhbCksXG4gICAgICB2YWx1ZVRpdGxlU2lkZSh2YWx1ZVRpdGxlcywgaG9yaXpvbnRhbCksXG4gICAgKSxcbiAgICBsZWdlbmQ6IHJlZmVyZW5jZUxlZ2VuZChsZWdlbmRPcHRpb24obGVnZW5kUG9zaXRpb24pLCBzZXJpZXMsIHJlZmVyZW5jZXMpLFxuICAgIC8vIGNvbG9yQnkgY2hhcnRzIG92ZXJsYXAgTiBtb3N0bHktbnVsbCBzZXJpZXMsIHNvIGFuIGF4aXMgdG9vbHRpcCB3b3VsZCBsaXN0XG4gICAgLy8gZXZlcnkgY2F0ZWdvcnk7IGFuIGl0ZW0gdG9vbHRpcCBzaG93cyBqdXN0IHRoZSBob3ZlcmVkIGJhci4gQSAxMDAlXG4gICAgLy8gc3RhY2tlZCBjaGFydCdzIHRvb2x0aXAgZ2l2ZXMgZWFjaCBzaGFyZSBhbmQgdGhlIHZhbHVlIGl0IGNhbWUgZnJvbS4gQVxuICAgIC8vIGNoYXJ0IHdpdGggdGhlIHNlcnZlcidzIGFubm90YXRpb25zIG5hbWVzIHdoYXQgZWFjaCB2YWx1ZSBjb3ZlcnMuXG4gICAgdG9vbHRpcDogc2hhcmVzXG4gICAgICA/IHtcbiAgICAgICAgdHJpZ2dlcjogJ2F4aXMnLFxuICAgICAgICBmb3JtYXR0ZXI6IChwYXJhbXM6IFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcykgPT4gcGVyY2VudFRvb2x0aXAoXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIGV4dHJhY3RlZCxcbiAgICAgICAgICBzaGFyZXMsXG4gICAgICAgICAgZ3JhbnVsYXJpdHksXG4gICAgICAgICAgY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICApLFxuICAgICAgfVxuICAgICAgOiBhbm5vdGF0ZWRDaGFydFRvb2x0aXAoYW5ub3RhdGlvbnMgJiYgIWNvbG9yQnkgPyB7XG4gICAgICAgIGV4dHJhY3RlZCxcbiAgICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICAgIG93bmVyczogc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiBzZWdtZW50Lm93bmVyKSxcbiAgICAgICAgZ3JhbnVsYXJpdHksXG4gICAgICAgIGRhdGVMYWJlbDogY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgIH0gOiBudWxsKSA/PyB7IHRyaWdnZXI6IGNvbG9yQnkgPyAnaXRlbScgOiAnYXhpcycgfSxcbiAgICB4QXhpczogaG9yaXpvbnRhbCA/IHZhbHVlQXhpcyA6IGNhdGVnb3J5QXhpcyxcbiAgICB5QXhpczogaG9yaXpvbnRhbCA/IGNhdGVnb3J5QXhpcyA6IHZhbHVlQXhpcyxcbiAgICBzZXJpZXM6IFsuLi5zZXJpZXMsIC4uLnNlZ21lbnRzLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC5zZXJpZXMpLCAuLi5yZWZlcmVuY2VDYXJyaWVycyhyZWZlcmVuY2VzLCBleHRyYWN0ZWQuY2F0ZWdvcmllcyldLFxuICB9O1xufVxuXG4vLyBXaGF0IHRoZSBzZXJ2ZXIgc2F5cyBvZiB0aGUgc2VyaWVzIGFuIGF4aXMgY2hhcnQgcGxvdHMsIHJlYWQgZnJvbSB0aGVcbi8vIGRhdGEncyBjb21wYXJpc29uLCBvdXRwdXRzLCB3aW5kb3dzIGFuZCBwYXJ0aWFsUGVyaW9kIGJ5IGVhY2ggc2VyaWVzJ1xuLy8gbWVhc3VyZSBjb2x1bW4uIGNoYXJ0QW5ub3RhdGlvbnMgaXMgbnVsbCB3aGVuIHRoZSBkYXRhIGNhcnJpZXMgbm9uZSBvZlxuLy8gdGhvc2Uga2V5cywgYW5kIHRoZSBjaGFydCBkcmF3cyBleGFjdGx5IGFzIGJlZm9yZS5cbmludGVyZmFjZSBDaGFydEFubm90YXRpb25zIHtcbiAgb3V0cHV0czogKE91dHB1dE1ldGEgfCBudWxsKVtdO1xuICB3aW5kb3dzOiAoV2luZG93TWV0YSB8IG51bGwpW107XG4gIC8vIFRoZSBjaGFydCBtZWFzdXJlIGFuIG91dHB1dCB0YWtlcyBpdHMgbWVhc3VyZSdzIGZvcm1hdCBmcm9tOiBpdHMgY3VycmVudFxuICAvLyB2YWx1ZSdzLCB3aGVuIHRoZSBjaGFydCBwbG90cyBpdC5cbiAgbWVhc3VyZVNwZWNzOiAoQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkKVtdO1xuICAvLyBBIGNoYW5nZSBvciBwZXJjZW50IGNoYW5nZSBzZXJpZXMnIHByaW9yIHZhbHVlcyBieSBjYXRlZ29yeSwgd2hpY2ggdGVsbFxuICAvLyBhIG1pc3NpbmcgYmFzZWxpbmUgZnJvbSBhIHplcm8gb25lOyBudWxsIGZvciBhbnkgb3RoZXIgc2VyaWVzLlxuICBwcmlvcnM6ICgobnVtYmVyIHwgbnVsbClbXSB8IG51bGwpW107XG4gIC8vIFRoZSBsYW5lIHByaW9yIGEgY3VycmVudCwgY2hhbmdlIG9yIHBlcmNlbnQgY2hhbmdlIHNlcmllcyBpcyBjb21wYXJlZFxuICAvLyB3aXRoLCB3aGVuIHRoZSBjaGFydCBkb2VzIG5vdCBwbG90IHRoYXQgcHJpb3IgaXRzZWxmOiBpdHMgdG9vbHRpcCBsaW5lXG4gIC8vIG5hbWVzIHRoZSBwcmlvcidzIHZhbHVlIGFuZCBkYXlzLiBudWxsIGZvciBhbnkgb3RoZXIgc2VyaWVzLlxuICBsYW5lUHJpb3JzOiAoTGFuZVByaW9yIHwgbnVsbClbXTtcbiAgLy8gRXZlcnkgc2VyaWVzJyBvd24gQ1NTIGNvbG9yLCBzbyBhIHByaW9yIHNlcmllcyBhbmQgYSBwYXJ0aWFsIHNlZ21lbnQgY2FuXG4gIC8vIHNoYXJlIGFub3RoZXInczsgbnVsbCBvbiBhIGNvbG9yQnkgY2hhcnQsIHdoaWNoIGNvbG9ycyBieSBjYXRlZ29yeS5cbiAgY29sb3JzOiBzdHJpbmdbXSB8IG51bGw7XG4gIHByaW9yU2VyaWVzOiBib29sZWFuW107XG4gIGNvbXBhcmlzb246IENvbXBvbmVudENvbXBhcmlzb24gfCBudWxsO1xuICAvLyBUaGUgY2F0ZWdvcnkgb2YgdGhlIHBlcmlvZCBub3Qgb3ZlciB5ZXQsIG9yIG51bGwuXG4gIHBhcnRpYWxJbmRleDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gQSBzZXJpZXMnIGxhbmUgcHJpb3I6IGl0cyBvdXRwdXQsIGl0cyB2YWx1ZXMgYnkgY2F0ZWdvcnksIGFuZCBhIGtleSB0aGF0XG4vLyBuYW1lcyBpdCBvbmNlIGluIGEgdG9vbHRpcCAodGhlIHByaW9yIGNvbHVtbiwgYW5kIG9uIGEgc3BsaXRCeSBjaGFydCB0aGVcbi8vIGdyb3VwKS5cbmludGVyZmFjZSBMYW5lUHJpb3Ige1xuICBrZXk6IHN0cmluZztcbiAgb3V0cHV0OiBPdXRwdXRNZXRhO1xuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdO1xufVxuXG4vLyBUaGUga2V5cyBvZiBhIGJ1aWx0IGF4aXMgc2VyaWVzIHRoYXQgdGhlIGFubm90YXRpb25zIHJlYWQgYW5kIHJlcGxhY2UuXG5pbnRlcmZhY2UgRHJhd25TZXJpZXMge1xuICB0eXBlPzogc3RyaW5nO1xuICBzdGFjaz86IHN0cmluZztcbiAgZGF0YT86IFNlcmllc0RhdGFJdGVtPERhdGFMYWJlbFBvc2l0aW9uPltdO1xuICBpdGVtU3R5bGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbGluZVN0eWxlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIEEgZGFzaGVkIGxhc3Qgc2VnbWVudCAocGFydGlhbFNlZ21lbnRzKSwgZHJhd24gYWZ0ZXIgdGhlIG1lYXN1cmUgc2VyaWVzLFxuLy8gYW5kIHRoZSBpbmRleCBvZiB0aGUgc2VyaWVzIGl0IGNvbnRpbnVlcy5cbmludGVyZmFjZSBQYXJ0aWFsU2VnbWVudCB7XG4gIHNlcmllczogU2VyaWVzT3B0aW9uO1xuICBvd25lcjogbnVtYmVyO1xufVxuXG4vLyBXaGF0IGFuIGFubm90YXRlZCBjaGFydCdzIGF4aXMgdG9vbHRpcCByZWFkcy4gb3duZXJzIGhvbGRzLCBieSBwb3NpdGlvbixcbi8vIHRoZSBzZXJpZXMgZWFjaCBwYXJ0aWFsIHNlZ21lbnQgY29udGludWVzLlxuaW50ZXJmYWNlIEFubm90YXRlZFRvb2x0aXBTb3VyY2Uge1xuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzO1xuICBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucztcbiAgb3duZXJzOiBudW1iZXJbXTtcbiAgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsO1xuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBjaGFydEFubm90YXRpb25zKFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBjb2xvckJ5OiBib29sZWFuLFxuKTogQ2hhcnRBbm5vdGF0aW9ucyB8IG51bGwge1xuICBpZiAoIWRhdGEuY29tcGFyaXNvbiAmJiAhZGF0YS5vdXRwdXRzICYmICFkYXRhLndpbmRvd3MgJiYgKGRhdGEucGFydGlhbFBlcmlvZCA/PyBudWxsKSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY29sdW1ucyA9IGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy5tZWFzdXJlLmNvbHVtbik7XG4gIGNvbnN0IG91dHB1dHMgPSBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBkYXRhLm91dHB1dHM/Lltjb2x1bW5dID8/IG51bGwpO1xuICBjb25zdCBjdXJyZW50cyA9IGNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiAob3V0cHV0c1tpbmRleF0gPyBjdXJyZW50T3V0cHV0QWxpYXMoZGF0YS5vdXRwdXRzLCBjb2x1bW4pIDogbnVsbCkpO1xuICBjb25zdCBtZWFzdXJlcyA9IGNoYXJ0TWVhc3VyZXMoY29uZmlnLCBkYXRhKTtcbiAgLy8gQSBwcmlvciBzZXJpZXMnIGN1cnJlbnQgc2VyaWVzLCBieSBpbmRleDsgLTEgZm9yIGFueSBvdGhlci5cbiAgY29uc3Qgc291cmNlcyA9IGN1cnJlbnRzLm1hcCgoY3VycmVudCwgaW5kZXgpID0+IChvdXRwdXRzW2luZGV4XT8ucm9sZSA9PT0gJ3ByaW9yJyA/IGNvbHVtbnMuaW5kZXhPZihjdXJyZW50KSA6IC0xKSk7XG4gIGNvbnN0IHBhcnRpYWxJbmRleCA9IChkYXRhLnBhcnRpYWxQZXJpb2QgPz8gbnVsbCkgPT09IG51bGwgPyAtMSA6IGV4dHJhY3RlZC5jYXRlZ29yaWVzLmluZGV4T2YoU3RyaW5nKGRhdGEucGFydGlhbFBlcmlvZCkpO1xuICBjb25zdCBsYW5lcyA9IGxhbmVQcmlvclZhbHVlcyhjb25maWcsIGRhdGEsIGV4dHJhY3RlZCwgb3V0cHV0cyk7XG5cbiAgcmV0dXJuIHtcbiAgICBvdXRwdXRzLFxuICAgIHdpbmRvd3M6IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IGRhdGEud2luZG93cz8uW2NvbHVtbl0gPz8gbnVsbCksXG4gICAgbWVhc3VyZVNwZWNzOiBjdXJyZW50cy5tYXAoKGN1cnJlbnQpID0+IG1lYXN1cmVzLmZpbmQoKG1lYXN1cmUpID0+IG1lYXN1cmUuY29sdW1uID09PSBjdXJyZW50KSksXG4gICAgcHJpb3JzOiBsYW5lcy5tYXAoKGxhbmUsIGluZGV4KSA9PiAoaXNEZWx0YVJvbGUob3V0cHV0c1tpbmRleF0/LnJvbGUpID8gbGFuZT8ucHJpb3IudmFsdWVzID8/IG51bGwgOiBudWxsKSksXG4gICAgbGFuZVByaW9yczogbGFuZXMubWFwKChsYW5lKSA9PiAobGFuZSAmJiAhY29sdW1ucy5pbmNsdWRlcyhsYW5lLmFsaWFzKSA/IGxhbmUucHJpb3IgOiBudWxsKSksXG4gICAgY29sb3JzOiBjb2xvckJ5ID8gbnVsbCA6IGFubm90YXRlZENvbG9ycyhleHRyYWN0ZWQsIHNvdXJjZXMpLFxuICAgIHByaW9yU2VyaWVzOiBvdXRwdXRzLm1hcCgob3V0cHV0KSA9PiBvdXRwdXQ/LnJvbGUgPT09ICdwcmlvcicpLFxuICAgIGNvbXBhcmlzb246IGRhdGEuY29tcGFyaXNvbiA/PyBudWxsLFxuICAgIHBhcnRpYWxJbmRleDogcGFydGlhbEluZGV4IDwgMCA/IG51bGwgOiBwYXJ0aWFsSW5kZXgsXG4gIH07XG59XG5cbi8vIEEgY3VycmVudCwgY2hhbmdlIG9yIHBlcmNlbnQgY2hhbmdlIHNlcmllcycgbGFuZSBwcmlvciwgYnkgY2F0ZWdvcnk6IGl0c1xuLy8gbGFuZSdzIHByaW9yIGNvbHVtbiBpbiB0aGUgc2FtZSByb3dzICh0aGUgc2FtZSBncm91cCdzIG9uIGEgc3BsaXRCeSBjaGFydCksXG4vLyBhbmQgdGhhdCBjb2x1bW4ncyBhbGlhcy5cbmZ1bmN0aW9uIGxhbmVQcmlvclZhbHVlcyhcbiAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgb3V0cHV0czogKE91dHB1dE1ldGEgfCBudWxsKVtdLFxuKTogKHsgYWxpYXM6IHN0cmluZzsgcHJpb3I6IExhbmVQcmlvciB9IHwgbnVsbClbXSB7XG4gIGNvbnN0IHsgeENvbHVtbiwgZ3JvdXBDb2x1bW4gfSA9IGNoYXJ0Q29sdW1ucyhjb25maWcsIGRhdGEpO1xuICBjb25zdCByYXdDYXRlZ29yaWVzID0gdW5pcXVlVmFsdWVzKGRhdGEucm93cywgeENvbHVtbik7XG4gIGNvbnN0IGdyb3VwcyA9IGdyb3VwQ29sdW1uID8gdW5pcXVlVmFsdWVzKGRhdGEucm93cywgZ3JvdXBDb2x1bW4pIDogW107XG5cbiAgcmV0dXJuIGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMsIGluZGV4KSA9PiB7XG4gICAgY29uc3Qgcm9sZSA9IG91dHB1dHNbaW5kZXhdPy5yb2xlO1xuICAgIGNvbnN0IGFsaWFzID0gcm9sZSA9PT0gJ2N1cnJlbnQnIHx8IGlzRGVsdGFSb2xlKHJvbGUpXG4gICAgICA/IGxhbmVPdXRwdXRBbGlhcyhkYXRhLm91dHB1dHMsIHNlcmllcy5tZWFzdXJlLmNvbHVtbiwgJ3ByaW9yJylcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBvdXRwdXQgPSBhbGlhcyA/IGRhdGEub3V0cHV0cz8uW2FsaWFzXSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghYWxpYXMgfHwgIW91dHB1dCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSBncm91cENvbHVtbiA/IChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiByb3dbZ3JvdXBDb2x1bW5dID09PSBncm91cHNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFsaWFzLFxuICAgICAgcHJpb3I6IHtcbiAgICAgICAga2V5OiBncm91cENvbHVtbiA/IGAke2FsaWFzfVxcdTAwMDAke2luZGV4fWAgOiBhbGlhcyxcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICB2YWx1ZXM6IGNhdGVnb3J5VmFsdWVzKGRhdGEucm93cywgeENvbHVtbiwgcmF3Q2F0ZWdvcmllcywgYWxpYXMsIG1hdGNoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzRGVsdGFSb2xlKHJvbGU6IE91dHB1dFJvbGUgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiByb2xlID09PSAnY2hhbmdlJyB8fCByb2xlID09PSAncGVyY2VudF9jaGFuZ2UnO1xufVxuXG4vLyBFYWNoIHNlcmllcycgY29sb3IgYXMgdGhlIHRoZW1lIHdvdWxkIGhhbmQgaXQgb3V0OiBpdHMgbWVhc3VyZSdzIG5hbWVkXG4vLyBjb2xvciwgZWxzZSB0aGUgbmV4dCBwYWxldHRlIGNvbG9yIGFtb25nIHRoZSBzZXJpZXMgd2l0aG91dCBvbmUuIEEgcHJpb3Jcbi8vIHNlcmllcyB0aGF0IG5hbWVzIG5vIGNvbG9yIHRha2VzIGl0cyBjdXJyZW50IHNlcmllcycgY29sb3IgKHNvdXJjZXMpIGFuZFxuLy8gbm8gcGFsZXR0ZSBjb2xvciBvZiBpdHMgb3duLlxuZnVuY3Rpb24gYW5ub3RhdGVkQ29sb3JzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIHNvdXJjZXM6IG51bWJlcltdKTogc3RyaW5nW10ge1xuICBsZXQgc2xvdCA9IDA7XG4gIGNvbnN0IG93biA9IGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbmFtZWQgPSBzZXJpZXNDb2xvcihzZXJpZXMpO1xuXG4gICAgaWYgKG5hbWVkIHx8IHNvdXJjZXNbaW5kZXhdID49IDApIHtcbiAgICAgIHJldHVybiBuYW1lZCA/PyBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBSRVBPUlRfQ0hBUlRfQ09MT1JTX0NTU1tzbG90KysgJSBSRVBPUlRfQ0hBUlRfQ09MT1JTX0NTUy5sZW5ndGhdO1xuICB9KTtcblxuICByZXR1cm4gb3duLm1hcCgoY29sb3IsIGluZGV4KSA9PiBjb2xvciA/PyBvd25bc291cmNlc1tpbmRleF1dIGFzIHN0cmluZyk7XG59XG5cbi8vIEEgc2VyaWVzJyBtYXJrczogYSBwcmlvciBkcmF3biBpbiBpdHMgY3VycmVudCBzZXJpZXMnIGNvbG9yIGZhbWlseSwgZGFzaGVkLFxuLy8gYW5kIHRoZSBwZXJpb2Qgbm90IG92ZXIgeWV0IGhhdGNoZWQgKGEgYmFyKSBvciByaW5nZWQgKGEgcG9pbnQpLlxuZnVuY3Rpb24gbWFya1NlcmllcyhcbiAgb3B0aW9uOiBTZXJpZXNPcHRpb24sXG4gIGFubm90YXRpb25zOiBDaGFydEFubm90YXRpb25zLFxuICBpbmRleDogbnVtYmVyLFxuICBtZWFzdXJlOiBDaGFydE1lYXN1cmUsXG4pOiBTZXJpZXNPcHRpb24ge1xuICBjb25zdCBwcmlvciA9IGFubm90YXRpb25zLnByaW9yU2VyaWVzW2luZGV4XSA/IHByaW9yU3R5bGUob3B0aW9uLCBtZWFzdXJlLCBhbm5vdGF0aW9ucy5jb2xvcnM/LltpbmRleF0pIDogb3B0aW9uO1xuXG4gIHJldHVybiBhbm5vdGF0aW9ucy5wYXJ0aWFsSW5kZXggPT09IG51bGwgPyBwcmlvciA6IG1hcmtQYXJ0aWFsUG9pbnQocHJpb3IsIGFubm90YXRpb25zLnBhcnRpYWxJbmRleCk7XG59XG5cbi8vIEEgcHJpb3IncyBiYXJzIGFyZSBmYWRlZCB3aXRoIGEgZGFzaGVkIGVkZ2U7IGl0cyBsaW5lIGlzIGRhc2hlZCB1bmxlc3MgaXRzXG4vLyBtZWFzdXJlIG5hbWVzIGEgbGluZSBzdHlsZS5cbmZ1bmN0aW9uIHByaW9yU3R5bGUob3B0aW9uOiBTZXJpZXNPcHRpb24sIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSwgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFNlcmllc09wdGlvbiB7XG4gIGNvbnN0IGRyYXduID0gb3B0aW9uIGFzIERyYXduU2VyaWVzO1xuXG4gIGlmIChkcmF3bi50eXBlID09PSAnYmFyJykge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vcHRpb24sXG4gICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgLi4uZHJhd24uaXRlbVN0eWxlLFxuICAgICAgICBvcGFjaXR5OiBQUklPUl9CQVJfT1BBQ0lUWSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgIGJvcmRlclR5cGU6ICdkYXNoZWQnLFxuICAgICAgICAuLi4oY29sb3IgPyB7IGJvcmRlckNvbG9yOiBjb2xvciB9IDoge30pLFxuICAgICAgfSxcbiAgICB9IGFzIFNlcmllc09wdGlvbjtcbiAgfVxuXG4gIHJldHVybiB7IC4uLm9wdGlvbiwgbGluZVN0eWxlOiB7IC4uLmRyYXduLmxpbmVTdHlsZSwgdHlwZTogbWVhc3VyZUxpbmVTdHlsZShtZWFzdXJlKSA/PyBQUklPUl9MSU5FX1NUWUxFIH0gfSBhcyBTZXJpZXNPcHRpb247XG59XG5cbi8vIFRoZSBwb2ludCBvZiB0aGUgcGVyaW9kIG5vdCBvdmVyIHlldCwgd2hlbiBpdCBoYXMgYSB2YWx1ZS5cbmZ1bmN0aW9uIG1hcmtQYXJ0aWFsUG9pbnQob3B0aW9uOiBTZXJpZXNPcHRpb24sIHBhcnRpYWxJbmRleDogbnVtYmVyKTogU2VyaWVzT3B0aW9uIHtcbiAgY29uc3QgZHJhd24gPSBvcHRpb24gYXMgRHJhd25TZXJpZXM7XG4gIGNvbnN0IGRhdGEgPSBbLi4uKGRyYXduLmRhdGEgPz8gW10pXTtcbiAgY29uc3QgaXRlbSA9IGRhdGFbcGFydGlhbEluZGV4XTtcblxuICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IHBvaW50VmFsdWUoaXRlbSkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG5cbiAgY29uc3QgbWFyayA9IGRyYXduLnR5cGUgPT09ICdiYXInID8geyBpdGVtU3R5bGU6IHsgZGVjYWw6IFBBUlRJQUxfQkFSX0RFQ0FMIH0gfSA6IFBBUlRJQUxfUE9JTlRfTUFSSztcbiAgZGF0YVtwYXJ0aWFsSW5kZXhdID0gKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IHsgLi4uaXRlbSwgLi4ubWFyayB9IDogeyB2YWx1ZTogaXRlbSwgLi4ubWFyayB9KSBhcyBTZXJpZXNEYXRhSXRlbTxEYXRhTGFiZWxQb3NpdGlvbj47XG5cbiAgcmV0dXJuIHsgLi4ub3B0aW9uLCBkYXRhIH0gYXMgU2VyaWVzT3B0aW9uO1xufVxuXG4vLyBBIGxpbmUgb3IgYXJlYSBzZXJpZXMgd2hvc2UgbGFzdCBwZXJpb2QgaXMgbm90IG92ZXIgeWV0IGRyYXdzIGl0cyBsYXN0XG4vLyBzZWdtZW50IGRhc2hlZDogdGhlIHNlcmllcyBzdG9wcyBvbmUgcG9pbnQgc2hvcnQsIGFuZCBhIHNlZ21lbnQgc2VyaWVzXG4vLyBjYXJyaWVzIGl0cyBsYXN0IHR3byBwb2ludHMsIGRhc2hlZCwgaW4gaXRzIGNvbG9yIGFuZCB1bmRlciBpdHMgbmFtZSwgc29cbi8vIHRoZSBvbmUgbGVnZW5kIGVudHJ5IHRvZ2dsZXMgYm90aC4gSXRzIGlkIG5hbWVzIHRoZSBzZXJpZXMgaXQgY29udGludWVzXG4vLyAocGFydGlhbFNlZ21lbnRJZCksIHNvIGEgY2xpY2sgb24gaXQgcmVhZHMgYXMgYSBjbGljayBvbiB0aGF0IHNlcmllcy4gQVxuLy8gc3RhY2tlZCBzZXJpZXMga2VlcHMgaXRzIGxpbmUgd2hvbGUgKGEgc2VnbWVudCB3b3VsZCBzdGFjayBvbiB0b3Agb2YgaXQpLFxuLy8gYW5kIGEgZ2FwIHN0YXlzIGEgZ2FwLiBSZXBsYWNlcyBlYWNoIHN1Y2ggc2VyaWVzIGluIGBzZXJpZXNgIGFuZCByZXR1cm5zXG4vLyB0aGUgc2VnbWVudHMuXG5mdW5jdGlvbiBwYXJ0aWFsU2VnbWVudHMoc2VyaWVzOiBTZXJpZXNPcHRpb25bXSwgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMpOiBQYXJ0aWFsU2VnbWVudFtdIHtcbiAgY29uc3QgbGFzdCA9IGFubm90YXRpb25zLnBhcnRpYWxJbmRleDtcbiAgY29uc3Qgc2VnbWVudHM6IFBhcnRpYWxTZWdtZW50W10gPSBbXTtcblxuICBzZXJpZXMuZm9yRWFjaCgob3B0aW9uLCBvd25lcikgPT4ge1xuICAgIGNvbnN0IGRyYXduID0gb3B0aW9uIGFzIERyYXduU2VyaWVzO1xuICAgIGNvbnN0IGRhdGEgPSBkcmF3bi5kYXRhID8/IFtdO1xuICAgIGNvbnN0IGNvbG9yID0gYW5ub3RhdGlvbnMuY29sb3JzPy5bb3duZXJdO1xuXG4gICAgaWYgKGxhc3QgPT09IG51bGwgfHwgbGFzdCA8IDEgfHwgbGFzdCAhPT0gZGF0YS5sZW5ndGggLSAxIHx8IGRyYXduLnR5cGUgIT09ICdsaW5lJyB8fCBkcmF3bi5zdGFjayB8fCAhY29sb3JcbiAgICAgIHx8IHBvaW50VmFsdWUoZGF0YVtsYXN0IC0gMV0pID09PSBudWxsIHx8IHBvaW50VmFsdWUoZGF0YVtsYXN0XSkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXJpZXNbb3duZXJdID0geyAuLi5vcHRpb24sIGRhdGE6IFsuLi5kYXRhLnNsaWNlKDAsIGxhc3QpLCBudWxsXSB9IGFzIFNlcmllc09wdGlvbjtcbiAgICBzZWdtZW50cy5wdXNoKHsgb3duZXIsIHNlcmllczogeyAuLi5zZWdtZW50U2VyaWVzKG9wdGlvbiwgY29sb3IsIGxhc3QpLCBpZDogcGFydGlhbFNlZ21lbnRJZChvd25lcikgfSBhcyBTZXJpZXNPcHRpb24gfSk7XG4gIH0pO1xuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuLy8gVGhlIGRhc2hlZCBzZWdtZW50IGZyb20gdGhlIHBvaW50IGJlZm9yZSB0aGUgbGFzdCB0byB0aGUgbGFzdCBvbmUsIHdoaWNoXG4vLyBrZWVwcyBpdHMgbWFya3MgYW5kIGl0cyBkYXRhIGxhYmVsLiBUaGUgcG9pbnQgYmVmb3JlIGl0IGlzIGRyYXduLCBhbmRcbi8vIGxhYmVsZWQsIGJ5IHRoZSBzZXJpZXMgaXRzZWxmLlxuZnVuY3Rpb24gc2VnbWVudFNlcmllcyhvcHRpb246IFNlcmllc09wdGlvbiwgY29sb3I6IHN0cmluZywgbGFzdDogbnVtYmVyKTogU2VyaWVzT3B0aW9uIHtcbiAgY29uc3QgZHJhd24gPSBvcHRpb24gYXMgRHJhd25TZXJpZXM7XG4gIGNvbnN0IGRhdGEgPSBkcmF3bi5kYXRhID8/IFtdO1xuXG4gIHJldHVybiB7XG4gICAgLi4ub3B0aW9uLFxuICAgIG1hcmtMaW5lOiB1bmRlZmluZWQsXG4gICAgbGluZVN0eWxlOiB7IC4uLmRyYXduLmxpbmVTdHlsZSwgY29sb3IsIHR5cGU6IFBBUlRJQUxfTElORV9TVFlMRSB9LFxuICAgIGRhdGE6IGRhdGEubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBsYXN0KSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXggPT09IGxhc3QgLSAxID8geyB2YWx1ZTogcG9pbnRWYWx1ZShpdGVtKSwgc3ltYm9sOiAnbm9uZScsIGxhYmVsOiB7IHNob3c6IGZhbHNlIH0gfSA6IG51bGw7XG4gICAgfSksXG4gIH0gYXMgU2VyaWVzT3B0aW9uO1xufVxuXG4vLyBBIHBhcnRpYWwgc2VnbWVudCdzIHNlcmllcyBpZCwgZnJvbSB0aGUgaW5kZXggb2YgdGhlIHNlcmllcyBpdCBjb250aW51ZXMuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbFNlZ21lbnRJZChvd25lcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1BBUlRJQUxfU0VHTUVOVF9JRH0ke293bmVyfWA7XG59XG5cbi8vIFRoZSBpbmRleCBvZiB0aGUgc2VyaWVzIGEgcGFydGlhbCBzZWdtZW50IGNvbnRpbnVlcywgcmVhZCBmcm9tIGl0cyBpZDtcbi8vIG51bGwgZm9yIGFueSBvdGhlciBpZC5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsU2VnbWVudE93bmVyKHNlcmllc0lkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmICghc2VyaWVzSWQ/LnN0YXJ0c1dpdGgoUEFSVElBTF9TRUdNRU5UX0lEKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3duZXIgPSBOdW1iZXIoc2VyaWVzSWQuc2xpY2UoUEFSVElBTF9TRUdNRU5UX0lELmxlbmd0aCkpO1xuXG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG93bmVyKSAmJiBvd25lciA+PSAwID8gb3duZXIgOiBudWxsO1xufVxuXG4vLyBBIHBvaW50J3MgcGxvdHRlZCB2YWx1ZSwgd2hldGhlciBpdCBpcyBhIGJhcmUgbnVtYmVyIG9yIGFuIG9iamVjdC5cbmZ1bmN0aW9uIHBvaW50VmFsdWUoaXRlbTogU2VyaWVzRGF0YUl0ZW08RGF0YUxhYmVsUG9zaXRpb24+IHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyA/IGl0ZW0gOiBpdGVtLnZhbHVlO1xufVxuXG4vLyBIb3cgYW4gb3V0cHV0IHNlcmllcyB3cml0ZXMgYSB2YWx1ZTogZm9ybWF0T3V0cHV0VmFsdWUncyBydWxlcyAoYSBzaWduZWRcbi8vIGNoYW5nZSwgcG9pbnRzLCAn4oCUJyB3aXRoIHRoZSBuby1iYXNlbGluZSB0aXRsZSwgcmFua3MgYW5kIHNoYXJlcykgd2l0aCBpdHNcbi8vIG1lYXN1cmUncyBmb3JtYXQgYW5kIHRoZSBjb21wYXJpc29uJ3MgZmxvb3IuIEdpdmVuIHRoZSBwb2ludCdzIGluZGV4IChhXG4vLyB0b29sdGlwLCBhIGRhdGEgbGFiZWwpLCBhIGNoYW5nZSByZWFkcyBpdHMgcHJpb3IgdGhlcmUsIHdoaWNoIHRlbGxzIGFcbi8vIG1pc3NpbmcgYmFzZWxpbmUgZnJvbSBhIHplcm8gb25lLiBUaGUgdGl0bGUgc2F5cyB3aHkgYSB2YWx1ZSByZWFkcyAn4oCUJyBvclxuLy8gJ24vYScuXG5mdW5jdGlvbiBvdXRwdXRWYWx1ZShcbiAgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMsXG4gIGluZGV4OiBudW1iZXIsXG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6ICh2YWx1ZTogdW5rbm93biwgZGF0YUluZGV4PzogbnVtYmVyKSA9PiBGb3JtYXR0ZWRPdXRwdXRWYWx1ZSB7XG4gIGNvbnN0IG91dHB1dCA9IGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdO1xuICBjb25zdCBwcmlvcnMgPSBhbm5vdGF0aW9ucy5wcmlvcnNbaW5kZXhdO1xuXG4gIHJldHVybiAodmFsdWUsIGRhdGFJbmRleCkgPT4gZm9ybWF0T3V0cHV0VmFsdWUoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlLCBvdXRwdXQsIG1lYXN1cmUsIGNvbnRleHQsIHtcbiAgICBtZWFzdXJlU3BlYzogYW5ub3RhdGlvbnMubWVhc3VyZVNwZWNzW2luZGV4XSxcbiAgICBmbG9vcjogYW5ub3RhdGlvbnMuY29tcGFyaXNvbj8uZmxvb3IgPz8gbnVsbCxcbiAgICAuLi4ocHJpb3JzICYmIGRhdGFJbmRleCAhPT0gdW5kZWZpbmVkID8geyBwcmlvcjogcHJpb3JzW2RhdGFJbmRleF0gPz8gbnVsbCB9IDoge30pLFxuICB9KTtcbn1cblxuLy8gQW4gb3V0cHV0IHZhbHVlJ3MgdGV4dCBhbG9uZSwgZm9yIGEgc2VyaWVzJyBvd24gdG9vbHRpcCBhbmQgaXRzIGRhdGEgbGFiZWxzLlxuZnVuY3Rpb24gb3V0cHV0V3JpdGVyKFxuICBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucyxcbiAgaW5kZXg6IG51bWJlcixcbiAgbWVhc3VyZTogQ2hhcnRNZWFzdXJlLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuKTogKHZhbHVlOiB1bmtub3duLCBkYXRhSW5kZXg/OiBudW1iZXIpID0+IHN0cmluZyB7XG4gIGNvbnN0IHdyaXRlID0gb3V0cHV0VmFsdWUoYW5ub3RhdGlvbnMsIGluZGV4LCBtZWFzdXJlLCBjb250ZXh0KTtcblxuICByZXR1cm4gKHZhbHVlLCBkYXRhSW5kZXgpID0+IHdyaXRlKHZhbHVlLCBkYXRhSW5kZXgpLnRleHQ7XG59XG5cbmZ1bmN0aW9uIG91dHB1dExhYmVsRm9ybWF0dGVyKHdyaXRlOiAodmFsdWU6IHVua25vd24sIGRhdGFJbmRleD86IG51bWJlcikgPT4gc3RyaW5nKTogRGF0YUxhYmVsRm9ybWF0dGVyIHtcbiAgcmV0dXJuIChwYXJhbXMpID0+IHdyaXRlKGRhdGFMYWJlbFZhbHVlKHBhcmFtcyksIHBhcmFtcy5kYXRhSW5kZXgpO1xufVxuXG4vLyBUaGUgY2hhcnQncyBzZXJpZXMgYXMgaXRzIHZhbHVlIGF4ZXMgcmVhZCB0aGVtOiBhbiBvdXRwdXQgc2VyaWVzIHdob3NlXG4vLyBzbG90IG5hbWVzIG5vIGZvcm1hdCB0YWtlcyBpdHMgb3V0cHV0J3MgKG91dHB1dEF4aXNNZWFzdXJlKS5cbmZ1bmN0aW9uIGFubm90YXRlZEF4aXNTZXJpZXMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcywgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMpOiBFeHRyYWN0ZWRDaGFydFNlcmllcyB7XG4gIHJldHVybiB7XG4gICAgLi4uZXh0cmFjdGVkLFxuICAgIHNlcmllczogZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcywgaW5kZXgpID0+ICh7XG4gICAgICAuLi5zZXJpZXMsXG4gICAgICBtZWFzdXJlOiBvdXRwdXRBeGlzTWVhc3VyZShzZXJpZXMubWVhc3VyZSwgYW5ub3RhdGlvbnMub3V0cHV0c1tpbmRleF0sIGFubm90YXRpb25zLm1lYXN1cmVTcGVjc1tpbmRleF0pLFxuICAgIH0pKSxcbiAgfTtcbn1cblxuLy8gVGhlIGZvcm1hdCBhbiBvdXRwdXQncyBheGlzIHJlYWRzIHdoZW4gaXRzIHNsb3QgbmFtZXMgbm9uZTogYSByYW5rJ3Mgd2hvbGVcbi8vIG51bWJlcnMsIGEgMC0xIGZyYWN0aW9uJ3MgcGVyY2VudCwgYW5kIGEgY29tcGFyZWQgb3Igd2luZG93ZWQgdmFsdWUgaXRzXG4vLyBtZWFzdXJlJ3MgZm9ybWF0LiBUaGUgc2xvdCdzIG93biBwcmVjaXNpb24gYW5kIHVuaXRzIHN0aWxsIGFwcGx5LlxuZnVuY3Rpb24gb3V0cHV0QXhpc01lYXN1cmUoXG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSxcbiAgb3V0cHV0OiBPdXRwdXRNZXRhIHwgbnVsbCxcbiAgbWVhc3VyZVNwZWM6IENoYXJ0TWVhc3VyZSB8IHVuZGVmaW5lZCxcbik6IENoYXJ0TWVhc3VyZSB7XG4gIGlmICghb3V0cHV0IHx8IG5hbWVzVmFsdWVGb3JtYXQobWVhc3VyZSkpIHtcbiAgICByZXR1cm4gbWVhc3VyZTtcbiAgfVxuXG4gIGxldCBiYXNlOiBOdW1iZXJGb3JtYXRTcGVjIHwgbnVsbCA9IG1lYXN1cmVTcGVjICYmIGhhc051bWJlckZvcm1hdChtZWFzdXJlU3BlYykgPyBmb3JtYXRLZXlzKG1lYXN1cmVTcGVjKSA6IG51bGw7XG4gIGlmIChvdXRwdXQua2luZCA9PT0gJ3JhbmsnKSB7XG4gICAgYmFzZSA9IFJBTktfQVhJU19GT1JNQVQ7XG4gIH0gZWxzZSBpZiAoaXNGcmFjdGlvbk91dHB1dChvdXRwdXQpKSB7XG4gICAgYmFzZSA9IEZSQUNUSU9OX0FYSVNfRk9STUFUO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VcbiAgICA/IHsgLi4ubWVhc3VyZSwgLi4uYmFzZSwgLi4uZm9ybWF0S2V5cyh7IHByZWNpc2lvbjogbWVhc3VyZS5wcmVjaXNpb24sIHVuaXRzOiBtZWFzdXJlLnVuaXRzIH0pIH0gYXMgQ2hhcnRNZWFzdXJlXG4gICAgOiBtZWFzdXJlO1xufVxuXG5mdW5jdGlvbiBuYW1lc1ZhbHVlRm9ybWF0KHNwZWM6IE51bWJlckZvcm1hdFNwZWMpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoUmVwb3J0VmFsdWVGb3JtYXQpLnNvbWUoKGZvcm1hdCkgPT4gZm9ybWF0ID09PSBzcGVjLmZvcm1hdCk7XG59XG5cbi8vIEEgc3BlYydzIG51bWJlci1mb3JtYXQga2V5cyB0aGF0IGFyZSBzZXQuXG5mdW5jdGlvbiBmb3JtYXRLZXlzKHNwZWM6IE51bWJlckZvcm1hdFNwZWMpOiBOdW1iZXJGb3JtYXRTcGVjIHtcbiAgcmV0dXJuIHtcbiAgICAuLi4oKHNwZWMuZm9ybWF0ID8/IG51bGwpICE9PSBudWxsID8geyBmb3JtYXQ6IHNwZWMuZm9ybWF0IH0gOiB7fSksXG4gICAgLi4uKChzcGVjLnByZWNpc2lvbiA/PyBudWxsKSAhPT0gbnVsbCA/IHsgcHJlY2lzaW9uOiBzcGVjLnByZWNpc2lvbiB9IDoge30pLFxuICAgIC4uLigoc3BlYy51bml0cyA/PyBudWxsKSAhPT0gbnVsbCA/IHsgdW5pdHM6IHNwZWMudW5pdHMgfSA6IHt9KSxcbiAgfTtcbn1cblxuLy8gRWFjaCB2YWx1ZSBheGlzJ3MgY29udGV4dDogb25lIHRoYXQgcGxvdHMgb25seSAwLTEgZnJhY3Rpb25zIHJlYWRzIHRoZW0gYXNcbi8vIHJhdGlvcywgd2hhdGV2ZXIgdGhlIHJlcG9ydCdzIHBlcmNlbnRGb3JtYXQgc2F5cyBvZiBpdHMgc3RvcmVkIHZhbHVlcy5cbmZ1bmN0aW9uIGFubm90YXRlZEF4aXNDb250ZXh0cyhcbiAgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMsXG4gIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuKTogUmVwb3J0Rm9ybWF0Q29udGV4dFtdIHtcbiAgcmV0dXJuIChbMCwgMV0gYXMgY29uc3QpLm1hcCgoYXhpc0luZGV4KSA9PiAoZXZlcnlPbkF4aXMoYW5ub3RhdGlvbnMub3V0cHV0cywgYXhpc0luZGV4ZXMsIGF4aXNJbmRleCwgaXNGcmFjdGlvbk91dHB1dClcbiAgICA/IHsgLi4uY29udGV4dCwgcmF0aW9QZXJjZW50OiB0cnVlIH1cbiAgICA6IGNvbnRleHQpKTtcbn1cblxuLy8gV2hpY2ggdmFsdWUgYXhlcywgYnkgaW5kZXgsIHBsb3Qgbm90aGluZyBidXQgcmFua3MuXG5mdW5jdGlvbiByYW5rQXhpc0ZsYWdzKG91dHB1dHM6IChPdXRwdXRNZXRhIHwgbnVsbClbXSwgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10pOiBib29sZWFuW10ge1xuICByZXR1cm4gKFswLCAxXSBhcyBjb25zdCkubWFwKChheGlzSW5kZXgpID0+IGV2ZXJ5T25BeGlzKG91dHB1dHMsIGF4aXNJbmRleGVzLCBheGlzSW5kZXgsIGlzUmFua1Bvc2l0aW9uKSk7XG59XG5cbi8vIEhvdyBhIGNoYXJ0IHRoYXQgcGxvdHMgYSBwcmlvciBzZXJpZXMgY29sb3JzIGVhY2ggc2VyaWVzLCBmb3IgdGhlXG4vLyBQb3dlclBvaW50IGV4cG9ydDogZXZlcnkgc2VyaWVzJyBjb2xvciBhcyBiYXJlIGhleCwgYSBwcmlvciB0YWtpbmcgaXRzXG4vLyBjdXJyZW50IHNlcmllcycgY29sb3IgYW5kIG5vIHBhbGV0dGUgY29sb3Igb2YgaXRzIG93biAoYW5ub3RhdGVkQ29sb3JzKSxcbi8vIGFuZCB3aGljaCBzZXJpZXMgYXJlIHByaW9ycywgd2hpY2ggYSBsaW5lIGRyYXdzIGRhc2hlZC4gbnVsbCB3aGVuIHRoZSBjaGFydFxuLy8gcGxvdHMgbm8gcHJpb3Igc2VyaWVzLCBhbmQgb24gYSBjb2xvckJ5IGNoYXJ0OyBpdHMgc2VyaWVzIGtlZXAgc2VyaWVzSGV4LlxuZXhwb3J0IGZ1bmN0aW9uIHByaW9yU2VyaWVzU3R5bGVzKFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuKTogeyBjb2xvcnM6IHN0cmluZ1tdOyBwcmlvcnM6IGJvb2xlYW5bXSB9IHwgbnVsbCB7XG4gIGNvbnN0IGFubm90YXRpb25zID0gY2hhcnRBbm5vdGF0aW9ucyhjb25maWcsIGRhdGEsIGV4dHJhY3RlZCwgaXNDb2xvckJ5KGNvbmZpZykpO1xuXG4gIGlmICghYW5ub3RhdGlvbnM/LmNvbG9ycyB8fCAhYW5ub3RhdGlvbnMucHJpb3JTZXJpZXMuc29tZSgocHJpb3IpID0+IHByaW9yKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb2xvcnM6IGFubm90YXRpb25zLmNvbG9ycy5tYXAoKGNvbG9yKSA9PiBjb2xvci5yZXBsYWNlKCcjJywgJycpKSxcbiAgICBwcmlvcnM6IGFubm90YXRpb25zLnByaW9yU2VyaWVzLFxuICB9O1xufVxuXG4vLyBXaGljaCB2YWx1ZSBheGVzLCBieSBpbmRleCwgcGxvdCBub3RoaW5nIGJ1dCByYW5rcywgd2hpY2ggdGhlIGNoYXJ0IGRyYXdzXG4vLyBpbnZlcnRlZCB3aXRoIHJhbmsgMSBhdCB0aGUgdG9wLiBTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludCBleHBvcnQuXG5leHBvcnQgZnVuY3Rpb24gcmFua1ZhbHVlQXhlcyhleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLCBkYXRhOiBDb21wb25lbnREYXRhLCBjb25maWc6IENoYXJ0Q29uZmlnKTogYm9vbGVhbltdIHtcbiAgcmV0dXJuIHJhbmtBeGlzRmxhZ3MoXG4gICAgZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gZGF0YS5vdXRwdXRzPy5bc2VyaWVzLm1lYXN1cmUuY29sdW1uXSA/PyBudWxsKSxcbiAgICBzZXJpZXNBeGlzSW5kZXhlcyhleHRyYWN0ZWQsIGNvbmZpZyksXG4gICk7XG59XG5cbi8vIFdoZXRoZXIgYW4gYXhpcyBoYXMgc2VyaWVzIGFuZCBldmVyeSBvbmUgb2YgdGhlbSBwYXNzZXMgdGhlIHRlc3QuXG5mdW5jdGlvbiBldmVyeU9uQXhpcyhcbiAgb3V0cHV0czogKE91dHB1dE1ldGEgfCBudWxsKVtdLFxuICBheGlzSW5kZXhlczogVmFsdWVBeGlzSW5kZXhbXSxcbiAgYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCxcbiAgdGVzdDogKG91dHB1dDogT3V0cHV0TWV0YSkgPT4gYm9vbGVhbixcbik6IGJvb2xlYW4ge1xuICBjb25zdCBvbkF4aXMgPSBvdXRwdXRzLmZpbHRlcigoXywgaW5kZXgpID0+IGF4aXNJbmRleGVzW2luZGV4XSA9PT0gYXhpc0luZGV4KTtcblxuICByZXR1cm4gb25BeGlzLmxlbmd0aCA+IDAgJiYgb25BeGlzLmV2ZXJ5KChvdXRwdXQpID0+ICEhb3V0cHV0ICYmIHRlc3Qob3V0cHV0KSk7XG59XG5cbi8vIEEgc2hhcmUgYW5kIGEgcGVyY2VudCBjaGFuZ2UgYXJlIDAtMSBmcmFjdGlvbnMsIHdoYXRldmVyIHBlcmNlbnRGb3JtYXQgc2F5cy5cbmZ1bmN0aW9uIGlzRnJhY3Rpb25PdXRwdXQob3V0cHV0OiBPdXRwdXRNZXRhKTogYm9vbGVhbiB7XG4gIHJldHVybiBvdXRwdXQua2luZCA9PT0gJ3NoYXJlJyB8fCBvdXRwdXQucm9sZSA9PT0gJ3BlcmNlbnRfY2hhbmdlJztcbn1cblxuLy8gQSB2YWx1ZSBheGlzJ3MgdGljayBsYWJlbHMgd2hlbiBldmVyeSBzZXJpZXMgb24gaXQgaXMgYSBjaGFuZ2Ugb2YgYSByYXRlXG4vLyAoYSBzaGFyZSdzLCBvciBhIHBlcmNlbnQtZm9ybWF0IHZhbHVlJ3MpOiBzaWduZWQgcGVyY2VudGFnZSBwb2ludHMsIGFzIHRoZVxuLy8gc2VyaWVzJyB0b29sdGlwcyBhbmQgZGF0YSBsYWJlbHMgd3JpdGUgdGhlbSAoJys1LjAgcHAnKS4gbnVsbCBmb3IgYW55IG90aGVyXG4vLyBheGlzLlxuZnVuY3Rpb24gcG9pbnRzQXhpc0xhYmVsKFxuICBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucyxcbiAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10sXG4gIGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXgsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBWYWx1ZUF4aXNMYWJlbCB8IG51bGwge1xuICBjb25zdCBvbkF4aXMgPSBleHRyYWN0ZWQuc2VyaWVzXG4gICAgLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KVxuICAgIC5maWx0ZXIoKGluZGV4KSA9PiBheGlzSW5kZXhlc1tpbmRleF0gPT09IGF4aXNJbmRleCk7XG4gIGNvbnN0IHBvaW50cyA9IG9uQXhpcy5sZW5ndGggPiAwICYmIG9uQXhpcy5ldmVyeSgoaW5kZXgpID0+IGlzUG9pbnRzQ2hhbmdlKFxuICAgIGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdLFxuICAgIG91dHB1dEF4aXNNZWFzdXJlKGV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdLm1lYXN1cmUsIGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdLCBhbm5vdGF0aW9ucy5tZWFzdXJlU3BlY3NbaW5kZXhdKSxcbiAgKSk7XG5cbiAgaWYgKCFwb2ludHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHdyaXRlID0gb3V0cHV0V3JpdGVyKGFubm90YXRpb25zLCBvbkF4aXNbMF0sIGV4dHJhY3RlZC5zZXJpZXNbb25BeGlzWzBdXS5tZWFzdXJlLCBjb250ZXh0KTtcblxuICByZXR1cm4geyBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiB3cml0ZSh2YWx1ZSkgfTtcbn1cblxuLy8gQSBjaGFuZ2Ugb2YgYSByYXRlLCB3aGljaCBwcmludHMgaW4gcGVyY2VudGFnZSBwb2ludHM6IGEgc2hhcmUncyBjaGFuZ2UsIG9yXG4vLyB0aGUgY2hhbmdlIG9mIGEgdmFsdWUgd2hvc2UgZm9ybWF0IChpdHMgc2xvdCdzLCBlbHNlIGl0cyBtZWFzdXJlJ3MpIGlzIGFcbi8vIHBlcmNlbnQuXG5mdW5jdGlvbiBpc1BvaW50c0NoYW5nZShvdXRwdXQ6IE91dHB1dE1ldGEgfCBudWxsLCBheGlzTWVhc3VyZTogQ2hhcnRNZWFzdXJlKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIW91dHB1dCAmJiBvdXRwdXQucm9sZSA9PT0gJ2NoYW5nZScgJiYgb3V0cHV0LmtpbmQgIT09ICdyYW5rJ1xuICAgICYmIChvdXRwdXQua2luZCA9PT0gJ3NoYXJlJyB8fCBheGlzTWVhc3VyZS5mb3JtYXQgPT09IFJlcG9ydFZhbHVlRm9ybWF0LlBlcmNlbnQpO1xufVxuXG4vLyBBIHJhbmssIGN1cnJlbnQgb3IgcHJpb3I7IGEgcmFuayBjaGFuZ2UgaXMgYSBkaWZmZXJlbmNlLCBub3QgYSBwb3NpdGlvbi5cbmZ1bmN0aW9uIGlzUmFua1Bvc2l0aW9uKG91dHB1dDogT3V0cHV0TWV0YSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb3V0cHV0LmtpbmQgPT09ICdyYW5rJyAmJiBvdXRwdXQucm9sZSAhPT0gJ2NoYW5nZSc7XG59XG5cbmZ1bmN0aW9uIGFubm90YXRlZENoYXJ0VG9vbHRpcChzb3VyY2U6IEFubm90YXRlZFRvb2x0aXBTb3VyY2UgfCBudWxsKSB7XG4gIHJldHVybiBzb3VyY2VcbiAgICA/IHtcbiAgICAgIHRyaWdnZXI6ICdheGlzJyBhcyBjb25zdCxcbiAgICAgIGZvcm1hdHRlcjogKHBhcmFtczogVG9vbHRpcENvbXBvbmVudEZvcm1hdHRlckNhbGxiYWNrUGFyYW1zKSA9PiBhbm5vdGF0ZWRUb29sdGlwKHBhcmFtcywgc291cmNlKSxcbiAgICB9XG4gICAgOiBudWxsO1xufVxuXG4vLyBUaGUgcGVyaW9kLCB3aXRoICd0byBkYXRlJyB3aGVuIGl0IGlzIG5vdCBvdmVyIHlldCwgdGhlbiBlYWNoIHNlcmllcyBzaG93blxuLy8gKGEgbGVnZW5kIGNhbiBoaWRlIHNvbWUpOiBpdHMgdmFsdWUgd3JpdHRlbiBieSB3aGF0IGl0IGlzLCBhbmQgd2hhdCBpdFxuLy8gY292ZXJzLiBBIHBhcnRpYWwgc2VnbWVudCBzcGVha3MgZm9yIGl0cyBzZXJpZXMuIE5hbWVzIGFuZCB2YWx1ZXMgY29tZSBmcm9tXG4vLyB0aGUgZGF0YSBhbmQgdGhlIGNvbmZpZywgYW5kIEVDaGFydHMgc2V0cyB0aGUgdG9vbHRpcCBhcyBIVE1MLCBzbyBib3RoIGFyZVxuLy8gZXNjYXBlZC5cbmZ1bmN0aW9uIGFubm90YXRlZFRvb2x0aXAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMsIHNvdXJjZTogQW5ub3RhdGVkVG9vbHRpcFNvdXJjZSk6IHN0cmluZyB7XG4gIGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zIDogW3BhcmFtc107XG4gIGNvbnN0IGRhdGFJbmRleCA9IGl0ZW1zWzBdPy5kYXRhSW5kZXggPz8gMDtcbiAgY29uc3QgY291bnQgPSBzb3VyY2UuZXh0cmFjdGVkLnNlcmllcy5sZW5ndGg7XG4gIGNvbnN0IG1hcmtlcnMgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHNlcmllc0luZGV4ID0gaXRlbS5zZXJpZXNJbmRleCA/PyAtMTtcbiAgICBjb25zdCBvd25lciA9IHNlcmllc0luZGV4IDwgY291bnQgPyBzZXJpZXNJbmRleCA6IHNvdXJjZS5vd25lcnNbc2VyaWVzSW5kZXggLSBjb3VudF07XG5cbiAgICBpZiAob3duZXIgIT09IHVuZGVmaW5lZCAmJiBvd25lciA+PSAwICYmICFtYXJrZXJzLmhhcyhvd25lcikpIHtcbiAgICAgIG1hcmtlcnMuc2V0KG93bmVyLCB0eXBlb2YgaXRlbS5tYXJrZXIgPT09ICdzdHJpbmcnID8gaXRlbS5tYXJrZXIgOiAnJyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmFtZWRQcmlvcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgbGluZXMgPSBbLi4ubWFya2Vycy5lbnRyaWVzKCldXG4gICAgLnNvcnQoKFtmaXJzdF0sIFtzZWNvbmRdKSA9PiBmaXJzdCAtIHNlY29uZClcbiAgICAubWFwKChbaW5kZXgsIG1hcmtlcl0pID0+IGFubm90YXRlZFRvb2x0aXBMaW5lKHNvdXJjZSwgaW5kZXgsIGRhdGFJbmRleCwgbWFya2VyLCBuYW1lZFByaW9ycykpO1xuXG4gIHJldHVybiBbYW5ub3RhdGVkVG9vbHRpcEhlYWRpbmcoc291cmNlLCBkYXRhSW5kZXgpLCAuLi5saW5lc10uam9pbignPGJyLz4nKTtcbn1cblxuZnVuY3Rpb24gYW5ub3RhdGVkVG9vbHRpcEhlYWRpbmcoc291cmNlOiBBbm5vdGF0ZWRUb29sdGlwU291cmNlLCBkYXRhSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGNhdGVnb3J5ID0gc291cmNlLmV4dHJhY3RlZC5jYXRlZ29yaWVzW2RhdGFJbmRleF0gPz8gJyc7XG4gIGNvbnN0IHBlcmlvZCA9IHNvdXJjZS5ncmFudWxhcml0eVxuICAgID8gZm9ybWF0UGVyaW9kTGFiZWwoY2F0ZWdvcnksIHNvdXJjZS5ncmFudWxhcml0eSwgdHJ1ZSwgc291cmNlLmNvbnRleHQubG9jYWxlLCBzb3VyY2UuZGF0ZUxhYmVsKVxuICAgIDogY2F0ZWdvcnk7XG5cbiAgcmV0dXJuIGVzY2FwZUh0bWwoZGF0YUluZGV4ID09PSBzb3VyY2UuYW5ub3RhdGlvbnMucGFydGlhbEluZGV4ID8gYCR7cGVyaW9kfSAoJHtQQVJUSUFMX1BFUklPRF9URVhUfSlgIDogcGVyaW9kKTtcbn1cblxuLy8gJ+KXjyBSZXZlbnVlICh2cyBwcmV2aW91cyBtb250aCk6ICQ4MTMgwrcgQXVnIDEg4oCTIDE1LCAyMDI2JywgYW5kIHdoeSBhIHZhbHVlXG4vLyByZWFkcyAn4oCUJyBvciAnbi9hJyB3aGVuIGl0IGRvZXMgKCdObyBiYXNlbGluZTogbm8gZGF0YSBiZWZvcmUgSnVuIDEwLCAyMDI2JykuXG4vLyBBIHZhbHVlIGNvbXBhcmVkIHdpdGggYSBwcmlvciB0aGUgY2hhcnQgZG9lcyBub3QgcGxvdCBuYW1lcyB0aGF0IHByaW9yXG4vLyBvbmNlLCBvbiB0aGUgZmlyc3QgbGluZSBzaG93biB0aGF0IGlzIGNvbXBhcmVkIHdpdGggaXQ6ICdSYXRlICUgY2hhbmdlICh2c1xuLy8gcHJldmlvdXMgbW9udGgpOiAtMTAlIMK3IHZzIDUwJSAoU2VwIDEg4oCTIDIsIDIwMjYpJy4gbmFtZWRQcmlvcnMgaG9sZHMgdGhlXG4vLyBwcmlvcnMgYWxyZWFkeSBuYW1lZC5cbmZ1bmN0aW9uIGFubm90YXRlZFRvb2x0aXBMaW5lKFxuICBzb3VyY2U6IEFubm90YXRlZFRvb2x0aXBTb3VyY2UsXG4gIGluZGV4OiBudW1iZXIsXG4gIGRhdGFJbmRleDogbnVtYmVyLFxuICBtYXJrZXI6IHN0cmluZyxcbiAgbmFtZWRQcmlvcnM6IFNldDxzdHJpbmc+LFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VyaWVzID0gc291cmNlLmV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdO1xuICBjb25zdCB2YWx1ZSA9IHNlcmllcy52YWx1ZXNbZGF0YUluZGV4XSA/PyBudWxsO1xuICBjb25zdCBmb3JtYXR0ZWQgPSBzb3VyY2UuYW5ub3RhdGlvbnMub3V0cHV0c1tpbmRleF1cbiAgICA/IG91dHB1dFZhbHVlKHNvdXJjZS5hbm5vdGF0aW9ucywgaW5kZXgsIHNlcmllcy5tZWFzdXJlLCBzb3VyY2UuY29udGV4dCkodmFsdWUsIGRhdGFJbmRleClcbiAgICA6IHsgdGV4dDogc2VyaWVzVG9vbHRpcChzZXJpZXMubWVhc3VyZSwgc291cmNlLmNvbnRleHQpLnZhbHVlRm9ybWF0dGVyKHZhbHVlKSwgdGl0bGU6IG51bGwgfTtcbiAgY29uc3QgbGFuZVByaW9yID0gc291cmNlLmFubm90YXRpb25zLmxhbmVQcmlvcnNbaW5kZXhdO1xuICBjb25zdCBjb21wYXJlZCA9IGxhbmVQcmlvciAmJiAhbmFtZWRQcmlvcnMuaGFzKGxhbmVQcmlvci5rZXkpXG4gICAgPyBjb21wYXJlZFByaW9yRGV0YWlsKHNvdXJjZSwgaW5kZXgsIGxhbmVQcmlvciwgZGF0YUluZGV4KVxuICAgIDogJyc7XG4gIGlmIChsYW5lUHJpb3IpIHtcbiAgICBuYW1lZFByaW9ycy5hZGQobGFuZVByaW9yLmtleSk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IFtmb3JtYXR0ZWQudGV4dCwgc2VyaWVzRGV0YWlsKHNvdXJjZSwgaW5kZXgsIGRhdGFJbmRleCksIGNvbXBhcmVkLCBmb3JtYXR0ZWQudGl0bGUgPz8gJyddO1xuXG4gIHJldHVybiBgJHttYXJrZXJ9ICR7ZXNjYXBlSHRtbChzZXJpZXMubmFtZSl9OiAke2VzY2FwZUh0bWwocGFydHMuZmlsdGVyKChwYXJ0KSA9PiAhIXBhcnQpLmpvaW4oVE9PTFRJUF9ERVRBSUxfU0VQQVJBVE9SKSl9YDtcbn1cblxuLy8gVGhlIHByaW9yIGEgdmFsdWUgaXMgY29tcGFyZWQgd2l0aCwgd2hlbiB0aGUgY2hhcnQgZG9lcyBub3QgcGxvdCBpdDogaXRzXG4vLyB2YWx1ZSBpbiBpdHMgbWVhc3VyZSdzIGZvcm1hdCwgYW5kIGl0cyBkYXlzICgndnMgNTAlIChTZXAgMSDigJMgMiwgMjAyNiknKS5cbi8vIFRoZSBtZWFzdXJlJ3MgZm9ybWF0IGlzIHRoZSBjdXJyZW50IHNlcmllcycgd2hlbiB0aGUgY2hhcnQgcGxvdHMgaXQsIGVsc2Vcbi8vIGEgY2hhbmdlIHNsb3QncyBvd24gZXhwbGljaXQgZm9ybWF0IChhIGNoYW5nZSBpcyBpbiBpdHMgbWVhc3VyZSdzIHVuaXRzKS5cbmZ1bmN0aW9uIGNvbXBhcmVkUHJpb3JEZXRhaWwoXG4gIHNvdXJjZTogQW5ub3RhdGVkVG9vbHRpcFNvdXJjZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgbGFuZVByaW9yOiBMYW5lUHJpb3IsXG4gIGRhdGFJbmRleDogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgYW5ub3RhdGlvbnMgPSBzb3VyY2UuYW5ub3RhdGlvbnM7XG4gIGNvbnN0IG1lYXN1cmUgPSBzb3VyY2UuZXh0cmFjdGVkLnNlcmllc1tpbmRleF0ubWVhc3VyZTtcbiAgY29uc3QgbWVhc3VyZVNwZWMgPSBhbm5vdGF0aW9ucy5tZWFzdXJlU3BlY3NbaW5kZXhdXG4gICAgPz8gKGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdPy5yb2xlICE9PSAncGVyY2VudF9jaGFuZ2UnICYmIG5hbWVzVmFsdWVGb3JtYXQobWVhc3VyZSkgPyBtZWFzdXJlIDogbnVsbCk7XG4gIGNvbnN0IHRleHQgPSBmb3JtYXRPdXRwdXRWYWx1ZShsYW5lUHJpb3IudmFsdWVzW2RhdGFJbmRleF0gPz8gbnVsbCwgbGFuZVByaW9yLm91dHB1dCwgbnVsbCwgc291cmNlLmNvbnRleHQsIHtcbiAgICBtZWFzdXJlU3BlYyxcbiAgICBmbG9vcjogYW5ub3RhdGlvbnMuY29tcGFyaXNvbj8uZmxvb3IgPz8gbnVsbCxcbiAgfSkudGV4dDtcbiAgY29uc3Qgd2luZG93ID0gcHJpb3JEZXRhaWwoc291cmNlLCBsYW5lUHJpb3Iub3V0cHV0LCBkYXRhSW5kZXgpO1xuXG4gIHJldHVybiB3aW5kb3cgPyBgJHtDT01QQVJFRF9QUklPUl9QUkVGSVh9ICR7dGV4dH0gKCR7d2luZG93fSlgIDogYCR7Q09NUEFSRURfUFJJT1JfUFJFRklYfSAke3RleHR9YDtcbn1cblxuLy8gV2hhdCBhIHNlcmllcycgdmFsdWUgY292ZXJzLCB3aGVuIHRoZSBzZXJ2ZXIgc2F5czogYSBwcmlvcidzIGRheXMsIG9yIGFcbi8vIHdpbmRvd2VkIHZhbHVlJ3Mgd2luZG93ICgnUm9sbGluZyAzLW1vbnRoIHRvdGFsJyksIHdob3NlIGRheXMgdGhlIG5vdGVcbi8vIHVuZGVyIHRoZSBjaGFydCBuYW1lcy5cbmZ1bmN0aW9uIHNlcmllc0RldGFpbChzb3VyY2U6IEFubm90YXRlZFRvb2x0aXBTb3VyY2UsIGluZGV4OiBudW1iZXIsIGRhdGFJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3Qgb3V0cHV0ID0gc291cmNlLmFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdO1xuICBjb25zdCB3aW5kb3cgPSBzb3VyY2UuYW5ub3RhdGlvbnMud2luZG93c1tpbmRleF07XG5cbiAgaWYgKG91dHB1dD8ucm9sZSA9PT0gJ3ByaW9yJykge1xuICAgIHJldHVybiBwcmlvckRldGFpbChzb3VyY2UsIG91dHB1dCwgZGF0YUluZGV4KTtcbiAgfVxuXG4gIHJldHVybiB3aW5kb3cgPyB3aW5kb3dUZXh0KHsgLi4ud2luZG93LCBzdGFydDogbnVsbCwgZW5kOiBudWxsIH0sIHNvdXJjZS5jb250ZXh0LmxvY2FsZSwgc291cmNlLmdyYW51bGFyaXR5KSA6ICcnO1xufVxuXG4vLyBBIHByaW9yIHZhbHVlJ3MgZGF5cy4gQSByYW5nZSBjb21wYXJpc29uIGNvbXBhcmVzIGV2ZXJ5IHBvaW50IHdpdGggdGhlXG4vLyBzYW1lIHdpbmRvdy4gQSBzZXJpZXMgY29tcGFyaXNvbiBjb21wYXJlcyBlYWNoIHBlcmlvZCB3aXRoIHRoZSBwZXJpb2QgaXRzXG4vLyBsYW5lJ3Mgb2Zmc2V0IGJhY2s7IGEgcGVyaW9kX2VuZCBjb21wYXJpc29uIHJlYWRzIHRoZSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHRoYXRcbi8vIHBlcmlvZCAoJ29uIEF1ZyAzMSwgMjAyNicpLlxuZnVuY3Rpb24gcHJpb3JEZXRhaWwoc291cmNlOiBBbm5vdGF0ZWRUb29sdGlwU291cmNlLCBvdXRwdXQ6IE91dHB1dE1ldGEsIGRhdGFJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgY29tcGFyaXNvbiA9IHNvdXJjZS5hbm5vdGF0aW9ucy5jb21wYXJpc29uO1xuICBjb25zdCBsYW5lID0gKG91dHB1dC5vZmZzZXQgPz8gMSkgLSAxO1xuICBjb25zdCBvZmZzZXQgPSBjb21wYXJpc29uPy5vZmZzZXRzPy5bbGFuZV07XG4gIGNvbnN0IGxvY2FsZSA9IHNvdXJjZS5jb250ZXh0LmxvY2FsZTtcblxuICBpZiAoIWNvbXBhcmlzb24gfHwgIW9mZnNldCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChjb21wYXJpc29uLm1vZGUgPT09ICdyYW5nZScgfHwgIXNvdXJjZS5ncmFudWxhcml0eSkge1xuICAgIGNvbnN0IHByaW9yID0gY29tcGFyaXNvbi5wcmlvcnM/LltsYW5lXTtcblxuICAgIHJldHVybiBwcmlvciA/IGZvcm1hdERheVdpbmRvdyhwcmlvciwgY29tcGFyaXNvbi50aW1lem9uZSwgbG9jYWxlKSA6ICcnO1xuICB9XG5cbiAgY29uc3QgcGFydGlhbCA9IGRhdGFJbmRleCA9PT0gc291cmNlLmFubm90YXRpb25zLnBhcnRpYWxJbmRleCAmJiBjb21wYXJpc29uLmFsaWduID09PSAndG9fZGF0ZSc7XG4gIGNvbnN0IHRvZGF5ID0gcGFydGlhbCA/IHpvbmVUb2RheShjb21wYXJpc29uLnRpbWV6b25lKSA6IG51bGw7XG4gIGNvbnN0IHdpbmRvdyA9IHByaW9yUGVyaW9kV2luZG93KHNvdXJjZS5leHRyYWN0ZWQuY2F0ZWdvcmllc1tkYXRhSW5kZXhdID8/ICcnLCBzb3VyY2UuZ3JhbnVsYXJpdHksIG9mZnNldCwgdG9kYXkpO1xuXG4gIGlmICghd2luZG93KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGNvbXBhcmlzb24ubW9kZSA9PT0gJ3BlcmlvZF9lbmQnKSB7XG4gICAgcmV0dXJuIGBvbiAke2Zvcm1hdERheVJhbmdlKHdpbmRvdy5lbmQsIHdpbmRvdy5lbmQsIGxvY2FsZSl9YDtcbiAgfVxuXG4gIHJldHVybiBmb3JtYXREYXlXaW5kb3coXG4gICAgeyAuLi53aXRoaW5MYW5lU3Bhbih3aW5kb3csIGNvbXBhcmlzb24ucHJpb3JzPy5bbGFuZV0pLCB0aHJvdWdoOiBwYXJ0aWFsID8gY29tcGFyaXNvbi5jdXJyZW50Py50aHJvdWdoID8/IG51bGwgOiBudWxsIH0sXG4gICAgY29tcGFyaXNvbi50aW1lem9uZSxcbiAgICBsb2NhbGUsXG4gICk7XG59XG5cbi8vIEEgc2VyaWVzIGxhbmUgcmVhZHMgdGhlIHNwYW4gc2hvd24gbW92ZWQgYmFjayBieSBpdHMgb2Zmc2V0ICh0aGUgc2VydmVyJ3Ncbi8vIGNvbXBhcmlzb24ucHJpb3JzW2xhbmVdKSwgc28gdGhlIGVhcmxpZXIgY29weSBvZiBhIHBlcmlvZCB0aGUgc3BhbiBzdGFydHNcbi8vIG9yIGVuZHMgaW5zaWRlIGhvbGRzIG9ubHkgdGhlIGRheXMgd2l0aGluIGl0OiBhIHNwYW4gZnJvbSBNYXIgMTUgc2V0c1xuLy8gTWFyY2ggYWdhaW5zdCBGZWIgMTUg4oCTIDI4LCBub3QgdGhlIHdob2xlIG9mIEZlYnJ1YXJ5LlxuZnVuY3Rpb24gd2l0aGluTGFuZVNwYW4oXG4gIHdpbmRvdzogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9LFxuICBzcGFuOiBDb21wYXJpc29uV2luZG93IHwgdW5kZWZpbmVkLFxuKTogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9IHtcbiAgaWYgKCFzcGFuKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gd2luZG93LnN0YXJ0IDwgc3Bhbi5zdGFydCA/IHNwYW4uc3RhcnQgOiB3aW5kb3cuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IHdpbmRvdy5lbmQgPiBzcGFuLmVuZCA/IHNwYW4uZW5kIDogd2luZG93LmVuZDtcblxuICByZXR1cm4gc3RhcnQgPD0gZW5kID8geyBzdGFydCwgZW5kIH0gOiB3aW5kb3c7XG59XG5cbi8vIFRoZSBkYXlzIG9uZSBwZXJpb2Qgb2YgdGhlIGF4aXMgaXMgY29tcGFyZWQgd2l0aDogdGhlIHBlcmlvZCBtb3ZlZCBiYWNrIGJ5XG4vLyB0aGUgbGFuZSdzIG9mZnNldC4gQSBwZXJpb2Qgbm90IG92ZXIgeWV0LCBjb21wYXJlZCB0byBkYXRlLCBydW5zIG9ubHkgdG9cbi8vIHRvZGF5IG1vdmVkIGJhY2sgKHByaW9yVG9EYXRlRW5kKS4gbnVsbCBmb3IgYSBjYXRlZ29yeSB0aGF0IGlzIG5vdCBhIGRheSxcbi8vIG9yIGFuIG9mZnNldCB3aXRob3V0IGEgdW5pdCAoYSBjdXN0b20gcmFuZ2UpLlxuZnVuY3Rpb24gcHJpb3JQZXJpb2RXaW5kb3coXG4gIGNhdGVnb3J5OiBzdHJpbmcsXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LFxuICBvZmZzZXQ6IENvbXBhcmlzb25PZmZzZXQsXG4gIHRvZGF5OiBEYXRlIHwgbnVsbCxcbik6IHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfSB8IG51bGwge1xuICBjb25zdCBzdGFydCA9IHBhcnNlSVNPKGNhdGVnb3J5KTtcbiAgY29uc3QgdW5pdCA9IG9mZnNldC51bml0O1xuICBjb25zdCBjb3VudCA9IG9mZnNldC5jb3VudDtcblxuICBpZiAoIWlzVmFsaWQoc3RhcnQpIHx8ICF1bml0IHx8ICFjb3VudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgYmFjayA9IChkYXRlOiBEYXRlKSA9PiBhZGRQZXJpb2RzKGRhdGUsIHVuaXQsIC1jb3VudCk7XG4gIGNvbnN0IGZ1bGxFbmQgPSBhZGREYXlzKGJhY2soYWRkUGVyaW9kcyhzdGFydCwgZ3JhbnVsYXJpdHksIDEpKSwgLTEpO1xuICBjb25zdCBlbmQgPSB0b2RheSA/IGVhcmxpZXN0T2YoW2Z1bGxFbmQsIHByaW9yVG9EYXRlRW5kKHRvZGF5LCBzdGFydCwgYmFjaywgdW5pdCldKSA6IGZ1bGxFbmQ7XG5cbiAgcmV0dXJuIHsgc3RhcnQ6IGNhbGVuZGFyRGF5KGJhY2soc3RhcnQpKSwgZW5kOiBjYWxlbmRhckRheShsYXRlc3RPZihbZW5kLCBiYWNrKHN0YXJ0KV0pKSB9O1xufVxuXG4vLyBUb2RheSwga2VwdCBpbnNpZGUgdGhlIHBlcmlvZCwgbW92ZWQgYmFjayBieSB0aGUgb2Zmc2V0OyB3aGVuIHRvZGF5IGlzIHRoZVxuLy8gbGFzdCBkYXkgb2YgaXRzIG1vbnRoLCB0aGUgbGFzdCBkYXkgb2YgdGhlIG1vbnRoIGl0IGxhbmRzIGluICh0aGVcbi8vIHNlcnZlcidzIGVuZC1vZi1tb250aCBydWxlOiBTZXAgMzAgY29tcGFyZXMgd2l0aCBBdWcgMzEsIG5vdCBBdWcgMzApLlxuZnVuY3Rpb24gcHJpb3JUb0RhdGVFbmQoXG4gIHRvZGF5OiBEYXRlLFxuICBwZXJpb2RTdGFydDogRGF0ZSxcbiAgYmFjazogKGRhdGU6IERhdGUpID0+IERhdGUsXG4gIHVuaXQ6IENoYXJ0R3JhbnVsYXJpdHksXG4pOiBEYXRlIHtcbiAgY29uc3QgZGF5ID0gbGF0ZXN0T2YoW3N0YXJ0T2ZEYXkodG9kYXkpLCBwZXJpb2RTdGFydF0pO1xuICBjb25zdCBtb3ZlZCA9IGJhY2soZGF5KTtcblxuICByZXR1cm4gaXNMYXN0RGF5T2ZNb250aChkYXkpICYmIHVuaXQgIT09ICdkYXknICYmIHVuaXQgIT09ICd3ZWVrJyA/IGVuZE9mTW9udGgobW92ZWQpIDogbW92ZWQ7XG59XG5cbmZ1bmN0aW9uIGFkZFBlcmlvZHMoZGF0ZTogRGF0ZSwgdW5pdDogQ2hhcnRHcmFudWxhcml0eSwgY291bnQ6IG51bWJlcik6IERhdGUge1xuICBzd2l0Y2ggKHVuaXQpIHtcbiAgICBjYXNlICdkYXknOlxuICAgICAgcmV0dXJuIGFkZERheXMoZGF0ZSwgY291bnQpO1xuICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgcmV0dXJuIGFkZFdlZWtzKGRhdGUsIGNvdW50KTtcbiAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgIHJldHVybiBhZGRRdWFydGVycyhkYXRlLCBjb3VudCk7XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4gYWRkWWVhcnMoZGF0ZSwgY291bnQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIGNvdW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxlbmRhckRheShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZvcm1hdElTTyhkYXRlLCB7IHJlcHJlc2VudGF0aW9uOiAnZGF0ZScgfSk7XG59XG5cbi8vIFRvZGF5J3MgY2FsZW5kYXIgZGF5IGluIHRoZSByZXBvcnQncyB6b25lLCBhcyBsb2NhbCBtaWRuaWdodC4gVGhlIHNlcnZlclxuLy8gbWFya3Mgd2hpY2ggcGVyaW9kIGhvbGRzIHRvZGF5IChwYXJ0aWFsUGVyaW9kKSBidXQgbm90IHRoZSBkYXkgaXRzZWxmOyB0aGVcbi8vIHByaW9yIG9mIHRoYXQgcGVyaW9kIGlzIGNsaXBwZWQgYXQgdGhlIHNhbWUgZGF5LiBBbiB1bmtub3duIHpvbmUgcmVhZHMgdGhlXG4vLyBicm93c2VyJ3Mgb3duIGRheS5cbmZ1bmN0aW9uIHpvbmVUb2RheSh0aW1lem9uZTogc3RyaW5nKTogRGF0ZSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFydHMgPSBkYXRlRm9ybWF0KCdlbi1VUycsIHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ251bWVyaWMnLCBkYXk6ICdudW1lcmljJyB9LCB0aW1lem9uZSlcbiAgICAgIC5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKCkpO1xuICAgIGNvbnN0IHBhcnQgPSAodHlwZTogSW50bC5EYXRlVGltZUZvcm1hdFBhcnRUeXBlcykgPT4gTnVtYmVyKHBhcnRzLmZpbmQoKGZvdW5kKSA9PiBmb3VuZC50eXBlID09PSB0eXBlKT8udmFsdWUpO1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUocGFydCgneWVhcicpLCBwYXJ0KCdtb250aCcpIC0gMSwgcGFydCgnZGF5JykpO1xuXG4gICAgaWYgKGlzVmFsaWQodG9kYXkpKSB7XG4gICAgICByZXR1cm4gdG9kYXk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBBbiB1bmtub3duIHpvbmU6IHRoZSBicm93c2VyJ3MgZGF5IGJlbG93LlxuICB9XG5cbiAgcmV0dXJuIHN0YXJ0T2ZEYXkobmV3IERhdGUoKSk7XG59XG5cbi8vIEEgY29sb3JCeSBjaGFydCdzIHN0YXRpc3RpYyBsaW5lOiBvbmUgbGluZSBvdmVyIGV2ZXJ5IGJhciwgaHVuZyBvZmYgdGhlXG4vLyBmaXJzdCBzZXJpZXMgYW5kIGRyYXduIGluIHRoZSByZWZlcmVuY2Ugc2xhdGUsIGFzIG5vIG9uZSBjYXRlZ29yeSdzIGNvbG9yXG4vLyBzcGVha3MgZm9yIHRoZSBvdGhlcnMuXG5mdW5jdGlvbiBjb2xvckJ5U3RhdExpbmUoXG4gIGZpcnN0OiBTZXJpZXNPcHRpb24sXG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIHdyaXRlPzogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyxcbik6IFNlcmllc09wdGlvbiB7XG4gIGNvbnN0IG1lYXN1cmUgPSBleHRyYWN0ZWQuc2VyaWVzWzBdPy5tZWFzdXJlO1xuICBjb25zdCBzdGF0ID0gbWVhc3VyZU1hcmtTdGF0KG1lYXN1cmUpO1xuICBjb25zdCBtYXJrTGluZSA9IHN0YXQgJiYgc3RhdE1hcmtMaW5lKFxuICAgIGNvbG9yQnlWYWx1ZXMoZXh0cmFjdGVkKSxcbiAgICBzdGF0LFxuICAgIHdyaXRlID8/IG1lYXN1cmVXcml0ZXIobWVhc3VyZSwgY29udGV4dCksXG4gICAgYCMke1JFUE9SVF9SRUZFUkVOQ0VfQ09MT1J9YCxcbiAgKTtcblxuICByZXR1cm4gbWFya0xpbmUgPyB7IC4uLmZpcnN0LCBtYXJrTGluZSB9IGFzIFNlcmllc09wdGlvbiA6IGZpcnN0O1xufVxuXG4vLyBBIHNlcmllcycgc3RhdGlzdGljIGxpbmUgYWNyb3NzIHRoZSBwbG90LCBsYWJlbGVkIHdpdGggdGhlIHN0YXRpc3RpYyBhbmRcbi8vIGl0cyB2YWx1ZSAoJ0F2ZXJhZ2U6IDEsMjM0LjUnKSwgb3IgdW5kZWZpbmVkIHdoZW4gbm8gcG9pbnQgaGFzIGEgdmFsdWUuIEl0XG4vLyB0YWtlcyB0aGUgc2VyaWVzJyBjb2xvciB1bmxlc3MgaXQgaXMgZ2l2ZW4gb25lLlxuZnVuY3Rpb24gc3RhdE1hcmtMaW5lKFxuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLFxuICBzdGF0OiBSZXBvcnRDaGFydE1hcmtTdGF0LFxuICB3cml0ZTogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyxcbiAgY29sb3I/OiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgdmFsdWUgPSBzZXJpZXNTdGF0KHZhbHVlcywgc3RhdCk7XG5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBgJHtTVEFUX0xBQkVMW3N0YXRdfTogJHt3cml0ZSh2YWx1ZSl9YDtcblxuICByZXR1cm4ge1xuICAgIHNpbGVudDogdHJ1ZSxcbiAgICBzeW1ib2w6ICdub25lJyxcbiAgICBsaW5lU3R5bGU6IHsgdHlwZTogJ2Rhc2hlZCcgYXMgY29uc3QsIHdpZHRoOiAxLCAuLi4oY29sb3IgPyB7IGNvbG9yIH0gOiB7fSkgfSxcbiAgICBsYWJlbDogeyBmb3JtYXR0ZXI6ICgpID0+IHRleHQsIHBvc2l0aW9uOiAnaW5zaWRlRW5kVG9wJyBhcyBjb25zdCwgZm9udFNpemU6IFJFUE9SVF9EQVRBX0xBQkVMX0ZPTlRfU0laRSwgLi4uTUFSS19MQUJFTF9CT1ggfSxcbiAgICBkYXRhOiBbeyB5QXhpczogdmFsdWUgfV0sXG4gIH07XG59XG5cbi8vIEEgc3RhdGlzdGljJ3MgdmFsdWUgaW4gaXRzIG1lYXN1cmUncyBudW1iZXIgZm9ybWF0LCBpbiB0aGUgcmVwb3J0IGxvY2FsZS5cbmZ1bmN0aW9uIG1lYXN1cmVXcml0ZXIobWVhc3VyZTogQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkLCBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0KTogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyB7XG4gIHJldHVybiAodmFsdWUpID0+IGZvcm1hdE51bWJlcih2YWx1ZSwgbWVhc3VyZSwgY29udGV4dCk7XG59XG5cbi8vIEEgMTAwJSBzdGFja2VkIHNlcmllcycgc3RhdGlzdGljIGlzIGEgc2hhcmUsIHdyaXR0ZW4gYXMgaXRzIHRvb2x0aXAgd3JpdGVzXG4vLyBvbmUuXG5mdW5jdGlvbiBzaGFyZVdyaXRlcihjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0KTogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyB7XG4gIGNvbnN0IHJhdGlvQ29udGV4dCA9IHsgLi4uY29udGV4dCwgcmF0aW9QZXJjZW50OiB0cnVlIH07XG5cbiAgcmV0dXJuICh2YWx1ZSkgPT4gZm9ybWF0TnVtYmVyKHZhbHVlLCBQRVJDRU5UX1NIQVJFX0ZPUk1BVCwgcmF0aW9Db250ZXh0KTtcbn1cblxuLy8gVGhlIHNlcmllcyB0aGF0IGNhcnJ5IGEgY2hhcnQncyByZWZlcmVuY2VzLCBvbmUgcGVyIHZhbHVlIGF4aXMgdGhhdCBoYXNcbi8vIGFueTogYW4gZW1wdHkgbGluZSAoZXZlcnkgcG9pbnQgbnVsbCwgc28gaXQgZHJhd3Mgbm90aGluZyBhbmQgc3RyZXRjaGVzIG5vXG4vLyBheGlzKSB3aG9zZSBtYXJrTGluZSBkcmF3cyB0aGUgcmVmZXJlbmNlIGxpbmVzIGFuZCB3aG9zZSBtYXJrQXJlYSBmaWxscyB0aGVcbi8vIGJhbmRzLiBJdCBpcyBzaWxlbnQsIGxlZnQgb3V0IG9mIHRoZSB0b29sdGlwIGFuZCwgYnkgcmVmZXJlbmNlTGVnZW5kLCBvdXQgb2Zcbi8vIHRoZSBsZWdlbmQuIEl0IGhhcyBubyBuYW1lLCBzbyBubyBtZWFzdXJlIHNlcmllcycgbGVnZW5kIGVudHJ5ICh3aGF0ZXZlciBpdHNcbi8vIG5hbWUsICcnIGluY2x1ZGVkKSB0b2dnbGVzIGl0LlxuLy9cbi8vIExhYmVscyBhcmUgZnVuY3Rpb25zLCBhcyBhIHN0cmluZyBmb3JtYXR0ZXIgaXMgYSB0ZW1wbGF0ZSB0aGF0IHdvdWxkIHJlYWRcbi8vICd7Yn0nIG9yICd7Y30nIGluIGEgbGFiZWwgYXMgYSBwbGFjZWhvbGRlci4gRUNoYXJ0cyBkcmF3cyBhIG1hcmtBcmVhIHVuZGVyXG4vLyB0aGUgYmFycyBhbmQgYSBtYXJrTGluZSBvdmVyIHRoZW0sIHNvIGEgYmFuZCdzIGxhYmVsIHJpZGVzIGFuIGludmlzaWJsZVxuLy8gbWFya0xpbmUgb24gaXRzIHVwcGVyIGVkZ2UsIGluc2lkZSBpdHMgdG9wIGxlZnQgY29ybmVyLCB3aGVyZSB0aGUgZmlyc3QgYmFyXG4vLyB3b3VsZCBvdGhlcndpc2UgY292ZXIgaXQuXG5mdW5jdGlvbiByZWZlcmVuY2VDYXJyaWVycyhyZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLCBjYXRlZ29yaWVzOiBzdHJpbmdbXSk6IFNlcmllc09wdGlvbltdIHtcbiAgY29uc3QgY29sb3IgPSBgIyR7UkVQT1JUX1JFRkVSRU5DRV9DT0xPUn1gO1xuXG4gIHJldHVybiAoWzAsIDFdIGFzIGNvbnN0KS5mbGF0TWFwKChheGlzSW5kZXgpOiBTZXJpZXNPcHRpb25bXSA9PiB7XG4gICAgY29uc3Qgb25BeGlzID0gcmVmZXJlbmNlcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmF4aXNJbmRleCA9PT0gYXhpc0luZGV4KTtcbiAgICBjb25zdCBsaW5lcyA9IG9uQXhpcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gIXJlZmVyZW5jZS5iYW5kKTtcbiAgICBjb25zdCBiYW5kcyA9IG9uQXhpcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmJhbmQpO1xuXG4gICAgaWYgKCFvbkF4aXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIFt7XG4gICAgICB0eXBlOiAnbGluZScsXG4gICAgICBkYXRhOiBjYXRlZ29yaWVzLm1hcCgoKSA9PiBudWxsKSxcbiAgICAgIHlBeGlzSW5kZXg6IGF4aXNJbmRleCxcbiAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgIHRvb2x0aXA6IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgIG1hcmtMaW5lOiB7XG4gICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgc3ltYm9sOiAnbm9uZScsXG4gICAgICAgIGxpbmVTdHlsZTogeyBjb2xvciwgdHlwZTogJ2Rhc2hlZCcsIHdpZHRoOiAxIH0sXG4gICAgICAgIGxhYmVsOiB7IHBvc2l0aW9uOiAnaW5zaWRlRW5kVG9wJywgY29sb3IsIGZvbnRTaXplOiBSRVBPUlRfREFUQV9MQUJFTF9GT05UX1NJWkUsIC4uLk1BUktfTEFCRUxfQk9YIH0sXG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAuLi5saW5lcy5tYXAoKHJlZmVyZW5jZSkgPT4gKHsgeUF4aXM6IHJlZmVyZW5jZS5sb3csIGxhYmVsOiB7IGZvcm1hdHRlcjogKCkgPT4gcmVmZXJlbmNlLmxhYmVsIH0gfSkpLFxuICAgICAgICAgIC4uLmJhbmRzLm1hcCgocmVmZXJlbmNlKSA9PiAoe1xuICAgICAgICAgICAgeUF4aXM6IHJlZmVyZW5jZS5oaWdoLFxuICAgICAgICAgICAgLy8gWmVybyB3aWR0aCwgbm90IHplcm8gb3BhY2l0eTogYSBtYXJrTGluZSdzIGxhYmVsIHRha2VzIHRoZVxuICAgICAgICAgICAgLy8gbGluZSdzIG9wYWNpdHkuXG4gICAgICAgICAgICBsaW5lU3R5bGU6IHsgd2lkdGg6IDAgfSxcbiAgICAgICAgICAgIGxhYmVsOiB7IHBvc2l0aW9uOiAnaW5zaWRlU3RhcnRCb3R0b20nLCBmb3JtYXR0ZXI6ICgpID0+IHJlZmVyZW5jZS5sYWJlbCB9LFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICAuLi4oYmFuZHMubGVuZ3RoID8ge1xuICAgICAgICBtYXJrQXJlYToge1xuICAgICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IFJFRkVSRU5DRV9CQU5EX0ZJTEwgfSxcbiAgICAgICAgICBkYXRhOiBiYW5kcy5tYXAoKHJlZmVyZW5jZSkgPT4gW3sgeUF4aXM6IHJlZmVyZW5jZS5sb3cgfSwgeyB5QXhpczogcmVmZXJlbmNlLmhpZ2ggfV0pLFxuICAgICAgICB9LFxuICAgICAgfSA6IHt9KSxcbiAgICB9IGFzIFNlcmllc09wdGlvbl07XG4gIH0pO1xufVxuXG4vLyBUaGUgbGFyZ2VzdCBtYWduaXR1ZGUgYSB2YWx1ZSBheGlzJ3MgcmVmZXJlbmNlcyByZWFjaCwgd2hpY2ggaXRzIG51bWJlclxuLy8gZm9ybWF0IGNvdW50cyB0b3dhcmQgaXRzIHBlYWssIGFzIHRoZSBheGlzIHN0cmV0Y2hlcyB0byB0aGVtOyAwIHdoZW4gaXRcbi8vIGhhcyBub25lLlxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVBlYWsocmVmZXJlbmNlczogRHJhd25SZWZlcmVuY2VbXSwgYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCk6IG51bWJlciB7XG4gIGNvbnN0IHJlYWNoID0gcmVmZXJlbmNlUmVhY2gocmVmZXJlbmNlcywgYXhpc0luZGV4KTtcblxuICByZXR1cm4gcmVhY2ggPyBNYXRoLm1heChNYXRoLmFicyhyZWFjaC5sb3cpLCBNYXRoLmFicyhyZWFjaC5oaWdoKSkgOiAwO1xufVxuXG4vLyBUaGUgbGVnZW5kIG9mIGEgY2hhcnQgd2l0aCByZWZlcmVuY2VzIG5hbWVzIGl0cyBtZWFzdXJlIHNlcmllcyBhbG9uZSwgc29cbi8vIGEgY2FycmllciBuZXZlciBzaG93cyBhcyBhIGJsYW5rIGVudHJ5LiBXaXRob3V0IHJlZmVyZW5jZXMgaXQgaXMgbGVmdCBhcyBpdFxuLy8gd2FzLlxuZnVuY3Rpb24gcmVmZXJlbmNlTGVnZW5kKFxuICBsZWdlbmQ6IExlZ2VuZENvbXBvbmVudE9wdGlvbixcbiAgc2VyaWVzOiBTZXJpZXNPcHRpb25bXSxcbiAgcmVmZXJlbmNlczogRHJhd25SZWZlcmVuY2VbXSxcbik6IExlZ2VuZENvbXBvbmVudE9wdGlvbiB7XG4gIHJldHVybiByZWZlcmVuY2VzLmxlbmd0aFxuICAgID8geyAuLi5sZWdlbmQsIGRhdGE6IHNlcmllcy5tYXAoKGl0ZW0pID0+IFN0cmluZyhpdGVtLm5hbWUgPz8gJycpKSB9XG4gICAgOiBsZWdlbmQ7XG59XG5cbi8vIFRoZSBzcGFuIG9mIHRoZSByZWZlcmVuY2VzIG9uIG9uZSB2YWx1ZSBheGlzLCBvciB1bmRlZmluZWQgd2hlbiBpdCBoYXNcbi8vIG5vbmUuXG5mdW5jdGlvbiByZWZlcmVuY2VSZWFjaChyZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLCBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KTogUmVmZXJlbmNlUmVhY2ggfCB1bmRlZmluZWQge1xuICBjb25zdCBvbkF4aXMgPSByZWZlcmVuY2VzLmZpbHRlcigocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UuYXhpc0luZGV4ID09PSBheGlzSW5kZXgpO1xuXG4gIHJldHVybiBvbkF4aXMubGVuZ3RoXG4gICAgPyB7IGxvdzogTWF0aC5taW4oLi4ub25BeGlzLm1hcCgocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UubG93KSksIGhpZ2g6IE1hdGgubWF4KC4uLm9uQXhpcy5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmhpZ2gpKSB9XG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbi8vIEVDaGFydHMgbGVhdmVzIGEgbWFya0xpbmUgb3IgbWFya0FyZWEgb3V0IG9mIGFuIGF4aXMncyBleHRlbnQsIHNvIGFcbi8vIHJlZmVyZW5jZSBiZXlvbmQgdGhlIGRhdGEgd291bGQgZmFsbCBvZmYgdGhlIHBsb3QuIEFuIGF4aXMgYm91bmQgdGhlIGNvbmZpZ1xuLy8gZG9lcyBub3QgcGluIHJlYWNoZXMgcGFzdCB0aGUgZnVydGhlc3QgcmVmZXJlbmNlLCB0byBhIHJvdW5kIG51bWJlciB3aXRoXG4vLyByb29tIGZvciBpdHMgbGFiZWwgKGJleW9uZFJlZmVyZW5jZSksIHdoZW4gdGhlIGRhdGEgKGFuZCB0aGUgemVybyBhIHZhbHVlXG4vLyBheGlzIGFsd2F5cyBzaG93cykgZmFsbHMgc2hvcnQgb2YgaXQsIGFuZCBpcyBsZWZ0IHRvIEVDaGFydHMgb3RoZXJ3aXNlOiBhXG4vLyBjYWxsYmFjayByZXR1cm5pbmcgdW5kZWZpbmVkIGtlZXBzIHRoZSBib3VuZCBhdXRvbWF0aWMuIFBhc3QgdGhlIGRhdGEgYW5kXG4vLyB6ZXJvLCBhIHJlZmVyZW5jZSBiZXlvbmQgdGhlIG1heCBpcyBhYm92ZSB6ZXJvIGFuZCBvbmUgYmV5b25kIHRoZSBtaW4gYmVsb3dcbi8vIGl0LlxuZnVuY3Rpb24gcmVhY2hNaW4ocmVhY2g6IFJlZmVyZW5jZVJlYWNoIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiByZWFjaFxuICAgID8gKGV4dGVudDogQXhpc0V4dGVudCkgPT4gKHJlYWNoLmxvdyA8IE1hdGgubWluKGV4dGVudC5taW4sIDApID8gLWJleW9uZFJlZmVyZW5jZSgtcmVhY2gubG93KSA6IHVuZGVmaW5lZClcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVhY2hNYXgocmVhY2g6IFJlZmVyZW5jZVJlYWNoIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiByZWFjaFxuICAgID8gKGV4dGVudDogQXhpc0V4dGVudCkgPT4gKHJlYWNoLmhpZ2ggPiBNYXRoLm1heChleHRlbnQubWF4LCAwKSA/IGJleW9uZFJlZmVyZW5jZShyZWFjaC5oaWdoKSA6IHVuZGVmaW5lZClcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuLy8gVGhlIGJvdW5kIGFuIGF4aXMgdGFrZXMgcGFzdCBhIHJlZmVyZW5jZSBvZiB0aGlzIChwb3NpdGl2ZSkgbWFnbml0dWRlOiB0aGVcbi8vIHNtYWxsZXN0IHJvdW5kIG51bWJlciBhdCBvciBhYm92ZSBpdCBwbHVzIFJFRkVSRU5DRV9IRUFEUk9PTS4gVGhlIHN0ZXBzIGFyZVxuLy8gZmluZXIgdGhhbiBFQ2hhcnRzJyB0aWNrIHN0ZXBzLCBzbyBhIHJlZmVyZW5jZSBqdXN0IHBhc3QgdGhlIGRhdGEgZG9lcyBub3Rcbi8vIGRvdWJsZSB0aGUgYXhpcyAoMTEwIGdpdmVzIDEyMCwgbm90IDIwMCkuIFRoZSB0b2xlcmFuY2Uga2VlcHMgYSBmbG9hdCBlcnJvclxuLy8gZnJvbSBza2lwcGluZyBhIHJvdW5kIG51bWJlciB0aGUgdmFsdWUgYWxyZWFkeSBpcy5cbmNvbnN0IE5JQ0VfU1RFUFMgPSBbMSwgMS4yLCAxLjUsIDIsIDIuNSwgMywgNCwgNSwgNiwgOCwgMTBdO1xuY29uc3QgTklDRV9UT0xFUkFOQ0UgPSAxZS05O1xuXG5mdW5jdGlvbiBiZXlvbmRSZWZlcmVuY2UobWFnbml0dWRlOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB0YXJnZXQgPSBtYWduaXR1ZGUgKiBSRUZFUkVOQ0VfSEVBRFJPT007XG4gIGNvbnN0IHBvd2VyID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMCh0YXJnZXQpKSk7XG4gIGNvbnN0IHN0ZXAgPSBOSUNFX1NURVBTLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlICogcG93ZXIgPj0gdGFyZ2V0ICogKDEgLSBOSUNFX1RPTEVSQU5DRSkpID8/IDEwO1xuXG4gIC8vIFJvdW5kZWQgYmFjayB0byB0aGUgcG93ZXIncyBvd24gZGlnaXRzLCBzbyAxLjIgeCAwLjEgcmVhZHMgMC4xMiwgbm90XG4gIC8vIDAuMTIwMDAwMDAwMDAwMDAwMDEuXG4gIHJldHVybiBOdW1iZXIoKHN0ZXAgKiBwb3dlcikudG9QcmVjaXNpb24oMTIpKTtcbn1cblxuLy8gVGhlIGNhdGVnb3J5IGF4aXMgb2YgYW4gYXhpcyBjaGFydCBvciBhIHdhdGVyZmFsbDogdGhlIGNhdGVnb3JpZXMgaW4gcm93XG4vLyBvcmRlciwgbGFiZWxlZCBhcyBwZXJpb2RzIHdoZW4gdGhlIHJvd3Mgd2VyZSBidWNrZXRlZCBieSB0aW1lLlxuLy9cbi8vIEhvcml6b250YWwgYmFycyByZWFkIHRvcC1kb3duOiBFQ2hhcnRzIGRyYXdzIGNhdGVnb3J5IDAgYXQgdGhlIGJvdHRvbSwgc28gdGhlXG4vLyBheGlzIGlzIGludmVydGVkIHRvIHB1dCB0aGUgZmlyc3Qgcm93ICh0aGUgbGFyZ2VzdCBvZiBhIHRvcC1OLCBhIHdhdGVyZmFsbCdzXG4vLyBmaXJzdCBzdGVwKSBhdCB0aGUgdG9wLiBUaGUgcm90YXRlZCB0aXRsZSBzaXRzIGp1c3QgYmV5b25kIHRoZSBsb25nZXN0IGxhYmVsXG4vLyByYXRoZXIgdGhhbiBhdCBhIGZpeGVkIGdhcCB0aGF0IHdvdWxkIHB1dCBpdCBvbiB0b3Agb2YgdGhlIGxhYmVscy5cbi8vXG4vLyBBIGJ1Y2tldGVkIGF4aXMgYWxzbyBuYW1lcyBpdHMgcGVyaW9kIGluIHRoZSBheGlzIHRvb2x0aXAncyBoZWFkZXI6IEVDaGFydHNcbi8vIGhlYWRzIGl0IHdpdGggdGhlIHJhdyBjYXRlZ29yeSAoJzIwMjYtMDEtMDEnKSB1bmxlc3MgdGhlIGF4aXMgcG9pbnRlcidzIGxhYmVsXG4vLyBoYXMgYSBmb3JtYXR0ZXIsIHNvIGl0IHJlYWRzICdKYW51YXJ5IDIwMjYnIGluc3RlYWQsIGFsd2F5cyB3aXRoIGl0cyB5ZWFyLlxuLy8gVGhlIGF4aXMncyBkYXRlTGFiZWwgc3R5bGUgd3JpdGVzIGJvdGggaXRzIHRpY2sgbGFiZWxzIGFuZCB0aGF0IGhlYWRlci5cbmZ1bmN0aW9uIGNhdGVnb3J5QXhpc09wdGlvbihcbiAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gIGhvcml6b250YWw6IGJvb2xlYW4sXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKSB7XG4gIGNvbnN0IGdyYW51bGFyaXR5ID0gYnVja2V0R3JhbnVsYXJpdHkoZGF0YSk7XG4gIGNvbnN0IGRhdGVMYWJlbCA9IGNoYXJ0RGF0ZUxhYmVsKGNvbmZpZyk7XG4gIGNvbnN0IHBlcmlvZExhYmVsID0gcGVyaW9kQXhpc0xhYmVsKGdyYW51bGFyaXR5LCBjYXRlZ29yaWVzLCBsb2NhbGUsIGRhdGVMYWJlbCk7XG4gIGNvbnN0IGF4aXMgPSB7XG4gICAgdHlwZTogJ2NhdGVnb3J5JyBhcyBjb25zdCxcbiAgICBkYXRhOiBjYXRlZ29yaWVzLFxuICAgIGludmVyc2U6IGhvcml6b250YWwsXG4gICAgbmFtZTogY2F0ZWdvcnlBeGlzVGl0bGUoY29uZmlnLCBkYXRhKSxcbiAgICBuYW1lTG9jYXRpb246ICdtaWRkbGUnIGFzIGNvbnN0LFxuICAgIC4uLihncmFudWxhcml0eSA/IHtcbiAgICAgIGF4aXNQb2ludGVyOiB7XG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgZm9ybWF0dGVyOiAocGFyYW1zOiB7IHZhbHVlOiB1bmtub3duIH0pID0+IGZvcm1hdFBlcmlvZExhYmVsKFxuICAgICAgICAgICAgU3RyaW5nKHBhcmFtcy52YWx1ZSksXG4gICAgICAgICAgICBncmFudWxhcml0eSxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBkYXRlTGFiZWwsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgfTtcblxuICBpZiAoIWhvcml6b250YWwpIHtcbiAgICAvLyBUaGUgZ2FwIGNsZWFycyB0aGUgeWVhcidzIHNlY29uZCBsaW5lIHdoZW4gdGhlIGxhYmVscyBwcmludCBvbmUuXG4gICAgY29uc3Qgc2Vjb25kTGluZSA9IGdyYW51bGFyaXR5ICYmIGRhdGVMYWJlbCA9PT0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQgJiYgc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmF4aXMsXG4gICAgICBuYW1lR2FwOiBzZWNvbmRMaW5lID8gNDAgOiAyOCxcbiAgICAgIC4uLnBlcmlvZExhYmVsLFxuICAgIH07XG4gIH1cblxuICAvLyBQZXJpb2QgbGFiZWxzLCBzaG9ydCwgbG9uZyBvciBudW1lcmljICgnTWF5JywgJ1EyJywgJ01heSAyMDI2JyksIGFyZVxuICAvLyBib3VuZGVkIGluIGxlbmd0aCBhbmQgbmV2ZXIgY3V0OyBvbmx5IGEgcGxhaW4gY2F0ZWdvcnkgaXMgdHJ1bmNhdGVkLiBUaGUgbGFiZWxzIGFyZSBjdXQgaGVyZSByYXRoZXIgdGhhbiBieSBFQ2hhcnRzJyBvd25cbiAgLy8gdHJ1bmNhdGlvbiwgc28gdGhlIHRpdGxlJ3MgZ2FwIGlzIG1lYXN1cmVkIG9uIGV4YWN0bHkgdGhlIHRleHQgdGhlIGF4aXNcbiAgLy8gZHJhd3MuXG4gIGNvbnN0IHNob3duID0gZ3JhbnVsYXJpdHlcbiAgICA/IG51bGxcbiAgICA6IG5ldyBNYXAoY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBbY2F0ZWdvcnksIHRydW5jYXRlQXhpc0xhYmVsKGNhdGVnb3J5KV0pKTtcbiAgY29uc3QgbGFiZWxzID0gc2hvd24gPyBbLi4uc2hvd24udmFsdWVzKCldIDogZGlzcGxheWVkQ2F0ZWdvcnlMYWJlbHMoY2F0ZWdvcmllcywgZ3JhbnVsYXJpdHksIGxvY2FsZSwgZGF0ZUxhYmVsKTtcblxuICByZXR1cm4ge1xuICAgIC4uLmF4aXMsXG4gICAgbmFtZUdhcDogd2lkZXN0QXhpc0xhYmVsKGxhYmVscykgKyBBWElTX0xBQkVMX01BUkdJTiArIEFYSVNfTkFNRV9DTEVBUkFOQ0UsXG4gICAgLi4uKHNob3duID8geyBheGlzTGFiZWw6IHsgZm9ybWF0dGVyOiAodmFsdWU6IHN0cmluZykgPT4gc2hvd24uZ2V0KHZhbHVlKSA/PyB2YWx1ZSB9IH0gOiBwZXJpb2RMYWJlbCksXG4gIH07XG59XG5cbi8vIFRoZSBjYXRlZ29yeSBheGlzJ3MgdGl0bGU6IHRoZSBsZXZlbCBzaG93biB3aGlsZSB0aGUgY2hhcnQgaXMgZHJpbGxlZFxuLy8gYmVsb3cgaXRzIHRvcCAodGhlIHNlcnZlciBuYW1lcyBpdCwgJ01vbnRoJyksIGVsc2UgdGhlIGF1dGhvcmVkIHRpdGxlLlxuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5QXhpc1RpdGxlKGNvbmZpZzogQ2hhcnRDb25maWcsIGRhdGE6IENvbXBvbmVudERhdGEpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZGF0YS5kcmlsbD8ucGF0aD8ubGVuZ3RoID8gZGF0YS5kcmlsbC5sZXZlbExhYmVsIDogY29uZmlnLnhBeGlzPy5sYWJlbDtcbn1cblxuLy8gVGhlIGNhdGVnb3J5IGF4aXMncyB0aXRsZSBzaWRlLCBvciBudWxsIHdoZW4gdGhlIGF4aXMgaGFzIG5vIHRpdGxlIHRvIG1ha2Vcbi8vIHJvb20gZm9yLlxuZnVuY3Rpb24gY2F0ZWdvcnlUaXRsZVNpZGUoY29uZmlnOiBDaGFydENvbmZpZywgZGF0YTogQ29tcG9uZW50RGF0YSwgaG9yaXpvbnRhbDogYm9vbGVhbik6IEF4aXNUaXRsZVNpZGUgfCBudWxsIHtcbiAgaWYgKCFjYXRlZ29yeUF4aXNUaXRsZShjb25maWcsIGRhdGEpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gaG9yaXpvbnRhbCA/ICdsZWZ0JyA6ICdib3R0b20nO1xufVxuXG4vLyBUaGUgdmFsdWUgYXhlcycgdGl0bGUgc2lkZSwgb3IgbnVsbCB3aGVuIG5vbmUgb2YgdGhlbSBoYXMgYSB0aXRsZS4gQVxuLy8gdmVydGljYWwgY2hhcnQncyB0aXRsZXMgc2l0IGFib3ZlIHRoZSBwbG90LCBhdCB0aGUgdG9wIG9mIGVhY2ggYXhpcyBsaW5lLCBzb1xuLy8gcm9vbSBpcyBtYWRlIG9uY2UgZm9yIGJvdGg7IGEgaG9yaXpvbnRhbCBjaGFydCdzIHNpdHMgYmVsb3cuXG5mdW5jdGlvbiB2YWx1ZVRpdGxlU2lkZShheGVzOiAoQ2hhcnRWYWx1ZUF4aXMgfCB1bmRlZmluZWQpW10sIGhvcml6b250YWw6IGJvb2xlYW4pOiBBeGlzVGl0bGVTaWRlIHwgbnVsbCB7XG4gIGlmICghYXhlcy5zb21lKChheGlzKSA9PiBheGlzPy5sYWJlbCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBob3Jpem9udGFsID8gJ2JvdHRvbScgOiAndG9wJztcbn1cblxuLy8gVGhlIHRpY2sgbGFiZWxzIGFzIHRoZSBheGlzIHNob3dzIHRoZW06IGEgYnVja2V0J3MgcHJpbWFyeSBwZXJpb2QgbGFiZWxcbi8vICgnTWF5JywgJ1EyJywgJ01heSAyMDI2JyksIG90aGVyd2lzZSB0aGUgY2F0ZWdvcnkgaXRzZWxmLiBUaGUgeWVhciBhXG4vLyBtdWx0aS15ZWFyIGF4aXMgcHJpbnRzIHVuZGVyIGEgc2hvcnQgcGVyaW9kIGlzIGxlZnQgb3V0LCBhcyBpdCBpcyBuZXZlciB0aGVcbi8vIHdpZGVyIGxpbmUuXG5mdW5jdGlvbiBkaXNwbGF5ZWRDYXRlZ29yeUxhYmVscyhcbiAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCxcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4gIGRhdGVMYWJlbDogUmVwb3J0Q2hhcnREYXRlTGFiZWwsXG4pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBncmFudWxhcml0eVxuICAgID8gY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBwZXJpb2RMYWJlbFBhcnRzKGNhdGVnb3J5LCBncmFudWxhcml0eSwgbG9jYWxlLCBkYXRlTGFiZWwpPy5wcmltYXJ5ID8/IGNhdGVnb3J5KVxuICAgIDogY2F0ZWdvcmllcztcbn1cblxuLy8gVGhlIHBpeGVsIHdpZHRoIG9mIHRoZSB3aWRlc3QgbGFiZWwuIEEgbGFiZWwgdGhhdCBicmVha3Mgb3ZlciBzZXZlcmFsIGxpbmVzXG4vLyBpcyBhcyB3aWRlIGFzIGl0cyBsb25nZXN0IGxpbmUuXG5mdW5jdGlvbiB3aWRlc3RBeGlzTGFiZWwobGFiZWxzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gIHJldHVybiBsYWJlbHMucmVkdWNlKCh3aWRlc3QsIGxhYmVsKSA9PiBsYWJlbC5zcGxpdCgnXFxuJykucmVkdWNlKFxuICAgIChsaW5lV2lkZXN0LCBsaW5lKSA9PiBNYXRoLm1heChsaW5lV2lkZXN0LCBheGlzTGFiZWxXaWR0aChsaW5lKSksXG4gICAgd2lkZXN0LFxuICApLCAwKTtcbn1cblxuLy8gQSBjYXRlZ29yeSBsYWJlbCBjdXQgdG8gQ0FURUdPUllfTEFCRUxfTUFYX1dJRFRILCBsaW5lIGJ5IGxpbmU6IHRoZSBsb25nZXN0XG4vLyBzdGFydCBvZiBlYWNoIGxpbmUgdGhhdCBzdGlsbCBmaXRzIHdpdGggdGhlIGVsbGlwc2lzIGFmdGVyIGl0LlxuZnVuY3Rpb24gdHJ1bmNhdGVBeGlzTGFiZWwobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsYWJlbC5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiB7XG4gICAgaWYgKGF4aXNMYWJlbFdpZHRoKGxpbmUpIDw9IENBVEVHT1JZX0xBQkVMX01BWF9XSURUSCkge1xuICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBwb2ludHMsIHNvIGFuIGVtb2ppIG9yIG90aGVyIHN1cnJvZ2F0ZSBwYWlyIGlzIG5ldmVyIHNwbGl0LlxuICAgIGNvbnN0IGNoYXJhY3RlcnMgPSBBcnJheS5mcm9tKGxpbmUpO1xuICAgIGNvbnN0IGN1dCA9IChsZW5ndGg6IG51bWJlcikgPT4gYCR7Y2hhcmFjdGVycy5zbGljZSgwLCBsZW5ndGgpLmpvaW4oJycpLnRyaW1FbmQoKX0ke0xBQkVMX0VMTElQU0lTfWA7XG4gICAgbGV0IGZpdHMgPSAwO1xuICAgIGxldCB0b29Mb25nID0gY2hhcmFjdGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKHRvb0xvbmcgLSBmaXRzID4gMSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5mbG9vcigoZml0cyArIHRvb0xvbmcpIC8gMik7XG4gICAgICBpZiAoYXhpc0xhYmVsV2lkdGgoY3V0KGxlbmd0aCkpIDw9IENBVEVHT1JZX0xBQkVMX01BWF9XSURUSCkge1xuICAgICAgICBmaXRzID0gbGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9vTG9uZyA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3V0KGZpdHMpO1xuICB9KS5qb2luKCdcXG4nKTtcbn1cblxuLy8gT25lIGxpbmUncyB3aWR0aCBpbiB0aGUgYXhpcy1sYWJlbCBmb250LCBtZWFzdXJlZCBvbiBhIGNhbnZhcyB0aGUgd2F5XG4vLyBFQ2hhcnRzIG1lYXN1cmVzIGl0IGZvciBjb250YWluTGFiZWwuIE91dHNpZGUgYSBicm93c2VyIHRoZXJlIGlzIG5vIGNhbnZhc1xuLy8gdG8gbWVhc3VyZSB3aXRoLCBzbyB0aGUgbGluZSBjb3VudHMgYXMgemVybyB3aWR0aC5cbmxldCBheGlzTGFiZWxDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcblxuZnVuY3Rpb24gYXhpc0xhYmVsV2lkdGgobGluZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgaWYgKCFheGlzTGFiZWxDb250ZXh0ICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBheGlzTGFiZWxDb250ZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTtcbiAgfVxuXG4gIGlmICghYXhpc0xhYmVsQ29udGV4dCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgYXhpc0xhYmVsQ29udGV4dC5mb250ID0gQVhJU19MQUJFTF9GT05UO1xuXG4gIHJldHVybiBheGlzTGFiZWxDb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmUpLndpZHRoO1xufVxuXG5mdW5jdGlvbiBidWlsZFdhdGVyZmFsbE9wdGlvbihcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3Qgd2F0ZXJmYWxsID0gZXh0cmFjdFdhdGVyZmFsbChjb21wb25lbnQsIGRhdGEpO1xuICBjb25zdCBob3Jpem9udGFsID0gY29uZmlnLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gIGNvbnN0IGNhdGVnb3JpZXMgPSB3YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLmNhdGVnb3J5KTtcbiAgY29uc3QgY2F0ZWdvcnlBeGlzID0gY2F0ZWdvcnlBeGlzT3B0aW9uKGNvbmZpZywgZGF0YSwgY2F0ZWdvcmllcywgaG9yaXpvbnRhbCwgY29udGV4dC5sb2NhbGUpO1xuICAvLyBUaGUgb25lIG1lYXN1cmUncyBmb3JtYXQgd3JpdGVzIHRoZSBheGlzIGFuZCB0aGUgdG9vbHRpcC4gVGhlIGF4aXMgaGFzIHRvXG4gIC8vIHJlYWNoIHRoZSBmdXJ0aGVzdCBwb2ludCB0aGUgcnVubmluZyB0b3RhbCBnZXRzIHRvLCBvbiBlaXRoZXIgc2lkZSBvZlxuICAvLyB6ZXJvLCBvciB0aGUgZnVydGhlc3QgcmVmZXJlbmNlLlxuICBjb25zdCBzcGVjID0gY29uZmlnLm1lYXN1cmVzPy5bMF07XG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBjaGFydFJlZmVyZW5jZXMoY29uZmlnLCBmYWxzZSk7XG4gIGNvbnN0IHZhbHVlQXhpcyA9IHZhbHVlQXhpc09wdGlvbihjb25maWcudmFsdWVBeGlzLCBob3Jpem9udGFsLCB2YWx1ZUF4aXNMYWJlbChyZXNvbHZlVmFsdWVBeGlzRm9ybWF0KFxuICAgIHNwZWMgJiYgaGFzTnVtYmVyRm9ybWF0KHNwZWMpID8gc3BlYyA6IG51bGwsXG4gICAgKCkgPT4gTWF0aC5tYXgocmVmZXJlbmNlUGVhayhyZWZlcmVuY2VzLCAwKSwgLi4ud2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gTWF0aC5hYnMoc3RlcC5zdGFydCArIChzdGVwLmNoYW5nZSA/PyAwKSkpKSxcbiAgICBjb250ZXh0LFxuICApLCBjb250ZXh0KSwgeyByZWFjaDogcmVmZXJlbmNlUmVhY2gocmVmZXJlbmNlcywgMCkgfSk7XG4gIC8vIE9uZSB2aXNpYmxlIHNlcmllcywgc28gdGhlIGxlZ2VuZCBpcyBoaWRkZW4gdW5sZXNzIHRoZSBjb25maWcgcGlucyBpdC5cbiAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCAxKTtcbiAgY29uc3QgZ3JhbnVsYXJpdHkgPSBidWNrZXRHcmFudWxhcml0eShkYXRhKTtcblxuICByZXR1cm4ge1xuICAgIGdyaWQ6IGF4aXNHcmlkKFxuICAgICAgbGVnZW5kUG9zaXRpb24sXG4gICAgICBjYXRlZ29yeVRpdGxlU2lkZShjb25maWcsIGRhdGEsIGhvcml6b250YWwpLFxuICAgICAgdmFsdWVUaXRsZVNpZGUoW2NvbmZpZy52YWx1ZUF4aXNdLCBob3Jpem9udGFsKSxcbiAgICApLFxuICAgIGxlZ2VuZDogeyAuLi5sZWdlbmRPcHRpb24obGVnZW5kUG9zaXRpb24pLCBkYXRhOiBbd2F0ZXJmYWxsLm5hbWVdIH0sXG4gICAgLy8gUGVyIGJhcjogdGhlIGludmlzaWJsZSBiYXNlIGlzIHNpbGVudCwgc28gb25seSBhIHN0ZXAgYW5zd2VycyB0aGUgaG92ZXIuXG4gICAgdG9vbHRpcDoge1xuICAgICAgdHJpZ2dlcjogJ2l0ZW0nLFxuICAgICAgZm9ybWF0dGVyOiAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMpID0+IHdhdGVyZmFsbFRvb2x0aXAoXG4gICAgICAgIHdhdGVyZmFsbCxcbiAgICAgICAgKEFycmF5LmlzQXJyYXkocGFyYW1zKSA/IHBhcmFtc1swXSA6IHBhcmFtcykuZGF0YUluZGV4LFxuICAgICAgICBncmFudWxhcml0eSxcbiAgICAgICAgY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICAgICAgc3BlYyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICksXG4gICAgfSxcbiAgICB4QXhpczogaG9yaXpvbnRhbCA/IHZhbHVlQXhpcyA6IGNhdGVnb3J5QXhpcyxcbiAgICB5QXhpczogaG9yaXpvbnRhbCA/IGNhdGVnb3J5QXhpcyA6IHZhbHVlQXhpcyxcbiAgICBzZXJpZXM6IFsuLi53YXRlcmZhbGxTZXJpZXMod2F0ZXJmYWxsKSwgLi4ucmVmZXJlbmNlQ2FycmllcnMocmVmZXJlbmNlcywgY2F0ZWdvcmllcyldLFxuICB9O1xufVxuXG4vLyBBbiBpbnZpc2libGUgYmFzZSBzZXJpZXMgbGlmdHMgZWFjaCB2aXNpYmxlIGJhciB0byB3aGVyZSBpdHMgc3RlcCBzdGFydHMuXG4vLyBCb3RoIHN0YWNrIHdpdGggdGhlICdhbGwnIHN0cmF0ZWd5LCB3aGljaCBhZGRzIHNpZ25lZCB2YWx1ZXMgaW4gc2VyaWVzIG9yZGVyLFxuLy8gc28gYSBmYWxsIGRyYXdzIERPV04gZnJvbSB0aGUgdG90YWwgYmVmb3JlIGl0LCBldmVuIGFjcm9zcyB6ZXJvLiBUaGUgZGVmYXVsdFxuLy8gc2FtZS1zaWduIHN0YWNraW5nIHdvdWxkIGhhbmcgYSBuZWdhdGl2ZSBiYXIgYmVsb3cgdGhlIGF4aXMgaW5zdGVhZC5cbmZ1bmN0aW9uIHdhdGVyZmFsbFNlcmllcyh3YXRlcmZhbGw6IEV4dHJhY3RlZFdhdGVyZmFsbCk6IFNlcmllc09wdGlvbltdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0eXBlOiAnYmFyJyxcbiAgICAgIHN0YWNrOiAnd2F0ZXJmYWxsJyxcbiAgICAgIHN0YWNrU3RyYXRlZ3k6ICdhbGwnLFxuICAgICAgZGF0YTogd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5zdGFydCksXG4gICAgICBiYXJNYXhXaWR0aDogNDgsXG4gICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd0cmFuc3BhcmVudCcgfSxcbiAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IHdhdGVyZmFsbC5uYW1lLFxuICAgICAgdHlwZTogJ2JhcicsXG4gICAgICBzdGFjazogJ3dhdGVyZmFsbCcsXG4gICAgICBzdGFja1N0cmF0ZWd5OiAnYWxsJyxcbiAgICAgIGJhck1heFdpZHRoOiA0OCxcbiAgICAgIC8vIFRoZSBzZXJpZXMgY29sb3IgaXMgdGhlIHJpc2UgY29sb3Igc28gYSBwaW5uZWQgbGVnZW5kIHNob3dzIGl0OyBlYWNoXG4gICAgICAvLyBiYXIgaXMgdGhlbiBjb2xvcmVkIGJ5IHdoYXQgaXQgZG9lcyB0byB0aGUgdG90YWwuIEEgY2xpY2sgb24gdGhlXG4gICAgICAvLyBjbG9zaW5nIFRvdGFsIGRvZXMgbm90aGluZywgc28gaXQga2VlcHMgdGhlIGFycm93IGV2ZW4gd2hlbiB0aGVcbiAgICAgIC8vIHN0ZXBzIHNob3cgYSBoYW5kICh3aXRoQ2xpY2tBY3Rpb25zKSwgYW5kIGl0cyB0b29sdGlwIG5hbWVzIG5vIGFjdGlvbi5cbiAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogYCMke1JFUE9SVF9XQVRFUkZBTExfQ09MT1JTLnJpc2V9YCB9LFxuICAgICAgZGF0YTogd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gKHtcbiAgICAgICAgdmFsdWU6IHN0ZXAuY2hhbmdlLFxuICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGAjJHtSRVBPUlRfV0FURVJGQUxMX0NPTE9SU1tzdGVwLmtpbmRdfWAgfSxcbiAgICAgICAgLi4uKHN0ZXAua2luZCA9PT0gJ3RvdGFsJyA/IHsgY3Vyc29yOiAnZGVmYXVsdCcgfSA6IHt9KSxcbiAgICAgIH0pKSxcbiAgICB9LFxuICBdO1xufVxuXG4vLyBBIHN0ZXAncyB0b29sdGlwOiBpdHMgcGVyaW9kLCBob3cgZmFyIGl0IG1vdmVkIHRoZSBydW5uaW5nIHRvdGFsIGFuZCB3aGVyZVxuLy8gdGhhdCBsZWZ0IGl0LiBUaGUgY2xvc2luZyBUb3RhbCBzaG93cyB0aGUgdG90YWwgYWxvbmUuIFRoZSBjYXRlZ29yeSBhbmQgdGhlXG4vLyBtZWFzdXJlIG5hbWUgY29tZSBmcm9tIHRoZSBkYXRhIGFuZCB0aGUgY29uZmlnLCBhbmQgRUNoYXJ0cyBzZXRzIHRoZSB0b29sdGlwXG4vLyBhcyBIVE1MLCBzbyBib3RoIGFyZSBlc2NhcGVkLiBQZXJpb2RzIGFuZCBhbW91bnRzIGFyZSB3cml0dGVuIGluIHRoZSByZXBvcnQnc1xuLy8gbG9jYWxlLCBhbW91bnRzIGluIHRoZSBtZWFzdXJlJ3MgbnVtYmVyIGZvcm1hdCAoYSBwbGFpbiBudW1iZXIgd2l0aG91dCBvbmUpO1xuLy8gdGhlIHdvcmRzICgnUnVubmluZyB0b3RhbCcpIHN0YXkgRW5nbGlzaC5cbmZ1bmN0aW9uIHdhdGVyZmFsbFRvb2x0aXAoXG4gIHdhdGVyZmFsbDogRXh0cmFjdGVkV2F0ZXJmYWxsLFxuICBpbmRleDogbnVtYmVyLFxuICBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwsXG4gIGRhdGVMYWJlbDogUmVwb3J0Q2hhcnREYXRlTGFiZWwsXG4gIHNwZWM6IE51bWJlckZvcm1hdFNwZWMgfCB1bmRlZmluZWQsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBzdHJpbmcge1xuICBjb25zdCBzdGVwID0gd2F0ZXJmYWxsLnN0ZXBzW2luZGV4XTtcbiAgY29uc3QgY2F0ZWdvcnkgPSBlc2NhcGVIdG1sKGdyYW51bGFyaXR5XG4gICAgPyBmb3JtYXRQZXJpb2RMYWJlbChzdGVwLmNhdGVnb3J5LCBncmFudWxhcml0eSwgdHJ1ZSwgY29udGV4dC5sb2NhbGUsIGRhdGVMYWJlbClcbiAgICA6IHN0ZXAuY2F0ZWdvcnkpO1xuICBjb25zdCBuYW1lID0gZXNjYXBlSHRtbCh3YXRlcmZhbGwubmFtZSk7XG4gIGNvbnN0IGFtb3VudCA9ICh2YWx1ZTogbnVtYmVyIHwgbnVsbCkgPT4gZm9ybWF0TnVtYmVyKHZhbHVlLCBzcGVjID8/IHt9LCBjb250ZXh0KTtcblxuICBpZiAoc3RlcC5raW5kID09PSAndG90YWwnKSB7XG4gICAgcmV0dXJuIGAke2NhdGVnb3J5fTxici8+JHtuYW1lfTogJHthbW91bnQoc3RlcC5jaGFuZ2UpfWA7XG4gIH1cblxuICBjb25zdCBzaWduID0gKHN0ZXAuY2hhbmdlID8/IDApID4gMCA/ICcrJyA6ICcnO1xuXG4gIHJldHVybiBgJHtjYXRlZ29yeX08YnIvPiR7bmFtZX06ICR7c2lnbn0ke2Ftb3VudChzdGVwLmNoYW5nZSl9YFxuICAgICsgYDxici8+UnVubmluZyB0b3RhbDogJHthbW91bnQoc3RlcC5zdGFydCArIChzdGVwLmNoYW5nZSA/PyAwKSl9YDtcbn1cblxuLy8gRGVmYXVsdCBsZWdlbmQgcGxhY2VtZW50IHdoZW4gdGhlIGNvbmZpZyBkb2Vzbid0IHBpbiBvbmU6IHBpZSBjaGFydHMgcmVhZFxuLy8gYmVzdCB3aXRoIHRoZSBzbGljZSBrZXkgYmVzaWRlIHRoZW0gKHJpZ2h0KTsgYXhpcyBjaGFydHMgb25seSBuZWVkIGEgbGVnZW5kXG4vLyB0byB0ZWxsIG11bHRpcGxlIHNlcmllcyBhcGFydCwgc28gYSBzaW5nbGUtc2VyaWVzIGNoYXJ0IGhpZGVzIGl0LiBBbiBleHBsaWNpdFxuLy8gY29uZmlnLmxlZ2VuZCAoaW5jbHVkaW5nICdoaWRkZW4nKSBhbHdheXMgd2lucy4gU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnRcbi8vIGV4cG9ydCBzbyBib3RoIG1lZGlhIHBsYWNlIHRoZSBsZWdlbmQgaWRlbnRpY2FsbHkuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKGNvbmZpZzogQ2hhcnRDb25maWcsIHNlcmllc0NvdW50OiBudW1iZXIsIGNvbG9yQnkgPSBmYWxzZSk6IExlZ2VuZFBvc2l0aW9uIHtcbiAgaWYgKGNvbmZpZy5sZWdlbmQpIHtcbiAgICByZXR1cm4gY29uZmlnLmxlZ2VuZDtcbiAgfVxuXG4gIGNvbnN0IHBpZSA9IGNvbmZpZy5jaGFydFR5cGUgPT09ICdwaWUnIHx8IGNvbmZpZy5jaGFydFR5cGUgPT09ICdkb251dCc7XG5cbiAgLy8gY29sb3JCeSBtYXBzIGVhY2ggYmFyJ3MgY29sb3IgdG8gaXRzIGNhdGVnb3J5LCBzbyBpdCBuZWVkcyBhIGxlZ2VuZCBldmVuXG4gIC8vIHRob3VnaCBpdCdzIGEgc2luZ2xlIG1lYXN1cmUuXG4gIHJldHVybiBwaWUgfHwgY29sb3JCeSB8fCBzZXJpZXNDb3VudCA+IDEgPyAocGllID8gJ3JpZ2h0JyA6ICd0b3AnKSA6ICdoaWRkZW4nO1xufVxuXG4vLyBUaGUgdmlld2VyJ3MgbGVnZW5kIHBpY2tzIGNhcnJpZWQgaW50byBhbiBvcHRpb24gKGxlZ2VuZC5zZWxlY3RlZCk6IEVDaGFydHNcbi8vIHJlYWRzIHRoZW0gYnkgZW50cnkgbmFtZSwgYW4gZW50cnkgbm90IG5hbWVkIHN0YXlzIG9uLCBhbmQgYSBuYW1lIHRoZVxuLy8gY2hhcnQgbm8gbG9uZ2VyIGRyYXdzIGlzIGlnbm9yZWQuIEEgaGlkZGVuIGxlZ2VuZCB0YWtlcyBub25lLCBzbyBhIHNlcmllc1xuLy8gbmV2ZXIgc3RheXMgb2ZmIG9uY2UgaXRzIGxlZ2VuZCBpcyBnb25lIGFuZCBub3RoaW5nIGNhbiB0dXJuIGl0IGJhY2sgb24uXG5mdW5jdGlvbiBsZWdlbmRXaXRoU2VsZWN0ZWQob3B0aW9uOiBFQ2hhcnRzT3B0aW9uLCBzZWxlY3RlZDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KTogRUNoYXJ0c09wdGlvbiB7XG4gIGNvbnN0IGxlZ2VuZCA9IG9wdGlvbi5sZWdlbmQ7XG5cbiAgaWYgKCFPYmplY3Qua2V5cyhzZWxlY3RlZCkubGVuZ3RoIHx8ICFsZWdlbmQgfHwgQXJyYXkuaXNBcnJheShsZWdlbmQpIHx8IGxlZ2VuZC5zaG93ID09PSBmYWxzZSkge1xuICAgIHJldHVybiBvcHRpb247XG4gIH1cblxuICByZXR1cm4geyAuLi5vcHRpb24sIGxlZ2VuZDogeyAuLi5sZWdlbmQsIHNlbGVjdGVkOiB7IC4uLnNlbGVjdGVkIH0gfSB9O1xufVxuXG5mdW5jdGlvbiBsZWdlbmRPcHRpb24ocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uKTogTGVnZW5kQ29tcG9uZW50T3B0aW9uIHtcbiAgaWYgKHBvc2l0aW9uID09PSAnaGlkZGVuJykge1xuICAgIHJldHVybiB7IHNob3c6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBiYXNlOiBMZWdlbmRDb21wb25lbnRPcHRpb24gPSB7IHR5cGU6ICdzY3JvbGwnIH07XG5cbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IDAgfTtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIG9yaWVudDogJ3ZlcnRpY2FsJywgbGVmdDogMCwgdG9wOiAnbWlkZGxlJyB9O1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIG9yaWVudDogJ3ZlcnRpY2FsJywgcmlnaHQ6IDAsIHRvcDogJ21pZGRsZScgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiAwIH07XG4gIH1cbn1cblxuLy8gVGhlIHBsb3QncyBncmlkOiByb29tIG9uIHRoZSBsZWdlbmQncyBzaWRlIHNvIGl0IG5ldmVyIG92ZXJsYXBzIHRoZVxuLy8gYmFycy9saW5lcywgcGx1cyByb29tIGZvciB0aGUgY2F0ZWdvcnkgYW5kIHZhbHVlIGF4ZXMnIHRpdGxlcyBvbiB0aGVpclxuLy8gc2lkZXMsIHdoaWNoIGNvbnRhaW5MYWJlbCBkb2VzIG5vdCByZXNlcnZlIChpdCBjb3ZlcnMgdGhlIHRpY2sgbGFiZWxzIG9ubHkpLlxuZnVuY3Rpb24gYXhpc0dyaWQoXG4gIHBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbixcbiAgY2F0ZWdvcnlUaXRsZTogQXhpc1RpdGxlU2lkZSB8IG51bGwsXG4gIHZhbHVlVGl0bGU6IEF4aXNUaXRsZVNpZGUgfCBudWxsLFxuKTogRUNoYXJ0c09wdGlvblsnZ3JpZCddIHtcbiAgcmV0dXJuIFtjYXRlZ29yeVRpdGxlLCB2YWx1ZVRpdGxlXS5yZWR1Y2U8QXhpc0dyaWRSb29tPihcbiAgICAoZ3JpZCwgc2lkZSkgPT4gKHNpZGUgPyB7IC4uLmdyaWQsIFtzaWRlXTogZ3JpZFtzaWRlXSArIEFYSVNfTkFNRV9ST09NIH0gOiBncmlkKSxcbiAgICBsZWdlbmRHcmlkKHBvc2l0aW9uKSxcbiAgKTtcbn1cblxuLy8gUGxvdC1lZGdlIHJvb20gb24gd2hpY2hldmVyIHNpZGUgdGhlIGxlZ2VuZCBvY2N1cGllczsgY29udGFpbkxhYmVsIGtlZXBzIHRoZVxuLy8gdGljayBsYWJlbHMgaW5zaWRlIHdoYXQgaXMgbGVmdC5cbmZ1bmN0aW9uIGxlZ2VuZEdyaWQocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uKTogQXhpc0dyaWRSb29tIHtcbiAgY29uc3QgYmFzZTogQXhpc0dyaWRSb29tID0geyBsZWZ0OiA4LCByaWdodDogMTYsIHRvcDogOCwgYm90dG9tOiA4LCBjb250YWluTGFiZWw6IHRydWUgfTtcblxuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogMzIgfTtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGxlZnQ6IDk2IH07XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgcmlnaHQ6IDk2IH07XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IDMyIH07XG4gIH1cbn1cblxuLy8gVGhlIHN0YWNrIGEgc3RhY2tlZCBzZXJpZXMgam9pbnMuIE9uIGEgdHdvLWF4aXMgY2hhcnQgKGF4aXNJbmRleCBzZXQpIGVhY2hcbi8vIHR5cGUgc3RhY2tzIHBlciBheGlzOyBvdGhlcndpc2UgYSBjb21ibyBzdGFja3MgcGVyIHR5cGUgYW5kIGEgc2luZ2xlLXR5cGVcbi8vIGNoYXJ0IHN0YWNrcyBldmVyeXRoaW5nIHRvZ2V0aGVyLlxuZnVuY3Rpb24gc3RhY2tLZXkodHlwZTogQXhpc0NoYXJ0VHlwZSwgY29tYm86IGJvb2xlYW4sIGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXggfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoYXhpc0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYHRvdGFsLSR7dHlwZX0tJHtheGlzSW5kZXh9YDtcbiAgfVxuXG4gIHJldHVybiBjb21ibyA/IGB0b3RhbC0ke3R5cGV9YCA6ICd0b3RhbCc7XG59XG5cbi8vIEhvdyBidWlsZFNlcmllcyBkcmF3cyBvbmUgc2VyaWVzOiBpdHMgZHJhd24gdHlwZSwgdGhlIHN0YWNrIGl0IGpvaW5zLCB3aGV0aGVyXG4vLyBpdCBsYXlzIHRoZSBjb2xvckJ5IG92ZXJsYXAsIHdoZXRoZXIgdGhlIGNoYXJ0IGlzIGEgY29tYm8sIGl0cyB0b29sdGlwLCBpdHNcbi8vIHZhbHVlIGF4aXMgb24gYSB0d28tYXhpcyBjaGFydCwgaXRzIG93biBDU1MgY29sb3IgKHVuZGVmaW5lZCBsZWF2ZXMgaXQgdG9cbi8vIHRoZSB0aGVtZSdzIHBhbGV0dGUgYnkgcG9zaXRpb24pLCBhbmQgaXRzIGRhdGEgbGFiZWxzIChudWxsIHByaW50cyBub25lKS5cbmludGVyZmFjZSBTZXJpZXNMYXlvdXQge1xuICB0eXBlOiBBeGlzQ2hhcnRUeXBlO1xuICBzdGFjazogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvdmVybGFwOiBib29sZWFuO1xuICBjb21ibzogYm9vbGVhbjtcbiAgdG9vbHRpcDogU2VyaWVzVG9vbHRpcDtcbiAgYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCB8IHVuZGVmaW5lZDtcbiAgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGFiZWxzOiBTZXJpZXNEYXRhTGFiZWxzIHwgbnVsbDtcbn1cblxuLy8gT25lIHNlcmllcyBvZiBhbiBheGlzIGNoYXJ0LiBBIG1lYXN1cmUncyBkaXNwbGF5IGtleXMgb25seSBhZGQgd2hhdCB0aGV5XG4vLyBjaGFuZ2UsIHNvIGEgc2VyaWVzIHRoYXQgc2V0cyBub25lIGlzIGRyYXduIGJ5IHRoZSB0aGVtZSBhcyBiZWZvcmU6IGl0cyBvd25cbi8vIGNvbG9yICh0aGUgYmFyLCB0aGUgbGluZSwgdGhlIGFyZWEgdW5kZXIgaXQgYW5kIGl0cyBsZWdlbmQga2V5IGFsbCBmb2xsb3dcbi8vIGl0ZW1TdHlsZSksIGl0cyBsaW5lIHN0eWxlIGFuZCBpdHMgbWFya2Vycywgc2hvd24gb24gZXZlcnkgcG9pbnQgdW5sZXNzXG4vLyBtYXJrZXJzIGlzIGZhbHNlLiBEYXRhIGxhYmVscyBjb21lIGxhc3QsIG9uIHRoZSBzZXJpZXMgb3Igb24gaXRzIGxhdGVzdFxuLy8gcG9pbnQuXG5mdW5jdGlvbiBidWlsZFNlcmllcyhcbiAgc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0sXG4gIHZhbHVlczogKG51bWJlciB8IG51bGwgfCBTaGFyZURhdGFJdGVtKVtdLFxuICBsYXlvdXQ6IFNlcmllc0xheW91dCxcbik6IFNlcmllc09wdGlvbiB7XG4gIC8vIE9uIGEgdHdvLWF4aXMgY2hhcnQgZXZlcnkgc2VyaWVzIG5hbWVzIGl0cyB2YWx1ZSBheGlzLlxuICBjb25zdCBheGlzID0gbGF5b3V0LmF4aXNJbmRleCA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHlBeGlzSW5kZXg6IGxheW91dC5heGlzSW5kZXggfTtcbiAgY29uc3QgY29sb3IgPSBsYXlvdXQuY29sb3I7XG4gIGNvbnN0IGl0ZW1TdHlsZSA9IGNvbG9yID8geyBpdGVtU3R5bGU6IHsgY29sb3IgfSB9IDoge307XG5cbiAgaWYgKGxheW91dC50eXBlID09PSAnYmFyJykge1xuICAgIC8vICdvdXRzaWRlJyBmb2xsb3dzIGVhY2ggYmFyJ3Mgc2lnbjogcGFzdCBhIHBvc2l0aXZlIGJhcidzIGVuZCBhbmQgYmVsb3dcbiAgICAvLyAob3IgbGVmdCBvZikgYSBuZWdhdGl2ZSBvbmUncywgd2hlcmUgJ3RvcCcgd291bGQgc2l0IGF0IHRoZSB6ZXJvIGxpbmUuXG4gICAgY29uc3QgeyBzZXJpZXM6IGxhYmVscywgZGF0YSB9ID0gcGxhY2VEYXRhTGFiZWxzKGxheW91dC5sYWJlbHMsIGxheW91dC5zdGFjayA/ICdpbnNpZGUnIDogJ291dHNpZGUnLCB2YWx1ZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHNlcmllcy5uYW1lLFxuICAgICAgdHlwZTogJ2JhcicsXG4gICAgICBkYXRhLFxuICAgICAgc3RhY2s6IGxheW91dC5zdGFjayxcbiAgICAgIHRvb2x0aXA6IGxheW91dC50b29sdGlwLFxuICAgICAgLi4uYXhpcyxcbiAgICAgIC4uLml0ZW1TdHlsZSxcbiAgICAgIGJhck1heFdpZHRoOiA0OCxcbiAgICAgIC8vIGNvbG9yQnk6IG92ZXJsYXAgdGhlIHBlci1jYXRlZ29yeSBzZXJpZXMgc28gZWFjaCBiYXIgcmVuZGVycyBmdWxsLXdpZHRoLlxuICAgICAgLi4uKGxheW91dC5vdmVybGFwID8geyBiYXJHYXA6ICctMTAwJScsIGJhckNhdGVnb3J5R2FwOiAnMjAlJyB9IDoge30pLFxuICAgICAgLi4ubGFiZWxzLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBsaW5lVHlwZSA9IG1lYXN1cmVMaW5lU3R5bGUoc2VyaWVzLm1lYXN1cmUpO1xuICBjb25zdCBsaW5lU3R5bGUgPSBjb2xvciB8fCBsaW5lVHlwZVxuICAgID8geyBsaW5lU3R5bGU6IHsgLi4uKGNvbG9yID8geyBjb2xvciB9IDoge30pLCAuLi4obGluZVR5cGUgPyB7IHR5cGU6IGxpbmVUeXBlIH0gOiB7fSkgfSB9XG4gICAgOiB7fTtcbiAgY29uc3QgeyBzZXJpZXM6IGxhYmVscywgZGF0YSB9ID0gcGxhY2VEYXRhTGFiZWxzKGxheW91dC5sYWJlbHMsICd0b3AnLCB2YWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogc2VyaWVzLm5hbWUsXG4gICAgdHlwZTogJ2xpbmUnLFxuICAgIGRhdGEsXG4gICAgc3RhY2s6IGxheW91dC5zdGFjayxcbiAgICB0b29sdGlwOiBsYXlvdXQudG9vbHRpcCxcbiAgICAuLi5heGlzLFxuICAgIC4uLml0ZW1TdHlsZSxcbiAgICAuLi5saW5lU3R5bGUsXG4gICAgLi4uKHNlcmllcy5tZWFzdXJlLm1hcmtlcnMgPT09IGZhbHNlID8geyBzaG93U3ltYm9sOiBmYWxzZSB9IDoge30pLFxuICAgIHNtb290aDogdHJ1ZSxcbiAgICBzeW1ib2xTaXplOiA2LFxuICAgIGFyZWFTdHlsZTogbGF5b3V0LnR5cGUgPT09ICdhcmVhJyA/IHsgb3BhY2l0eTogMC4yNSB9IDogdW5kZWZpbmVkLFxuICAgIC8vIEluIGEgY29tYm8gdGhlIGxpbmUgaXMgZHJhd24gb3ZlciB0aGUgYmFycyB3aGF0ZXZlciBvcmRlciB0aGUgbWVhc3VyZXNcbiAgICAvLyBjb21lIGluOyBhdCB0aGUgc2FtZSB6IGEgbGF0ZXIgYmFyIHNlcmllcyB3b3VsZCBwYWludCBhY3Jvc3MgaXQuXG4gICAgLi4uKGxheW91dC5jb21ibyA/IHsgejogMyB9IDoge30pLFxuICAgIC4uLmxhYmVscyxcbiAgfTtcbn1cblxuLy8gQSAxMDAlIHN0YWNrZWQgc2VyaWVzJyBwb2ludHM6IGVhY2ggc2hhcmUsIHBsb3R0ZWQgYW5kIHN0YWNrZWQsIHdpdGggdGhlXG4vLyB2YWx1ZSBpdCBjYW1lIGZyb20uXG5mdW5jdGlvbiBzaGFyZURhdGEodmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSwgc2hhcmVzOiAobnVtYmVyIHwgbnVsbClbXSk6IFNoYXJlRGF0YUl0ZW1bXSB7XG4gIHJldHVybiB2YWx1ZXMubWFwKChyYXcsIGluZGV4KSA9PiAoeyB2YWx1ZTogc2hhcmVzW2luZGV4XSA/PyBudWxsLCByYXcgfSkpO1xufVxuXG4vLyBXaGF0IGEgc2VyaWVzIHByaW50cyBiZXNpZGUgaXRzIHBvaW50cyAoQTIgZGF0YSBsYWJlbHMpOiBldmVyeSBwb2ludFxuLy8gKCdhbGwnKSwgZXZlcnkgcG9pbnQgd2hvc2UgbGFiZWwgZml0cyB3aXRob3V0IG92ZXJsYXBwaW5nIGFub3RoZXIgKCdhdXRvJyxcbi8vIExhYmVsTGF5b3V0J3MgaGlkZU92ZXJsYXApLCBvciBvbmx5IGl0cyBsYXRlc3QgcG9pbnQgKCdsYXN0JykuIG5vbmUsIGFuXG4vLyBhYnNlbnQgbW9kZSBvciBvbmUgdGhlIHZpZXdlciBkb2VzIG5vdCBrbm93IHByaW50cyBub3RoaW5nLCBhbmQgdGhlIHNlcmllc1xuLy8gaXMgbGVmdCBhcyBpdCB3YXMuIEEgY29sb3JCeSBjaGFydCdzIHNlcmllcyBlYWNoIGhvbGQgb25lIGJhciwgc28gJ2xhc3QnXG4vLyBsYWJlbHMgZXZlcnkgYmFyIHRoZXJlLCBhcyAnYWxsJyBkb2VzLlxuLy9cbi8vIFdoZXJlIHRoZSBsYWJlbCBzaXRzIGRlcGVuZHMgb24gd2hhdCB0aGUgc2VyaWVzIGRyYXdzLCBzbyBidWlsZFNlcmllc1xuLy8gcGxhY2VzIGl0IChwbGFjZURhdGFMYWJlbHMpLlxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFMYWJlbE9wdGlvbihcbiAgbW9kZTogUmVwb3J0Q2hhcnREYXRhTGFiZWxzIHwgdW5kZWZpbmVkLFxuICBmb3JtYXR0ZXI6IERhdGFMYWJlbEZvcm1hdHRlcixcbik6IFNlcmllc0RhdGFMYWJlbHMgfCBudWxsIHtcbiAgY29uc3QgdGV4dCA9IHsgc2hvdzogdHJ1ZSBhcyBjb25zdCwgZm9udFNpemU6IFJFUE9SVF9EQVRBX0xBQkVMX0ZPTlRfU0laRSwgZm9ybWF0dGVyIH07XG5cbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSBSZXBvcnRDaGFydERhdGFMYWJlbHMuQWxsOlxuICAgICAgcmV0dXJuIHsgdGV4dCwgaGlkZU92ZXJsYXA6IGZhbHNlLCBsYXN0T25seTogZmFsc2UgfTtcbiAgICBjYXNlIFJlcG9ydENoYXJ0RGF0YUxhYmVscy5BdXRvOlxuICAgICAgcmV0dXJuIHsgdGV4dCwgaGlkZU92ZXJsYXA6IHRydWUsIGxhc3RPbmx5OiBmYWxzZSB9O1xuICAgIGNhc2UgUmVwb3J0Q2hhcnREYXRhTGFiZWxzLkxhc3Q6XG4gICAgICByZXR1cm4geyB0ZXh0LCBoaWRlT3ZlcmxhcDogZmFsc2UsIGxhc3RPbmx5OiB0cnVlIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vIEEgc2VyaWVzJyBkYXRhIGxhYmVscyBhdCBgcG9zaXRpb25gOiBvbiB0aGUgc2VyaWVzICgnYWxsJywgYW5kIHdpdGggdGhlXG4vLyBvdmVybGFwIGhpZGluZyAnYXV0bycpLCBvciBvbiBpdHMgbGF0ZXN0IG5vbi1lbXB0eSBwb2ludCBhbG9uZSAoJ2xhc3QnKS5cbi8vIE5vIGxhYmVscyBsZWF2ZSB0aGUgc2VyaWVzIGFuZCBpdHMgcG9pbnRzIGFzIHRoZXkgd2VyZS5cbmZ1bmN0aW9uIHBsYWNlRGF0YUxhYmVsczxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24+KFxuICBsYWJlbHM6IFNlcmllc0RhdGFMYWJlbHMgfCBudWxsLFxuICBwb3NpdGlvbjogUCxcbiAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbCB8IFNoYXJlRGF0YUl0ZW0pW10sXG4pOiBQbGFjZWREYXRhTGFiZWxzPFA+IHtcbiAgaWYgKCFsYWJlbHMpIHtcbiAgICByZXR1cm4geyBzZXJpZXM6IHt9LCBkYXRhOiB2YWx1ZXMgfTtcbiAgfVxuXG4gIGNvbnN0IGxhYmVsOiBEYXRhTGFiZWw8UD4gPSB7IC4uLmxhYmVscy50ZXh0LCBwb3NpdGlvbiB9O1xuXG4gIGlmIChsYWJlbHMubGFzdE9ubHkpIHtcbiAgICByZXR1cm4geyBzZXJpZXM6IHt9LCBkYXRhOiBsYWJlbExhc3RQb2ludCh2YWx1ZXMsIGxhYmVsKSB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXJpZXM6IHsgbGFiZWwsIC4uLihsYWJlbHMuaGlkZU92ZXJsYXAgPyB7IGxhYmVsTGF5b3V0OiB7IGhpZGVPdmVybGFwOiB0cnVlIH0gfSA6IHt9KSB9LFxuICAgIGRhdGE6IHZhbHVlcyxcbiAgfTtcbn1cblxuLy8gQSBzZXJpZXMnIHBvaW50cyB3aXRoIGl0cyBsYXRlc3Qgbm9uLWVtcHR5IHBvaW50IGNhcnJ5aW5nIHRoZSBsYWJlbC4gQVxuLy8gc2VyaWVzIHdpdGggbm8gdmFsdWUgYW55d2hlcmUgaXMgbGVmdCBhcyBpdCB3YXMuXG5mdW5jdGlvbiBsYWJlbExhc3RQb2ludDxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24+KFxuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsIHwgU2hhcmVEYXRhSXRlbSlbXSxcbiAgbGFiZWw6IERhdGFMYWJlbDxQPixcbik6IFNlcmllc0RhdGFJdGVtPFA+W10ge1xuICBjb25zdCBsYXN0ID0gdmFsdWVzLnJlZHVjZTxudW1iZXI+KChmb3VuZCwgaXRlbSwgaW5kZXgpID0+IChwb2ludFZhbHVlKGl0ZW0pID09PSBudWxsID8gZm91bmQgOiBpbmRleCksIC0xKTtcblxuICByZXR1cm4gdmFsdWVzLm1hcCgoaXRlbSwgaW5kZXgpOiBTZXJpZXNEYXRhSXRlbTxQPiA9PiB7XG4gICAgaWYgKGluZGV4ICE9PSBsYXN0KSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNTaGFyZURhdGFJdGVtKGl0ZW0pID8geyAuLi5pdGVtLCBsYWJlbCB9IDogeyB2YWx1ZTogaXRlbSwgbGFiZWwgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzU2hhcmVEYXRhSXRlbShpdGVtOiBudW1iZXIgfCBudWxsIHwgU2hhcmVEYXRhSXRlbSk6IGl0ZW0gaXMgU2hhcmVEYXRhSXRlbSB7XG4gIHJldHVybiBpdGVtICE9PSBudWxsICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jztcbn1cblxuLy8gSG93IGEgc2VyaWVzJyBkYXRhIGxhYmVscyB3cml0ZSBhIHZhbHVlLiBBIDEwMCUgc3RhY2tlZCBzZXJpZXMgcHJpbnRzIGl0c1xuLy8gc2hhcmUgYXMgYSB3aG9sZSBwZXJjZW50YWdlLCBhcyB0aGUgc2hhcmUgYXhpcydzIHRpY2tzIGRvLiBBIHNlcmllcyBvbiBhblxuLy8gYXhpcyB3aXRoIGEgbnVtYmVyIGZvcm1hdCBwcmludHMgaXRzIHZhbHVlIGluIGl0cyBtZWFzdXJlJ3MgZm9ybWF0LCBhdCB0aGVcbi8vIHVuaXRzIGFuZCBkZWNpbWFscyB0aGUgYXhpcyBkZWNpZGVkLCBzbyBhIGxhYmVsIHJlYWRzIGxpa2UgdGhlIHRpY2tzIGJlc2lkZVxuLy8gaXQuIEFueSBvdGhlciBwcmludHMgdGhlIHBsYWluIGxvY2FsZS1ncm91cGVkIG51bWJlciBpdHMgdG9vbHRpcCBzaG93cy4gQVxuLy8gc2hhcmUgcG9pbnQncyByYXcgdmFsdWUgaXMgd2hhdCBhIGxhYmVsIHJlYWRzIHdoZW4gaXQgY2FycmllcyBvbmUuXG5mdW5jdGlvbiBkYXRhTGFiZWxGb3JtYXR0ZXIoXG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSxcbiAgYXhpc0Zvcm1hdDogVmFsdWVBeGlzRm9ybWF0IHwgbnVsbCxcbiAgc2hhcmU6IGJvb2xlYW4sXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBEYXRhTGFiZWxGb3JtYXR0ZXIge1xuICBpZiAoc2hhcmUpIHtcbiAgICBjb25zdCBwZXJjZW50ID0gd2hvbGVQZXJjZW50Rm9ybWF0dGVyKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIChwYXJhbXMpID0+IHBlcmNlbnQocGFyYW1zLnZhbHVlKTtcbiAgfVxuXG4gIGlmIChheGlzRm9ybWF0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgdW5pdHM6IGF4aXNGb3JtYXQuY2hhcnQudW5pdHMsIGRlY2ltYWxzOiBheGlzRm9ybWF0LmNoYXJ0LmRlY2ltYWxzIH07XG5cbiAgICByZXR1cm4gKHBhcmFtcykgPT4gZm9ybWF0TnVtYmVyKGRhdGFMYWJlbFZhbHVlKHBhcmFtcyksIG1lYXN1cmUsIGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIChwYXJhbXMpID0+IGZvcm1hdFBsYWluTnVtYmVyKGRhdGFMYWJlbFZhbHVlKHBhcmFtcyksIGNvbnRleHQubG9jYWxlKTtcbn1cblxuLy8gVGhlIHZhbHVlIGEgZGF0YSBsYWJlbCB3cml0ZXM6IHRoZSByYXcgdmFsdWUgaXRzIHBvaW50IGNhcnJpZXMsIGVsc2UgdGhlXG4vLyBwbG90dGVkIG9uZS5cbmZ1bmN0aW9uIGRhdGFMYWJlbFZhbHVlKHBhcmFtczogRGF0YUxhYmVsUGFyYW1zKTogdW5rbm93biB7XG4gIGNvbnN0IGRhdGEgPSBwYXJhbXMuZGF0YTtcbiAgY29uc3QgcmF3ID0gZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyAoZGF0YSBhcyB7IHJhdz86IHVua25vd24gfSkucmF3IDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiByYXcgPz8gcGFyYW1zLnZhbHVlO1xufVxuXG4vLyBBIDEwMCUgc3RhY2tlZCBjaGFydCdzIHRvb2x0aXA6IHRoZSBjYXRlZ29yeSwgdGhlbiBlYWNoIHNlcmllcyBvbiBpdHMgb3duXG4vLyBsaW5lLCBhIHNoYXJlIGFzIGl0cyBwZXJjZW50YWdlIHRvIG9uZSBkZWNpbWFsIGZvbGxvd2VkIGJ5IHRoZSB2YWx1ZSBpdCBjYW1lXG4vLyBmcm9tIGluIGl0cyBtZWFzdXJlJ3MgZm9ybWF0ICgnMjUuMCUgKDEpJyksIGFuZCBhbnkgb3RoZXIgc2VyaWVzIGJ5IGl0cyBvd25cbi8vIHZhbHVlLiBUaGUgY2F0ZWdvcnkgYW5kIHRoZSBzZXJpZXMgbmFtZXMgY29tZSBmcm9tIHRoZSBkYXRhIGFuZCB0aGUgY29uZmlnLFxuLy8gYW5kIEVDaGFydHMgc2V0cyB0aGUgdG9vbHRpcCBhcyBIVE1MLCBzbyBib3RoIGFyZSBlc2NhcGVkLlxuZnVuY3Rpb24gcGVyY2VudFRvb2x0aXAoXG4gIHBhcmFtczogVG9vbHRpcENvbXBvbmVudEZvcm1hdHRlckNhbGxiYWNrUGFyYW1zLFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMsXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCxcbiAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zIDogW3BhcmFtc107XG4gIGNvbnN0IGRhdGFJbmRleCA9IGl0ZW1zWzBdPy5kYXRhSW5kZXggPz8gMDtcbiAgY29uc3QgY2F0ZWdvcnkgPSBleHRyYWN0ZWQuY2F0ZWdvcmllc1tkYXRhSW5kZXhdID8/ICcnO1xuICBjb25zdCBoZWFkaW5nID0gZXNjYXBlSHRtbChncmFudWxhcml0eVxuICAgID8gZm9ybWF0UGVyaW9kTGFiZWwoY2F0ZWdvcnksIGdyYW51bGFyaXR5LCB0cnVlLCBjb250ZXh0LmxvY2FsZSwgZGF0ZUxhYmVsKVxuICAgIDogY2F0ZWdvcnkpO1xuICBjb25zdCByYXRpb0NvbnRleHQgPSB7IC4uLmNvbnRleHQsIHJhdGlvUGVyY2VudDogdHJ1ZSB9O1xuXG4gIGNvbnN0IGxpbmVzID0gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgY29uc3Qgc2VyaWVzID0gZXh0cmFjdGVkLnNlcmllc1tpdGVtLnNlcmllc0luZGV4ID8/IC0xXTtcbiAgICBjb25zdCBtYXJrZXIgPSB0eXBlb2YgaXRlbS5tYXJrZXIgPT09ICdzdHJpbmcnID8gaXRlbS5tYXJrZXIgOiAnJztcbiAgICBjb25zdCBsYWJlbCA9IGAke21hcmtlcn0gJHtlc2NhcGVIdG1sKGl0ZW0uc2VyaWVzTmFtZSA/PyBzZXJpZXM/Lm5hbWUgPz8gJycpfWA7XG4gICAgY29uc3QgdmFsdWUgPSBzZXJpZXNUb29sdGlwKHNlcmllcz8ubWVhc3VyZSwgY29udGV4dCkudmFsdWVGb3JtYXR0ZXIoc2VyaWVzPy52YWx1ZXNbaXRlbS5kYXRhSW5kZXhdID8/IG51bGwpO1xuICAgIGNvbnN0IHNoYXJlID0gc2hhcmVzLmdldChpdGVtLnNlcmllc0luZGV4ID8/IC0xKT8uW2l0ZW0uZGF0YUluZGV4XSA/PyBudWxsO1xuXG4gICAgcmV0dXJuIHNoYXJlID09PSBudWxsXG4gICAgICA/IGAke2xhYmVsfTogJHt2YWx1ZX1gXG4gICAgICA6IGAke2xhYmVsfTogJHtmb3JtYXROdW1iZXIoc2hhcmUsIFBFUkNFTlRfU0hBUkVfRk9STUFULCByYXRpb0NvbnRleHQpfSAoJHt2YWx1ZX0pYDtcbiAgfSk7XG5cbiAgcmV0dXJuIFtoZWFkaW5nLCAuLi5saW5lc10uam9pbignPGJyLz4nKTtcbn1cblxuLy8gQSB2YWx1ZSBheGlzOiBpdHMgdGl0bGUgYW5kIHJhbmdlIGZyb20gdGhlIGNvbmZpZywgaXRzIHRpY2sgbGFiZWxzIGZyb21cbi8vIHZhbHVlQXhpc0xhYmVsLiBBIHZlcnRpY2FsIGNoYXJ0J3MgdGl0bGUgc2l0cyBhYm92ZSB0aGUgYXhpcyBsaW5lLCByZWFkaW5nXG4vLyBhd2F5IGZyb20gdGhlIHBsb3QncyBlZGdlOyBhIGhvcml6b250YWwgY2hhcnQncyBpcyBjZW50ZXJlZCBiZWxvdyB0aGUgdGlja3MuXG4vLyBBIGJvdW5kIG9yIGludGVydmFsIHRoYXQgaXMgbm90IGEgdXNhYmxlIG51bWJlciBpcyBsZWZ0IHRvIEVDaGFydHMuIEEgMTAwJVxuLy8gc3RhY2tlZCBjaGFydCdzIHNoYXJlIGF4aXMgKGV4dHJhcy5wZXJjZW50TWluKSBoYXMgaXRzIG93biBmaXhlZCByYW5nZS5cbmZ1bmN0aW9uIHZhbHVlQXhpc09wdGlvbihcbiAgYXhpczogQ2hhcnRWYWx1ZUF4aXMgfCB1bmRlZmluZWQsXG4gIGhvcml6b250YWw6IGJvb2xlYW4sXG4gIGF4aXNMYWJlbDogVmFsdWVBeGlzTGFiZWwsXG4gIGV4dHJhczogVmFsdWVBeGlzRXh0cmFzID0ge30sXG4pIHtcbiAgY29uc3QgcmFuZ2UgPSBleHRyYXMucGVyY2VudE1pbiA9PT0gdW5kZWZpbmVkXG4gICAgPyB2YWx1ZUF4aXNSYW5nZShheGlzKVxuICAgIDogeyBtaW46IGV4dHJhcy5wZXJjZW50TWluLCBtYXg6IFBFUkNFTlRfQVhJU19NQVgsIGludGVydmFsOiBQRVJDRU5UX0FYSVNfSU5URVJWQUwgfTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICd2YWx1ZScgYXMgY29uc3QsXG4gICAgbmFtZTogYXhpcz8ubGFiZWwgfHwgdW5kZWZpbmVkLFxuICAgIG5hbWVMb2NhdGlvbjogaG9yaXpvbnRhbCA/ICdtaWRkbGUnIGFzIGNvbnN0IDogJ2VuZCcgYXMgY29uc3QsXG4gICAgbmFtZUdhcDogaG9yaXpvbnRhbCA/IDI4IDogMTAsXG4gICAgbmFtZVRleHRTdHlsZTogaG9yaXpvbnRhbCA/IHVuZGVmaW5lZCA6IHsgYWxpZ246IGV4dHJhcy5pbmRleCA9PT0gMSA/ICdyaWdodCcgYXMgY29uc3QgOiAnbGVmdCcgYXMgY29uc3QgfSxcbiAgICAvLyBBIHBpbm5lZCBib3VuZCB3aW5zOyBvbmUgbGVmdCBvcGVuIHJlYWNoZXMgdGhlIHJlZmVyZW5jZXMgKHJlYWNoTWluKSxcbiAgICAvLyBvciBvbiBhIHJhbmsgYXhpcyBzdGFydHMgYXQgcmFuayAxLlxuICAgIG1pbjogcmFuZ2UubWluID8/IChleHRyYXMucmFuayA/IFJBTktfQVhJU19NSU4gOiByZWFjaE1pbihleHRyYXMucmVhY2gpKSxcbiAgICBtYXg6IHJhbmdlLm1heCA/PyByZWFjaE1heChleHRyYXMucmVhY2gpLFxuICAgIGludGVydmFsOiByYW5nZS5pbnRlcnZhbCxcbiAgICBheGlzTGFiZWwsXG4gICAgLi4uKGV4dHJhcy5yYW5rID8geyBpbnZlcnNlOiB0cnVlLCBtaW5JbnRlcnZhbDogMSB9IDoge30pLFxuICB9O1xufVxuXG4vLyBUaGUgcGFydCBvZiBhIHZhbHVlIGF4aXMncyByYW5nZSB0aGUgY29uZmlnIHBpbnMuIEEgYm91bmQgdGhhdCBpcyBub3QgYVxuLy8gZmluaXRlIG51bWJlciwgb3IgYW4gaW50ZXJ2YWwgdGhhdCBpcyBub3QgYSBwb3NpdGl2ZSBvbmUsIGlzIGxlZnQgb3V0LCBhbmRcbi8vIHRoZSBjaGFydCBwaWNrcyBpdCBmcm9tIHRoZSBkYXRhLiBTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludCBleHBvcnQgc28gYm90aFxuLy8gbWVkaWEgZHJhdyB0aGUgc2FtZSByYW5nZS5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUF4aXNSYW5nZShheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCk6IHsgbWluPzogbnVtYmVyOyBtYXg/OiBudW1iZXI7IGludGVydmFsPzogbnVtYmVyIH0ge1xuICBjb25zdCBpbnRlcnZhbCA9IGF4aXNOdW1iZXIoYXhpcz8uaW50ZXJ2YWwpO1xuXG4gIHJldHVybiB7XG4gICAgbWluOiBheGlzTnVtYmVyKGF4aXM/Lm1pbiksXG4gICAgbWF4OiBheGlzTnVtYmVyKGF4aXM/Lm1heCksXG4gICAgaW50ZXJ2YWw6IGludGVydmFsICE9PSB1bmRlZmluZWQgJiYgaW50ZXJ2YWwgPiAwID8gaW50ZXJ2YWwgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8vIEEgdHdvLWF4aXMgY2hhcnQncyB2YWx1ZSBheGVzOiB0aGUgcHJpbWFyeSBvbiB0aGUgbGVmdCwgdGhlIHNlY29uZCBvbiB0aGVcbi8vIHJpZ2h0IHdpdGhvdXQgZ3JpZGxpbmVzIG9mIGl0cyBvd24uIEVhY2ggYXhpcydzIHRpY2tzIHRha2UgdGhlIGZvcm1hdCBvZiB0aGVcbi8vIG1lYXN1cmVzIHBsb3R0ZWQgYWdhaW5zdCBpdCAoYXhpc0xhYmVscykuIFdpdGhvdXQgYSByYW5nZSBvbiBlaXRoZXIgYXhpcyB0aGVcbi8vIHNlY29uZCBheGlzIGFsaWducyBpdHMgdGlja3MgdG8gdGhlIHByaW1hcnkncyBncmlkbGluZXMuXG4vL1xuLy8gT24gYSAxMDAlIHN0YWNrZWQgY2hhcnQgKHBlcmNlbnRNaW4gc2V0KSB0aGUgcHJpbWFyeSBheGlzIGlzIHRoZSBzaGFyZSBheGlzLFxuLy8gd2hvc2UgcmFuZ2UgaXMgZml4ZWQsIGFuZCB0aGUgc2Vjb25kIGF4aXMncyBzZXJpZXMgYXJlIG5vdCBzdGFja2VkLiBBbiBheGlzXG4vLyBvZiByYW5rcyBhbG9uZSAocmFua0F4ZXMpIGlzIGludmVydGVkLCBhbmQgdGhlIGF4ZXMgdGhlbiBrZWVwIHRoZWlyIG93blxuLy8gdGlja3MsIHNvIGEgcmFuayBheGlzIHN0ZXBzIGJ5IHdob2xlIHJhbmtzLlxuZnVuY3Rpb24gdHdvVmFsdWVBeGVzT3B0aW9uKFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBheGlzTGFiZWxzOiBWYWx1ZUF4aXNMYWJlbFtdLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBwZXJjZW50TWluOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIHJlZmVyZW5jZXM6IERyYXduUmVmZXJlbmNlW10sXG4gIHJhbmtBeGVzOiBib29sZWFuW10sXG4pIHtcbiAgY29uc3QgcGVyY2VudCA9IHBlcmNlbnRNaW4gIT09IHVuZGVmaW5lZDtcbiAgY29uc3QgbGFiZWwgPSAoYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCkgPT4gYXhpc0xhYmVsc1theGlzSW5kZXhdO1xuXG4gIHJldHVybiBbXG4gICAgdmFsdWVBeGlzT3B0aW9uKGNvbmZpZy52YWx1ZUF4aXMsIGZhbHNlLCBwZXJjZW50ID8gcGVyY2VudEF4aXNMYWJlbChjb250ZXh0KSA6IGxhYmVsKDApLCB7XG4gICAgICBpbmRleDogMCxcbiAgICAgIHBlcmNlbnRNaW4sXG4gICAgICByZWFjaDogcmVmZXJlbmNlUmVhY2gocmVmZXJlbmNlcywgMCksXG4gICAgICByYW5rOiByYW5rQXhlc1swXSxcbiAgICB9KSxcbiAgICB7XG4gICAgICAuLi52YWx1ZUF4aXNPcHRpb24oY29uZmlnLnNlY29uZGFyeUF4aXMsIGZhbHNlLCBsYWJlbCgxKSwge1xuICAgICAgICBpbmRleDogMSxcbiAgICAgICAgcmVhY2g6IHJlZmVyZW5jZVJlYWNoKHJlZmVyZW5jZXMsIDEpLFxuICAgICAgICByYW5rOiByYW5rQXhlc1sxXSxcbiAgICAgIH0pLFxuICAgICAgcG9zaXRpb246ICdyaWdodCcgYXMgY29uc3QsXG4gICAgICBzcGxpdExpbmU6IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgIGFsaWduVGlja3M6ICFwZXJjZW50ICYmICFyYW5rQXhlc1swXSAmJiAhcmFua0F4ZXNbMV1cbiAgICAgICAgJiYgIWhhc0F4aXNSYW5nZShjb25maWcudmFsdWVBeGlzKSAmJiAhaGFzQXhpc1JhbmdlKGNvbmZpZy5zZWNvbmRhcnlBeGlzKSxcbiAgICB9LFxuICBdO1xufVxuXG4vLyBXaGV0aGVyIHRoZSBjb25maWcgcGlucyBhbnkgb2YgYW4gYXhpcydzIHJhbmdlOiBhIGJvdW5kIG9yIGEgdGljayBpbnRlcnZhbC5cbmZ1bmN0aW9uIGhhc0F4aXNSYW5nZShheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyh2YWx1ZUF4aXNSYW5nZShheGlzKSkuc29tZSgodmFsdWUpID0+IHZhbHVlICE9PSB1bmRlZmluZWQpO1xufVxuXG4vLyBBIGNvbmZpZ3VyZWQgYm91bmQgb3IgaW50ZXJ2YWwgd2hlbiBpdCBpcyBhIGZpbml0ZSBudW1iZXIsIGVsc2UgdW5kZWZpbmVkLlxuZnVuY3Rpb24gYXhpc051bWJlcih2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuLy8gQSB2YWx1ZSBheGlzJ3MgdGljayBsYWJlbHMuXG5pbnRlcmZhY2UgVmFsdWVBeGlzTGFiZWwge1xuICBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiBzdHJpbmc7XG59XG5cbi8vIFRpY2sgbGFiZWxzIHdyaXR0ZW4gaW4gdGhlIGxvY2FsZS4gRUNoYXJ0cycgb3duIHRpY2tzIGFyZSBncm91cGVkIGVuLVVTXG4vLyB3aGF0ZXZlciB0aGUgcGFnZSdzIGxhbmd1YWdlLlxuLy9cbi8vIFdpdGggYSBudW1iZXIgZm9ybWF0LCB0aGUgdW5pdHMgYW5kIGRlY2ltYWxzIGRlY2lkZWQgb25jZSBmb3IgdGhlIHdob2xlXG4vLyBheGlzIChyZXNvbHZlVmFsdWVBeGlzRm9ybWF0KSB3cml0ZSBldmVyeSB0aWNrIGFsaWtlICgnMS41SycsICcyLjBLJywgbmV2ZXJcbi8vICcySycpLiBXaXRob3V0IG9uZSwgb3Igd2hlbiBpdCBsZWF2ZXMgdGhlIHRpY2tzIGFuIHVuc2NhbGVkIG51bWJlciB3aXRoIG5vXG4vLyBwaW5uZWQgZGVjaW1hbHMgKGZvcm1hdCAnbnVtYmVyJywgb3IgcHJlY2lzaW9uLWxlc3MgdW5pdHMgbm9uZSksIGVhY2ggdGlja1xuLy8gaXMgYSBwbGFpbiBsb2NhbGUtZ3JvdXBlZCBudW1iZXIga2VlcGluZyBpdHMgb3duIGRlY2ltYWxzLCBzbyBhIDAuMDAwMiB0aWNrXG4vLyBuZXZlciByb3VuZHMgdG8gJzAnLlxuZnVuY3Rpb24gdmFsdWVBeGlzTGFiZWwoZm9ybWF0OiBWYWx1ZUF4aXNGb3JtYXQgfCBudWxsLCBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0KTogVmFsdWVBeGlzTGFiZWwge1xuICBpZiAoIWZvcm1hdCB8fCAoZm9ybWF0LmNoYXJ0LnVuaXRzID09PSBSZXBvcnROdW1iZXJVbml0cy5Ob25lICYmIGZvcm1hdC5jaGFydC5kZWNpbWFscyA9PT0gbnVsbCkpIHtcbiAgICByZXR1cm4geyBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiBmb3JtYXRQbGFpbk51bWJlcih2YWx1ZSwgY29udGV4dC5sb2NhbGUpIH07XG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyB1bml0czogZm9ybWF0LmNoYXJ0LnVuaXRzLCBkZWNpbWFsczogZm9ybWF0LmNoYXJ0LmRlY2ltYWxzIH07XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiBmb3JtYXROdW1iZXIodmFsdWUsIGZvcm1hdC5zcGVjLCBmb3JtYXQuY29udGV4dCwgb3B0aW9ucyksXG4gIH07XG59XG5cbi8vIEFuIGF4aXMncyBmb3JtYXQgZnJvbSB0aGUgc3BlYyBpdHMgbWVhc3VyZXMgYWdyZWUgb24sIHdpdGggdGhlIHVuaXRzIGFuZFxuLy8gZGVjaW1hbHMgZGVjaWRlZCBmcm9tIGl0cyBwZWFrLiBXaXRob3V0IGEgc3BlYyB0aGUgYXhpcyBpcyBwbGFpbiwgYW5kIHRoZVxuLy8gcGVhayBpcyBuZXZlciBjb21wdXRlZC5cbmZ1bmN0aW9uIHJlc29sdmVWYWx1ZUF4aXNGb3JtYXQoXG4gIHNwZWM6IE51bWJlckZvcm1hdFNwZWMgfCBudWxsLFxuICBwZWFrOiAoKSA9PiBudW1iZXIsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBWYWx1ZUF4aXNGb3JtYXQgfCBudWxsIHtcbiAgcmV0dXJuIHNwZWMgPyB7IHNwZWMsIGNoYXJ0OiByZXNvbHZlQ2hhcnROdW1iZXJGb3JtYXQoc3BlYywgcGVhaygpLCBjb250ZXh0KSwgY29udGV4dCB9IDogbnVsbDtcbn1cblxuLy8gRWFjaCB2YWx1ZSBheGlzJ3MgZm9ybWF0LCBieSBheGlzIGluZGV4LiBBIGNoYXJ0IHdpdGggb25lIHZhbHVlIGF4aXMgdGFrZXNcbi8vIHRoZSBmb3JtYXQgdGhlIHBsb3R0ZWQgc2VyaWVzJyBtZWFzdXJlcyBhZ3JlZSBvbiAoYSBzcGxpdEJ5IG9yIGNvbG9yQnkgY2hhcnRcbi8vIHBsb3RzIG9ubHkgaXRzIGZpcnN0IG1lYXN1cmUpLCBmcm9tIHRoZSBwZWFrIG9mIGFsbCBpdHMgc2VyaWVzLiBPbiBhIHR3by1heGlzIGNoYXJ0IGVhY2ggYXhpcyB0YWtlcyB0aGUgZm9ybWF0IG9mIHRoZSBtZWFzdXJlc1xuLy8gcGxvdHRlZCBhZ2FpbnN0IGl0LCBmcm9tIHRoZSBwZWFrIG9mIGl0cyBvd24gc2VyaWVzLCB3aGljaCBhcmUgbmV2ZXJcbi8vIHN0YWNrZWQgd2l0aCBhIDEwMCUgc3RhY2tlZCBjaGFydCdzIHNoYXJlcy4gQSByZWZlcmVuY2UgcGFzdCB0aGUgZGF0YVxuLy8gc3RyZXRjaGVzIGl0cyBheGlzLCBzbyBpdCBjb3VudHMgdG93YXJkIHRoZSBwZWFrIChyZWZlcmVuY2VQZWFrKTsgYSAxMDAlXG4vLyBzdGFja2VkIGNoYXJ0J3MgcmVmZXJlbmNlcyBhcmUgc2hhcmVzLCB3aGljaCB0aGUgcmF3IHZhbHVlcycgcGVhayBsZWF2ZXNcbi8vIG91dC4gY29udGV4dHMgaG9sZHMgZWFjaCBheGlzJ3MgY29udGV4dCAoYW5ub3RhdGVkQXhpc0NvbnRleHRzKS5cbmZ1bmN0aW9uIHZhbHVlQXhpc0Zvcm1hdHMoXG4gIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICBjb250ZXh0czogUmVwb3J0Rm9ybWF0Q29udGV4dFtdLFxuICBwZXJjZW50OiBib29sZWFuLFxuICByZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLFxuKTogKFZhbHVlQXhpc0Zvcm1hdCB8IG51bGwpW10ge1xuICBjb25zdCByZWFjaCA9IChheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KSA9PiAocGVyY2VudCAmJiBheGlzSW5kZXggPT09IDAgPyAwIDogcmVmZXJlbmNlUGVhayhyZWZlcmVuY2VzLCBheGlzSW5kZXgpKTtcblxuICBpZiAoIWF4aXNJbmRleGVzLmluY2x1ZGVzKDEpKSB7XG4gICAgcmV0dXJuIFtyZXNvbHZlVmFsdWVBeGlzRm9ybWF0KFxuICAgICAgYXhpc051bWJlckZvcm1hdChleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMubWVhc3VyZSkpLFxuICAgICAgKCkgPT4gTWF0aC5tYXgoY2hhcnRWYWx1ZVBlYWsoZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyksICEhY29uZmlnLnN0YWNrZWQpLCByZWFjaCgwKSksXG4gICAgICBjb250ZXh0c1swXSxcbiAgICApXTtcbiAgfVxuXG4gIHJldHVybiAoWzAsIDFdIGFzIGNvbnN0KS5tYXAoKGF4aXNJbmRleCkgPT4ge1xuICAgIGNvbnN0IG9uQXhpcyA9IGV4dHJhY3RlZC5zZXJpZXMuZmlsdGVyKChfLCBpbmRleCkgPT4gYXhpc0luZGV4ZXNbaW5kZXhdID09PSBheGlzSW5kZXgpO1xuXG4gICAgcmV0dXJuIHJlc29sdmVWYWx1ZUF4aXNGb3JtYXQoXG4gICAgICBheGlzTnVtYmVyRm9ybWF0KG9uQXhpcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLm1lYXN1cmUpKSxcbiAgICAgICgpID0+IE1hdGgubWF4KGNoYXJ0VmFsdWVQZWFrKG9uQXhpcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyksICEhY29uZmlnLnN0YWNrZWQgJiYgIXBlcmNlbnQpLCByZWFjaChheGlzSW5kZXgpKSxcbiAgICAgIGNvbnRleHRzW2F4aXNJbmRleF0sXG4gICAgKTtcbiAgfSk7XG59XG5cbi8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpcyB0aWNrczogd2hvbGUgcGVyY2VudGFnZXMgaW4gdGhlIGxvY2FsZVxuLy8gKCcyNSUnLCAnMjUgJScgaW4gZnItQ0EpLiBUaGUgc2hhcmVzIGFyZSByYXRpb3Mgd2hhdGV2ZXIgdGhlIHJlcG9ydCdzXG4vLyBwZXJjZW50Rm9ybWF0IHNheXMgb2YgaXRzIHN0b3JlZCB2YWx1ZXMuXG5mdW5jdGlvbiBwZXJjZW50QXhpc0xhYmVsKGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQpOiBWYWx1ZUF4aXNMYWJlbCB7XG4gIHJldHVybiB7IGZvcm1hdHRlcjogd2hvbGVQZXJjZW50Rm9ybWF0dGVyKGNvbnRleHQpIH07XG59XG5cbi8vIEEgc2hhcmUgYXMgYSB3aG9sZSBwZXJjZW50YWdlIGluIHRoZSBsb2NhbGUsIGZvciB0aGUgc2hhcmUgYXhpcydzIHRpY2tzIGFuZFxuLy8gaXRzIHNlcmllcycgZGF0YSBsYWJlbHMuXG5mdW5jdGlvbiB3aG9sZVBlcmNlbnRGb3JtYXR0ZXIoY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCk6ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nIHtcbiAgY29uc3QgcmF0aW9Db250ZXh0ID0geyAuLi5jb250ZXh0LCByYXRpb1BlcmNlbnQ6IHRydWUgfTtcblxuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiBmb3JtYXROdW1iZXIodmFsdWUsIFBFUkNFTlRfQVhJU19GT1JNQVQsIHJhdGlvQ29udGV4dCk7XG59XG5cbi8vIFdoYXQgYSBzZXJpZXMnIHRvb2x0aXAgd3JpdGVzIGJlc2lkZSBpdHMgbmFtZS5cbmludGVyZmFjZSBTZXJpZXNUb29sdGlwIHtcbiAgdmFsdWVGb3JtYXR0ZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nO1xufVxuXG4vLyBBIHNlcmllcycgdG9vbHRpcCB2YWx1ZSBpbiBpdHMgbWVhc3VyZSdzIG51bWJlciBmb3JtYXQsIHBlciB2YWx1ZSAoJ+KAlCcgd2hlblxuLy8gZW1wdHkpLiBBIG1lYXN1cmUgd2l0aG91dCBvbmUgd3JpdGVzIGl0IGFzIHRoZSBwbGFpbiB2YWx1ZSBheGlzIGRvZXMuIEFcbi8vIHZhbHVlIGNhbiBhcnJpdmUgYXMgYW4gYXJyYXkgKGEgW3ZhbHVlLCAuLi5dIGRhdGEgaXRlbSksIHdob3NlIGZpcnN0IGVudHJ5XG4vLyBpcyB0aGUgdmFsdWUuXG5mdW5jdGlvbiBzZXJpZXNUb29sdGlwKG1lYXN1cmU6IENoYXJ0TWVhc3VyZSB8IHVuZGVmaW5lZCwgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCk6IFNlcmllc1Rvb2x0aXAge1xuICBpZiAoIWhhc051bWJlckZvcm1hdChtZWFzdXJlKSkge1xuICAgIHJldHVybiB7IHZhbHVlRm9ybWF0dGVyOiAodmFsdWU6IHVua25vd24pID0+IGZvcm1hdFBsYWluTnVtYmVyKHZhbHVlLCBjb250ZXh0LmxvY2FsZSkgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWVGb3JtYXR0ZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gZm9ybWF0TnVtYmVyKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZSwgbWVhc3VyZSwgY29udGV4dCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUGllT3B0aW9uKFxuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgZG9udXQ6IGJvb2xlYW4sXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IHZhbHVlcyA9IGV4dHJhY3RlZC5zZXJpZXNbMF0/LnZhbHVlcyA/PyBbXTtcbiAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCBleHRyYWN0ZWQuc2VyaWVzLmxlbmd0aCk7XG5cbiAgcmV0dXJuIHtcbiAgICB0b29sdGlwOiB7IHRyaWdnZXI6ICdpdGVtJyB9LFxuICAgIGxlZ2VuZDogbGVnZW5kT3B0aW9uKGxlZ2VuZFBvc2l0aW9uKSxcbiAgICBzZXJpZXM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3BpZScsXG4gICAgICAgIHJhZGl1czogZG9udXQgPyBbJzQ1JScsICc3MiUnXSA6ICc3MiUnLFxuICAgICAgICBjZW50ZXI6IHBpZUNlbnRlcihsZWdlbmRQb3NpdGlvbiksXG4gICAgICAgIHRvb2x0aXA6IHNlcmllc1Rvb2x0aXAoZXh0cmFjdGVkLnNlcmllc1swXT8ubWVhc3VyZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsOiB7IHNob3c6IGZhbHNlIH0sXG4gICAgICAgIGRhdGE6IGV4dHJhY3RlZC5jYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnksIGluZGV4KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGNhdGVnb3J5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaW5kZXhdID8/IDAsXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuLy8gTnVkZ2UgdGhlIHBpZSBvZmYtY2VudGVyIHRvd2FyZCB0aGUgb3Bwb3NpdGUgZWRnZSBmcm9tIGl0cyBsZWdlbmQgc28gdGhlIHR3b1xuLy8gZG9uJ3QgY29sbGlkZTsgY2VudGVyZWQgd2hlbiB0aGUgbGVnZW5kIGlzIGhpZGRlbi5cbmZ1bmN0aW9uIHBpZUNlbnRlcihwb3NpdGlvbjogTGVnZW5kUG9zaXRpb24pOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgcmV0dXJuIFsnNjAlJywgJzUwJSddO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBbJzQwJScsICc1MCUnXTtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgcmV0dXJuIFsnNTAlJywgJzU4JSddO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4gWyc1MCUnLCAnNDYlJ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbJzUwJScsICc1MCUnXTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmlxdWVWYWx1ZXMocm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgY29sdW1uOiBzdHJpbmcpOiB1bmtub3duW10ge1xuICBjb25zdCBzZWVuID0gbmV3IFNldDx1bmtub3duPigpO1xuICBjb25zdCB2YWx1ZXM6IHVua25vd25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uXTtcbiAgICBpZiAoIXNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmZ1bmN0aW9uIG51bWVyaWModmFsdWU6IHVua25vd24pOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpO1xuXG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGw7XG59XG5cbi8vIFRoZSBlZmZlY3RpdmUgdGltZSBidWNrZXQgdGhlIHJvd3Mgd2VyZSBncm91cGVkIGludG8gKGZyb20gdGhlIGRhdGEgZW5kcG9pbnQpLFxuLy8gb3IgbnVsbCB3aGVuIHRoZSB4LWF4aXMgaXNuJ3QgYSB0aW1lIGF4aXMg4oCUIGdhdGVzIHRoZSBjb21wYWN0IHBlcmlvZCBsYWJlbHMuXG5mdW5jdGlvbiBidWNrZXRHcmFudWxhcml0eShkYXRhOiBDb21wb25lbnREYXRhKTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwge1xuICByZXR1cm4gZGF0YS5ncmFudWxhcml0eSAmJiBHUkFOVUxBUklUWV9PUFRJT05TLnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBkYXRhLmdyYW51bGFyaXR5KVxuICAgID8gZGF0YS5ncmFudWxhcml0eVxuICAgIDogbnVsbDtcbn1cblxuLy8gV2hldGhlciB0aGUgcGVyaW9kLXN0YXJ0IGNhdGVnb3JpZXMgY3Jvc3MgYSB5ZWFyIGJvdW5kYXJ5LiBXaGVuIHRoZXkgZG9uJ3QsXG4vLyB0aGUgeWVhciBpcyBwdXJlIG5vaXNlIG9uIGV2ZXJ5IGxhYmVsLCBzbyBpdCdzIGRyb3BwZWQgZW50aXJlbHkuXG5leHBvcnQgZnVuY3Rpb24gc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGNvbnN0IHllYXJzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykge1xuICAgIGNvbnN0IGRhdGUgPSBwYXJzZUlTTyhjYXRlZ29yeSk7XG4gICAgaWYgKGlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgIHllYXJzLmFkZChkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB5ZWFycy5zaXplID4gMTtcbn1cblxuLy8gQSB0aW1lIGF4aXMncyBkYXRlIGxhYmVsIHN0eWxlIHdoZW4gaXRzIGNvbmZpZyBuYW1lcyBvbmUgdGhlIHZpZXdlciBrbm93cyxcbi8vIGVsc2Ugc2hvcnQuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnREYXRlTGFiZWwoY29uZmlnOiBDaGFydENvbmZpZyB8IHVuZGVmaW5lZCk6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoUmVwb3J0Q2hhcnREYXRlTGFiZWwpLmZpbmQoKHN0eWxlKSA9PiBzdHlsZSA9PT0gY29uZmlnPy54QXhpcz8uZGF0ZUxhYmVsKVxuICAgID8/IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLlNob3J0O1xufVxuXG4vLyBBIGJ1Y2tldCdzIHBlcmlvZC1zdGFydCBzcGxpdCBpbnRvIGl0cyBwcmltYXJ5IGxhYmVsIGFuZCBpdHMgeWVhci4gQSB5ZWFyXG4vLyByZWFkcyBcIjIwMjVcIiBpbiBldmVyeSBzdHlsZS4gU2hvcnQsIGluIHRoZSBsb2NhbGU6IGRheS93ZWVrIHJlYWQgXCJNYXkgMVwiXG4vLyAoJzEgbWFpJyBpbiBmci1DQSksIG1vbnRoIFwiTWF5XCIgKCdtYWknKSwgcXVhcnRlciBcIlEyXCIgKCdUMicgaW4gRnJlbmNoKS5cbi8vIExvbmcgY2FycmllcyBpdHMgeWVhciwgaW4gdGhlIGxvY2FsZTogXCJNYXkgMSwgMjAyNlwiLCBcIk1heSAyMDI2XCIgKCdtYWlcbi8vIDIwMjYnKSwgXCJRMiAyMDI2XCIuIE51bWVyaWMgaXMgdGhlIHNhbWUgaW4gZXZlcnkgbG9jYWxlOiBcIjIwMjYtMDUtMDFcIixcbi8vIFwiMjAyNi0wNVwiLCBcIjIwMjYtUTJcIi4gUmV0dXJucyBudWxsIGZvciBhIHZhbHVlIHRoYXQgaXNuJ3QgYSBwYXJzZWFibGUgZGF0ZVxuLy8gKGxlZnQgYXMtaXMgYnkgY2FsbGVycykuXG5mdW5jdGlvbiBwZXJpb2RMYWJlbFBhcnRzKFxuICB2YWx1ZTogc3RyaW5nLFxuICBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSxcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4gIGRhdGVMYWJlbDogUmVwb3J0Q2hhcnREYXRlTGFiZWwgPSBSZXBvcnRDaGFydERhdGVMYWJlbC5TaG9ydCxcbik6IHsgcHJpbWFyeTogc3RyaW5nOyB5ZWFyOiBzdHJpbmcgfSB8IG51bGwge1xuICBjb25zdCBkYXRlID0gcGFyc2VJU08odmFsdWUpO1xuICBpZiAoIWlzVmFsaWQoZGF0ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHllYXIgPSBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgaWYgKGdyYW51bGFyaXR5ID09PSAneWVhcicpIHtcbiAgICByZXR1cm4geyBwcmltYXJ5OiB5ZWFyLCB5ZWFyIH07XG4gIH1cblxuICByZXR1cm4geyBwcmltYXJ5OiBwZXJpb2RQcmltYXJ5TGFiZWwoZGF0ZSwgZ3JhbnVsYXJpdHksIGxvY2FsZSwgZGF0ZUxhYmVsKSwgeWVhciB9O1xufVxuXG4vLyBBIHBlcmlvZCdzIGxhYmVsIGluIHRoZSBzdHlsZSBhc2tlZCBmb3IsIHRoZSB5ZWFyIGFzaWRlIChzZWVcbi8vIHBlcmlvZExhYmVsUGFydHMpLlxuZnVuY3Rpb24gcGVyaW9kUHJpbWFyeUxhYmVsKFxuICBkYXRlOiBEYXRlLFxuICBncmFudWxhcml0eTogRXhjbHVkZTxDaGFydEdyYW51bGFyaXR5LCAneWVhcic+LFxuICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyxcbiAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHllYXIgPSBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgY29uc3QgcXVhcnRlciA9IE1hdGguZmxvb3IoZGF0ZS5nZXRNb250aCgpIC8gMykgKyAxO1xuXG4gIGlmIChkYXRlTGFiZWwgPT09IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLk51bWVyaWMpIHtcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7XG4gICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LVEke3F1YXJ0ZXJ9YDtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9YDtcbiAgICAgIGRlZmF1bHQ6IC8vIGRheSwgd2VlayDigJQgdGhlIGJ1Y2tldCBzdGFydFxuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBsb25nID0gZGF0ZUxhYmVsID09PSBSZXBvcnRDaGFydERhdGVMYWJlbC5Mb25nO1xuICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gbG9uZ1xuICAgICAgICA/IGAke3F1YXJ0ZXJQcmVmaXgobG9jYWxlKX0ke3F1YXJ0ZXJ9ICR7eWVhcn1gXG4gICAgICAgIDogYCR7cXVhcnRlclByZWZpeChsb2NhbGUpfSR7cXVhcnRlcn1gO1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb2NhbERhdGUoZGF0ZSwgbG9jYWxlLCBsb25nID8gTU9OVEhfWUVBUiA6IE1PTlRIX0xPTkcpO1xuICAgIGRlZmF1bHQ6IC8vIGRheSwgd2VlayDigJQgdGhlIGJ1Y2tldCBzdGFydCBhcyBhIG1vbnRoIGFuZCBkYXlcbiAgICAgIHJldHVybiBmb3JtYXRMb2NhbERhdGUoZGF0ZSwgbG9jYWxlLCBsb25nID8gREFZX1NIT1JUIDogTU9OVEhfREFZKTtcbiAgfVxufVxuXG4vLyBXaGV0aGVyIGEgcGVyaW9kIGxhYmVsIGxlYXZlcyBpdHMgeWVhciB0byBiZSBhZGRlZCBhcGFydDogb25seSBhIHNob3J0IG9uZVxuLy8gZG9lcywgYSBsb25nIG9yIG51bWVyaWMgbGFiZWwgYWxyZWFkeSBjYXJyaWVzIGl0LlxuZnVuY3Rpb24gcGVyaW9kWWVhckFwYXJ0KGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LCBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsKTogYm9vbGVhbiB7XG4gIHJldHVybiBncmFudWxhcml0eSAhPT0gJ3llYXInICYmIGRhdGVMYWJlbCA9PT0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQ7XG59XG5cbmZ1bmN0aW9uIHF1YXJ0ZXJQcmVmaXgobG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcpOiBzdHJpbmcge1xuICByZXR1cm4gUVVBUlRFUl9QUkVGSVhFUy5nZXQobG9jYWxlLnNwbGl0KCctJylbMF0udG9Mb3dlckNhc2UoKSkgPz8gUVVBUlRFUl9QUkVGSVg7XG59XG5cbi8vIEEgY29tcGFjdCBzaW5nbGUtbGluZSBwZXJpb2QgbGFiZWwg4oCUIGZvciBtZWRpYSB0aGF0IGNhbid0IGRvIGEgc3R5bGVkXG4vLyBzZWNvbmQgbGluZSwgZS5nLiBQb3dlclBvaW50LiBBIHNob3J0IGxhYmVsIGhhcyBpdHMgeWVhciBhcHBlbmRlZCBvbmx5IHdoZW5cbi8vIHRoZSBkYXRhIHNwYW5zIHllYXJzOyBhIGxvbmcgb3IgbnVtZXJpYyBvbmUgYWx3YXlzIGNhcnJpZXMgaXQuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGVyaW9kTGFiZWwoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LFxuICBtdWx0aVllYXI6IGJvb2xlYW4sXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsID0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQsXG4pOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IHBlcmlvZExhYmVsUGFydHModmFsdWUsIGdyYW51bGFyaXR5LCBsb2NhbGUsIGRhdGVMYWJlbCk7XG4gIGlmICghcGFydHMpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gbXVsdGlZZWFyICYmIHBlcmlvZFllYXJBcGFydChncmFudWxhcml0eSwgZGF0ZUxhYmVsKSA/IGAke3BhcnRzLnByaW1hcnl9ICR7cGFydHMueWVhcn1gIDogcGFydHMucHJpbWFyeTtcbn1cblxuLy8gQSBjcm9zcy10YWIncyBjb2x1bW4gaGVhZGluZ3MsIHRoZSBvbmUgcnVsZSB0aGUgZ3JpZCBhbmQgdGhlIFBERi9Qb3dlclBvaW50XG4vLyBleHBvcnRzIHNoYXJlLiBUaGUgZmlyc3QgaXMgdGhlIHJvdyBrZXkgYW5kIGtlZXBzIGl0cyBhdXRob3JlZCBsYWJlbDsgdGhlXG4vLyByZXN0IGFyZSBwaXZvdCBWQUxVRVMuIFdoZW4gdGhlIHBpdm90IGF4aXMgaXMgYSB0aW1lIGRpbWVuc2lvbiB0aGUgc2VydmVyXG4vLyBzZW5kcyB0aGUgZ3JhaW4gaXQgYnVja2V0ZWQgYXQsIHNvIGEgcGVyaW9kLXN0YXJ0IGxpa2UgXCIyMDI2LTAxLTAxXCIgcmVhZHNcbi8vIFwiSmFudWFyeSAyMDI2XCIgKCdqYW52aWVyIDIwMjYnIGluIGZyLUNBKSwgYXMgdGhlIGNoYXJ0J3MgeC1heGlzIGxhYmVscyBpdC5cbmV4cG9ydCBmdW5jdGlvbiBwaXZvdEhlYWRpbmdzKFxuICBjb25maWc6IExpc3RDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBjb2x1bW5zID0gZGF0YS5jb2x1bW5zID8/IFtdO1xuICBjb25zdCBtdWx0aVllYXIgPSBzcGFuc011bHRpcGxlWWVhcnMoY29sdW1ucyk7XG5cbiAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gY29uZmlnLnJvd0J5Py5sYWJlbCB8fCBjb2x1bW47XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEuZ3JhbnVsYXJpdHkgPyBmb3JtYXRQZXJpb2RMYWJlbChjb2x1bW4sIGRhdGEuZ3JhbnVsYXJpdHksIG11bHRpWWVhciwgbG9jYWxlKSA6IGNvbHVtbjtcbiAgfSk7XG59XG5cbi8vIEEgY3Jvc3MtdGFiJ3MgY29sdW1ucyBhcyB0aGUgZ3JpZCBhbmQgdGhlIGV4cG9ydHMgZHJhdyB0aGVtOiBlYWNoIGhlYWRlZCBieVxuLy8gcGl2b3RIZWFkaW5ncygpLCBhbmQgZXZlcnkgcGl2b3QtdmFsdWUgY29sdW1uIGZvcm1hdHRlZCBieSB0aGUgb25lXG4vLyBjb25maWcuY2VsbEZvcm1hdC4gVGhlIHJvdyBrZXkgY29sdW1uIHN0YXlzIGFzIGl0IGNhbWUuIGBudW1lcmljYCBtYXJrcyB0aGVcbi8vIGNvbHVtbnMgd2hvc2UgY2VsbHMgYXJlIGZvcm1hdHRlZCBudW1iZXJzLCB3aGljaCBhcmUgcmlnaHQtYWxpZ25lZC5cbmV4cG9ydCBmdW5jdGlvbiBwaXZvdENvbHVtblNwZWNzKFxuICBjb25maWc6IExpc3RDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKTogKExpc3RDb2x1bW4gJiB7IG51bWVyaWM6IGJvb2xlYW4gfSlbXSB7XG4gIGNvbnN0IGhlYWRpbmdzID0gcGl2b3RIZWFkaW5ncyhjb25maWcsIGRhdGEsIGxvY2FsZSk7XG4gIGNvbnN0IGNlbGxGb3JtYXQgPSBjb25maWcuY2VsbEZvcm1hdDtcbiAgY29uc3QgbnVtZXJpYyA9IGhhc051bWJlckZvcm1hdChjZWxsRm9ybWF0KTtcbiAgY29uc3QgY2VsbHM6IFBpY2s8TGlzdENvbHVtbiwgJ2Zvcm1hdCcgfCAncHJlY2lzaW9uJyB8ICd1bml0cyc+ID0gbnVtZXJpYyAmJiBjZWxsRm9ybWF0XG4gICAgPyB7IGZvcm1hdDogbGlzdENvbHVtbkZvcm1hdChjZWxsRm9ybWF0LmZvcm1hdCksIHByZWNpc2lvbjogY2VsbEZvcm1hdC5wcmVjaXNpb24sIHVuaXRzOiBjZWxsRm9ybWF0LnVuaXRzIH1cbiAgICA6IHt9O1xuXG4gIHJldHVybiAoZGF0YS5jb2x1bW5zID8/IFtdKS5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IGluZGV4ID09PSAwXG4gICAgPyB7IGNvbHVtbiwgbGFiZWw6IGhlYWRpbmdzW2luZGV4XSwgbnVtZXJpYzogZmFsc2UgfVxuICAgIDogeyBjb2x1bW4sIGxhYmVsOiBoZWFkaW5nc1tpbmRleF0sIC4uLmNlbGxzLCBudW1lcmljIH0pO1xufVxuXG4vLyBBIG51bWJlciBmb3JtYXQncyBzdHlsZSBhcyBhIGxpc3QgY29sdW1uJ3MgZm9ybWF0OiB0aGUgdHdvIGVudW1zIHNoYXJlXG4vLyB0aGVpciBudW1iZXIgdmFsdWVzLlxuZnVuY3Rpb24gbGlzdENvbHVtbkZvcm1hdChmb3JtYXQ6IE51bWJlckZvcm1hdFNwZWNbJ2Zvcm1hdCddKTogUmVwb3J0TGlzdENvbHVtbkZvcm1hdCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQpLmZpbmQoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gZm9ybWF0KTtcbn1cblxuLy8gRUNoYXJ0cyBjYXRlZ29yeS1heGlzIGxhYmVsIGNvbmZpZyBmb3IgYSB0aW1lIGJ1Y2tldDogdGhlIHByaW1hcnkgbGFiZWwgb25cbi8vIGxpbmUgb25lLCBhbmQg4oCUIG9ubHkgd2hlbiB0aGUgZGF0YSBzcGFucyBtdWx0aXBsZSB5ZWFycyDigJQgdGhlIHllYXIgb24gYSBzbWFsbFxuLy8gZ3JheSBzZWNvbmQgbGluZSwgY2VudGVyZWQgdW5kZXIgdGhlIHRpY2sgKHllYXIgZ3JhbnVsYXJpdHkgbmVlZHMgbm8gc2Vjb25kXG4vLyBsaW5lLCBpdCBhbHJlYWR5IGlzIHRoZSB5ZWFyLCBhbmQgbmVpdGhlciBkb2VzIGEgbG9uZyBvciBudW1lcmljIGxhYmVsLFxuLy8gd2hpY2ggY2FycmllcyBpdHMgeWVhcikuIEVtcHR5IGZvciBhIG5vbi10aW1lIGF4aXMgKGxhYmVscyBhcy1pcykuXG5mdW5jdGlvbiBwZXJpb2RBeGlzTGFiZWwoXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCxcbiAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLFxuKTogeyBheGlzTGFiZWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgaWYgKCFncmFudWxhcml0eSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IG11bHRpWWVhciA9IHNwYW5zTXVsdGlwbGVZZWFycyhjYXRlZ29yaWVzKTtcblxuICByZXR1cm4ge1xuICAgIGF4aXNMYWJlbDoge1xuICAgICAgZm9ybWF0dGVyOiAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBlcmlvZExhYmVsUGFydHModmFsdWUsIGdyYW51bGFyaXR5LCBsb2NhbGUsIGRhdGVMYWJlbCk7XG4gICAgICAgIGlmICghcGFydHMpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbXVsdGlZZWFyICYmIHBlcmlvZFllYXJBcGFydChncmFudWxhcml0eSwgZGF0ZUxhYmVsKVxuICAgICAgICAgID8gYCR7cGFydHMucHJpbWFyeX1cXG57eXJ8JHtwYXJ0cy55ZWFyfX1gXG4gICAgICAgICAgOiBwYXJ0cy5wcmltYXJ5O1xuICAgICAgfSxcbiAgICAgIHJpY2g6IHsgeXI6IHsgZm9udFNpemU6IDEwLCBjb2xvcjogJyM5YWEwYTYnLCBsaW5lSGVpZ2h0OiAxNCB9IH0sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
2071
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvb3B0aW9uLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUNMLE9BQU8sRUFDUCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFFBQVEsRUFDUixRQUFRLEVBQ1IsVUFBVSxFQUNWLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLEdBQUcsSUFBSSxRQUFRLEVBQ2YsR0FBRyxJQUFJLFVBQVUsRUFDakIsUUFBUSxFQUNSLFVBQVUsR0FDWCxNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsU0FBUyxFQUNULFVBQVUsRUFDVixjQUFjLEVBQ2QsZUFBZSxFQUNmLGVBQWUsRUFFZixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLHdCQUF3QixFQUN4QixVQUFVLEdBQ1gsTUFBTSxV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QkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRCw2RUFBNkU7QUFDN0UsZ0ZBQWdGO0FBQ2hGLDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFDMUUscUVBQXFFO0FBQ3JFLFNBQVMsZUFBZSxDQUN0QixXQUFvQyxFQUNwQyxVQUFvQixFQUNwQixNQUF1QixFQUN2QixTQUErQjtJQUUvQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFakQsT0FBTztRQUNMLFNBQVMsRUFBRTtZQUNULFNBQVMsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFO2dCQUMzQixNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBRUQsT0FBTyxTQUFTLElBQUksZUFBZSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUM7b0JBQ3pELENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLFNBQVMsS0FBSyxDQUFDLElBQUksR0FBRztvQkFDeEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDcEIsQ0FBQztZQUNELElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUU7U0FDakU7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRUNoYXJ0c09wdGlvbixcbiAgTGVnZW5kQ29tcG9uZW50T3B0aW9uLFxuICBTZXJpZXNPcHRpb24sXG4gIFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcyxcbiAgVG9vbHRpcENvbXBvbmVudE9wdGlvbixcbn0gZnJvbSAnZWNoYXJ0cyc7XG5cbmltcG9ydCB7XG4gIGFkZERheXMsXG4gIGFkZE1vbnRocyxcbiAgYWRkUXVhcnRlcnMsXG4gIGFkZFdlZWtzLFxuICBhZGRZZWFycyxcbiAgZW5kT2ZNb250aCxcbiAgZm9ybWF0SVNPLFxuICBpc0xhc3REYXlPZk1vbnRoLFxuICBpc1ZhbGlkLFxuICBtYXggYXMgbGF0ZXN0T2YsXG4gIG1pbiBhcyBlYXJsaWVzdE9mLFxuICBwYXJzZUlTTyxcbiAgc3RhcnRPZkRheSxcbn0gZnJvbSAnZGF0ZS1mbnMnO1xuXG5pbXBvcnQgeyBSZXBvcnRDaGFydENvbG9yIH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtY2hhcnQtY29sb3IuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydERhdGFMYWJlbHMgfSBmcm9tICcuL2VudW1zL3JlcG9ydC1jaGFydC1kYXRhLWxhYmVscy5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0RGF0ZUxhYmVsIH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0ZS1sYWJlbC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TGluZVN0eWxlIH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtY2hhcnQtbGluZS1zdHlsZS5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TWFya1N0YXQgfSBmcm9tICcuL2VudW1zL3JlcG9ydC1jaGFydC1tYXJrLXN0YXQuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRMaXN0Q29sdW1uRm9ybWF0IH0gZnJvbSAnLi9lbnVtcy9yZXBvcnQtbGlzdC1jb2x1bW4tZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0TnVtYmVyVW5pdHMgfSBmcm9tICcuL2VudW1zL3JlcG9ydC1udW1iZXItdW5pdHMuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRWYWx1ZUZvcm1hdCB9IGZyb20gJy4vZW51bXMvcmVwb3J0LXZhbHVlLWZvcm1hdC5lbnVtJztcbmltcG9ydCB7XG4gIGF4aXNOdW1iZXJGb3JtYXQsXG4gIENoYXJ0TnVtYmVyRm9ybWF0LFxuICBjaGFydFZhbHVlUGVhayxcbiAgY29tcGFyaXNvbk9mZnNldExhYmVsLFxuICBEQVlfU0hPUlQsXG4gIGRhdGVGb3JtYXQsXG4gIGZvcm1hdERheVJhbmdlLFxuICBmb3JtYXREYXlXaW5kb3csXG4gIGZvcm1hdExvY2FsRGF0ZSxcbiAgRm9ybWF0dGVkT3V0cHV0VmFsdWUsXG4gIGZvcm1hdE51bWJlcixcbiAgZm9ybWF0T3V0cHV0VmFsdWUsXG4gIGZvcm1hdFBsYWluTnVtYmVyLFxuICBoYXNOdW1iZXJGb3JtYXQsXG4gIGxhbmVPdXRwdXRBbGlhcyxcbiAgTU9OVEhfREFZLFxuICBNT05USF9MT05HLFxuICBNT05USF9ZRUFSLFxuICByZXNvbHZlQ2hhcnROdW1iZXJGb3JtYXQsXG4gIHdpbmRvd1RleHQsXG59IGZyb20gJy4vZm9ybWF0JztcbmltcG9ydCB7XG4gIEF4aXNDaGFydFR5cGUsXG4gIENoYXJ0Q29uZmlnLFxuICBDaGFydEdyYW51bGFyaXR5LFxuICBDaGFydE1lYXN1cmUsXG4gIENoYXJ0UmVmZXJlbmNlLFxuICBDaGFydFZhbHVlQXhpcyxcbiAgQ29tcGFyaXNvbk9mZnNldCxcbiAgQ29tcGFyaXNvbldpbmRvdyxcbiAgQ29tcG9uZW50Q29tcGFyaXNvbixcbiAgQ29tcG9uZW50RGF0YSxcbiAgR1JBTlVMQVJJVFlfT1BUSU9OUyxcbiAgTGVnZW5kUG9zaXRpb24sXG4gIExpc3RDb2x1bW4sXG4gIExpc3RDb25maWcsXG4gIE51bWJlckZvcm1hdFNwZWMsXG4gIE91dHB1dE1ldGEsXG4gIE91dHB1dFJvbGUsXG4gIFJlcG9ydENvbXBvbmVudCxcbiAgUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgUmVwb3J0TG9jYWxlVGFnLFxuICBXYXRlcmZhbGxTdGVwS2luZCxcbiAgV2luZG93TWV0YSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVwb3J0TWFya0FjdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZXBvcnQtbWFyay1hY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnLi90ZXh0JztcbmltcG9ydCB7XG4gIFJFUE9SVF9DSEFSVF9DT0xPUl9CWV9OQU1FLFxuICBSRVBPUlRfQ0hBUlRfQ09MT1JTLFxuICBSRVBPUlRfQ0hBUlRfQ09MT1JTX0NTUyxcbiAgUkVQT1JUX1JFRkVSRU5DRV9DT0xPUixcbiAgUkVQT1JUX1dBVEVSRkFMTF9DT0xPUlMsXG59IGZyb20gJy4vdGhlbWUvcGFsZXR0ZSc7XG5pbXBvcnQgeyBSRVBPUlRfQVhJU19MQUJFTF9GT05UX1NJWkUsIFJFUE9SVF9DSEFSVF9GT05UX0ZBTUlMWSwgUkVQT1JUX0RBVEFfTEFCRUxfRk9OVF9TSVpFIH0gZnJvbSAnLi90aGVtZS90eXBvZ3JhcGh5JztcblxuXG4vLyBSb29tIGZvciBhbiBheGlzIHRpdGxlLiBFQ2hhcnRzIDUncyBjb250YWluTGFiZWwga2VlcHMgdGhlIFRJQ0sgbGFiZWxzIGluc2lkZVxuLy8gdGhlIGdyaWQgYnV0IG5vdCB0aGUgYXhpcyBuYW1lLCBzbyB3aXRob3V0IHRoaXMgYSB2ZXJ0aWNhbCBjaGFydCdzIGNhdGVnb3J5XG4vLyB0aXRsZSBydW5zIG9mZiB0aGUgYm90dG9tIGVkZ2Ugb3IgdW5kZXIgYSBib3R0b20gbGVnZW5kLCBhbmQgaXRzIHZhbHVlIHRpdGxlXG4vLyBhYm92ZSB0aGUgcGxvdCBydW5zIG9mZiB0aGUgdG9wIG9yIHVuZGVyIGEgdG9wIGxlZ2VuZC5cbmNvbnN0IEFYSVNfTkFNRV9ST09NID0gMjA7XG4vLyBFQ2hhcnRzJyBvd24gZGVmYXVsdCBnYXAgYmV0d2VlbiB0aGUgYXhpcyBsaW5lIGFuZCBpdHMgdGljayBsYWJlbHMuXG5jb25zdCBBWElTX0xBQkVMX01BUkdJTiA9IDg7XG4vLyBDbGVhcmFuY2UgYmV0d2VlbiB0aGUgbG9uZ2VzdCB0aWNrIGxhYmVsIGFuZCBhIGhvcml6b250YWwgY2hhcnQncyByb3RhdGVkXG4vLyB0aXRsZSwgc28gdGhlIHR3byBuZXZlciB0b3VjaC5cbmNvbnN0IEFYSVNfTkFNRV9DTEVBUkFOQ0UgPSA2O1xuLy8gQSBob3Jpem9udGFsIGNoYXJ0J3MgY2F0ZWdvcnkgbGFiZWxzIGFyZSBjdXQgc2hvcnQgd2l0aCBhbiBlbGxpcHNpcyBwYXN0XG4vLyB0aGlzIHdpZHRoICh0aGUgdG9vbHRpcCBzdGlsbCBzaG93cyB0aGVtIGluIGZ1bGwpLCBzbyBvbmUgbG9uZyBsYWJlbCBjYW5ub3Rcbi8vIHNxdWVlemUgdGhlIHBsb3QgYXdheS5cbmNvbnN0IENBVEVHT1JZX0xBQkVMX01BWF9XSURUSCA9IDE2MDtcbmNvbnN0IExBQkVMX0VMTElQU0lTID0gJ+KApic7XG4vLyBUaGUgZm9udCB0aGUgdGhlbWUgZHJhd3MgYXhpcyBsYWJlbHMgaW4sIGFzIGEgY2FudmFzIGZvbnQgc3RyaW5nLiBMYWJlbHMgYXJlXG4vLyBtZWFzdXJlZCBpbiBpdCB0aGUgd2F5IEVDaGFydHMgbWVhc3VyZXMgdGhlbSBmb3IgY29udGFpbkxhYmVsLCBzbyBhXG4vLyBob3Jpem9udGFsIGNoYXJ0J3MgdGl0bGUgbGFuZHMgZXhhY3RseSBiZXlvbmQgdGhlIHdpZGVzdCBsYWJlbC5cbmNvbnN0IEFYSVNfTEFCRUxfRk9OVCA9IGAke1JFUE9SVF9BWElTX0xBQkVMX0ZPTlRfU0laRX1weCAke1JFUE9SVF9DSEFSVF9GT05UX0ZBTUlMWX1gO1xuLy8gVGhlIGxldHRlciBhIHF1YXJ0ZXIgbGFiZWwgc3RhcnRzIHdpdGgsIGJ5IGxhbmd1YWdlIHN1YnRhZy4gRnJlbmNoIHdyaXRlcyB0aGVcbi8vIHNlY29uZCBxdWFydGVyICdUMicgKHRyaW1lc3RyZSk7IGV2ZXJ5IG90aGVyIGxhbmd1YWdlIHJlYWRzICdRMicuXG5jb25zdCBRVUFSVEVSX1BSRUZJWEVTID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1snZnInLCAnVCddXSk7XG5jb25zdCBRVUFSVEVSX1BSRUZJWCA9ICdRJztcbi8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3MgdmFsdWUgYXhpczogd2hvbGUgcGVyY2VudGFnZXMsIGEgZ3JpZGxpbmUgZXZlcnkgMjUlLFxuLy8gdXAgdG8gMTAwJS4gSXRzIHRvb2x0aXAgZ2l2ZXMgZWFjaCBzaGFyZSB0byBvbmUgZGVjaW1hbC5cbmNvbnN0IFBFUkNFTlRfQVhJU19GT1JNQVQ6IE51bWJlckZvcm1hdFNwZWMgPSB7IGZvcm1hdDogUmVwb3J0VmFsdWVGb3JtYXQuUGVyY2VudCwgcHJlY2lzaW9uOiAwIH07XG5jb25zdCBQRVJDRU5UX1NIQVJFX0ZPUk1BVDogTnVtYmVyRm9ybWF0U3BlYyA9IHsgZm9ybWF0OiBSZXBvcnRWYWx1ZUZvcm1hdC5QZXJjZW50LCBwcmVjaXNpb246IDEgfTtcbmV4cG9ydCBjb25zdCBQRVJDRU5UX0FYSVNfTUFYID0gMTtcbmV4cG9ydCBjb25zdCBQRVJDRU5UX0FYSVNfSU5URVJWQUwgPSAwLjI1O1xuLy8gQSByZWZlcmVuY2UgYmFuZCdzIGZpbGw6IHRoZSByZWZlcmVuY2Ugc2xhdGUsIGZhaW50IGVub3VnaCB0aGF0IHRoZSBzZXJpZXNcbi8vIGRyYXduIGFjcm9zcyBpdCBzdGF5IHJlYWRhYmxlLlxuY29uc3QgUkVGRVJFTkNFX0JBTkRfRklMTCA9ICdyZ2JhKDgyLCA5NiwgMTA5LCAwLjA4KSc7XG4vLyBBIHJlZmVyZW5jZSdzIG9yIHN0YXRpc3RpYyBsaW5lJ3MgbGFiZWwgc2l0cyBvbiBhIGxpZ2h0IGJveCwgc28gaXQgc3RheXNcbi8vIHJlYWRhYmxlIHdoZXJlIGl0IGNyb3NzZXMgYSBiYXIgb3IgYSBsaW5lLlxuY29uc3QgTUFSS19MQUJFTF9CT1ggPSB7IGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSknLCBwYWRkaW5nOiBbMSwgM10sIGJvcmRlclJhZGl1czogMiB9O1xuLy8gVGhlIHJvb20gYW4gYXhpcyBzdHJldGNoZWQgdG8gYSByZWZlcmVuY2UgbGVhdmVzIGFib3ZlIGl0LCBmb3IgaXRzIGxhYmVsOlxuLy8gdGhlIGJvdW5kIGlzIHRoZSByb3VuZCBudW1iZXIgYXQgb3IgcGFzdCB0aGUgcmVmZXJlbmNlIHBsdXMgdGhpcyBzaGFyZS5cbmNvbnN0IFJFRkVSRU5DRV9IRUFEUk9PTSA9IDEuMDU7XG5cbi8vIEhvdyBhIGNoYXJ0IG1hcmtzIHdoYXQgdGhlIHNlcnZlciBzYXlzIG9mIGl0cyBudW1iZXJzIChDb21wb25lbnREYXRhJ3Ncbi8vIGNvbXBhcmlzb24sIG91dHB1dHMsIHdpbmRvd3MgYW5kIHBhcnRpYWxQZXJpb2QpLiBUaGUgd29yZHMgYXJlIGludGVyZmFjZVxuLy8gdGV4dCwgRW5nbGlzaCBpbiBldmVyeSByZXBvcnQgbG9jYWxlLlxuLy8gLSBUaGUgaGVhZGluZyBvZiBhIHBlcmlvZCBub3Qgb3ZlciB5ZXQgKCdTZXB0ZW1iZXIgMjAyNiAodG8gZGF0ZSknKS5cbmNvbnN0IFBBUlRJQUxfUEVSSU9EX1RFWFQgPSAndG8gZGF0ZSc7XG4vLyAtIEEgY29tcGFyZWQgc2VyaWVzJyBuYW1lOiBpdHMgbWVhc3VyZSdzLCB0aGVuIGl0cyByb2xlIGFuZCBsYW5lICgnUmV2ZW51ZVxuLy8gICBjaGFuZ2UgKHZzIHByZXZpb3VzIHdlZWspJykuIEEgcHJpb3Iga2VlcHMgdGhlIG1lYXN1cmUncyBuYW1lIGFsb25lLlxuY29uc3QgUk9MRV9OQU1FX1NVRkZJWEVTOiBSZWNvcmQ8RXhjbHVkZTxPdXRwdXRSb2xlLCAnY3VycmVudCc+LCBzdHJpbmc+ID0ge1xuICBwcmlvcjogJycsXG4gIGNoYW5nZTogJyBjaGFuZ2UnLFxuICBwZXJjZW50X2NoYW5nZTogJyAlIGNoYW5nZScsXG59O1xuLy8gLSBBIHByaW9yIHNlcmllcycgYmFyczogaXRzIGN1cnJlbnQgc2VyaWVzJyBjb2xvciwgZmFkZWQsIHdpdGggYSBkYXNoZWRcbi8vICAgZWRnZS4gSXRzIGxpbmUgaXMgZGFzaGVkIChQUklPUl9MSU5FX1NUWUxFKSB1bmxlc3MgaXRzIG1lYXN1cmUgbmFtZXMgb25lLlxuY29uc3QgUFJJT1JfQkFSX09QQUNJVFkgPSAwLjQ1O1xuY29uc3QgUFJJT1JfTElORV9TVFlMRSA9IFJlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZDtcbi8vIC0gVGhlIHBlcmlvZCBub3Qgb3ZlciB5ZXQ6IGl0cyBiYXIgaGF0Y2hlZCBpbiBsaWdodCBzdHJpcGVzLCBpdHMgcG9pbnQgb24gYVxuLy8gICBsaW5lIGRyYXduIGxhcmdlciB3aXRoIGEgZGFzaGVkIGVkZ2UsIGFuZCwgd2hlbiBpdCBpcyB0aGUgbGFzdCBvbmUsIHRoZVxuLy8gICBsaW5lJ3MgbGFzdCBzZWdtZW50IGRhc2hlZC5cbmNvbnN0IFBBUlRJQUxfTElORV9TVFlMRSA9IFJlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZDtcbmNvbnN0IFBBUlRJQUxfQkFSX0RFQ0FMID0ge1xuICBzeW1ib2w6ICdub25lJyxcbiAgZGFzaEFycmF5WDogWzEsIDBdLFxuICBkYXNoQXJyYXlZOiBbMywgNV0sXG4gIHJvdGF0aW9uOiAtTWF0aC5QSSAvIDQsXG4gIGNvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpJyxcbn07XG5jb25zdCBQQVJUSUFMX1BPSU5UX01BUksgPSB7IHN5bWJvbDogJ2VtcHR5Q2lyY2xlJywgc3ltYm9sU2l6ZTogOSwgaXRlbVN0eWxlOiB7IGJvcmRlclR5cGU6ICdkYXNoZWQnIH0gfTtcbi8vIC0gVGhlIGxhc3Qgc2VnbWVudCdzIHNlcmllcyBpZDogdGhpcywgdGhlbiB0aGUgaW5kZXggb2YgdGhlIHNlcmllcyBpdFxuLy8gICBjb250aW51ZXMgKHBhcnRpYWxTZWdtZW50SWQpLlxuY29uc3QgUEFSVElBTF9TRUdNRU5UX0lEID0gJ3BhcnRpYWwtc2VnbWVudC0nO1xuLy8gLSBBIHZhbHVlIGF4aXMgb2YgcmFua3Mgb25seTogcmFuayAxIGF0IHRoZSB0b3AsIHdob2xlIHN0ZXBzLCBmcm9tIDEuXG5jb25zdCBSQU5LX0FYSVNfRk9STUFUOiBOdW1iZXJGb3JtYXRTcGVjID0geyBmb3JtYXQ6IFJlcG9ydFZhbHVlRm9ybWF0Lk51bWJlciwgcHJlY2lzaW9uOiAwIH07XG4vLyAoU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnQgZXhwb3J0LCB3aG9zZSByYW5rIGF4ZXMgc3RhcnQgdGhlcmUgdG9vLilcbmV4cG9ydCBjb25zdCBSQU5LX0FYSVNfTUlOID0gMTtcbi8vIC0gQSB2YWx1ZSBheGlzIG9mIDAtMSBmcmFjdGlvbnMgb25seSAoc2hhcmVzLCBwZXJjZW50IGNoYW5nZXMpIGlzIGFcbi8vICAgcGVyY2VudCBheGlzLCBpdHMgZGVjaW1hbHMgZGVjaWRlZCBieSBpdHMgcGVhay5cbmNvbnN0IEZSQUNUSU9OX0FYSVNfRk9STUFUOiBOdW1iZXJGb3JtYXRTcGVjID0geyBmb3JtYXQ6IFJlcG9ydFZhbHVlRm9ybWF0LlBlcmNlbnQgfTtcbi8vIC0gQmV0d2VlbiBhIHRvb2x0aXAgdmFsdWUgYW5kIHdoYXQgaXQgY292ZXJzLlxuY29uc3QgVE9PTFRJUF9ERVRBSUxfU0VQQVJBVE9SID0gJyDCtyAnO1xuLy8gLSBUaGUgcHJpb3IgYSB0b29sdGlwIHZhbHVlIGlzIGNvbXBhcmVkIHdpdGgsIHdoZW4gdGhlIGNoYXJ0IGRvZXMgbm90IHBsb3Rcbi8vICAgaXQgKCd2cyA1MCUgKFNlcCAxIOKAkyAyLCAyMDI2KScpLlxuY29uc3QgQ09NUEFSRURfUFJJT1JfUFJFRklYID0gJ3ZzJztcblxuLy8gVGhlIHRvb2x0aXAncyBsYXN0IGxpbmUgb24gYSBjaGFydCB3aG9zZSBtYXJrcyBhY3Qgb24gYSBjbGlja1xuLy8gKG1hcmtBY3Rpb25IaW50KTogb25lIGFjdGlvbiBieSBpdHMgZnVsbCBuYW1lLCBzZXZlcmFsIGJ5IHRoZWlyIHNob3J0XG4vLyBuYW1lcywgaW4gdGhpcyBvcmRlci4gSW50ZXJmYWNlIHRleHQsIEVuZ2xpc2ggaW4gZXZlcnkgcmVwb3J0IGxvY2FsZS5cbmNvbnN0IE1BUktfQUNUSU9OX09SREVSOiByZWFkb25seSBSZXBvcnRNYXJrQWN0aW9uW10gPSBbJ2RyaWxsJywgJ2Nyb3NzRmlsdGVyJywgJ3Nob3dSb3dzJ107XG5jb25zdCBNQVJLX0FDVElPTl9ISU5UUzogUmVjb3JkPFJlcG9ydE1hcmtBY3Rpb24sIHN0cmluZz4gPSB7XG4gIGRyaWxsOiAnZHJpbGwgZG93bicsXG4gIGNyb3NzRmlsdGVyOiAnZmlsdGVyIG90aGVyIHRpbGVzJyxcbiAgc2hvd1Jvd3M6ICdzaG93IHJvd3MnLFxufTtcbmNvbnN0IE1BUktfQUNUSU9OX1NIT1JUX0hJTlRTOiBSZWNvcmQ8UmVwb3J0TWFya0FjdGlvbiwgc3RyaW5nPiA9IHtcbiAgZHJpbGw6ICdkcmlsbCBkb3duJyxcbiAgY3Jvc3NGaWx0ZXI6ICdmaWx0ZXInLFxuICBzaG93Um93czogJ3Nob3cgcm93cycsXG59O1xuXG4vLyBUaGUgd29yZHMgYSBzdGF0aXN0aWMgbGluZSdzIGxhYmVsIHN0YXJ0cyB3aXRoLiBUaGV5IGFyZSBpbnRlcmZhY2UgdGV4dCxcbi8vIEVuZ2xpc2ggaW4gZXZlcnkgcmVwb3J0IGxvY2FsZTsgb25seSB0aGUgdmFsdWUgYWZ0ZXIgdGhlbSBmb2xsb3dzIGl0LlxuZXhwb3J0IGNvbnN0IFNUQVRfTEFCRUw6IFJlY29yZDxSZXBvcnRDaGFydE1hcmtTdGF0LCBzdHJpbmc+ID0ge1xuICBbUmVwb3J0Q2hhcnRNYXJrU3RhdC5BdmVyYWdlXTogJ0F2ZXJhZ2UnLFxuICBbUmVwb3J0Q2hhcnRNYXJrU3RhdC5NZWRpYW5dOiAnTWVkaWFuJyxcbiAgW1JlcG9ydENoYXJ0TWFya1N0YXQuTWluXTogJ01pbmltdW0nLFxuICBbUmVwb3J0Q2hhcnRNYXJrU3RhdC5NYXhdOiAnTWF4aW11bScsXG59O1xuXG4vLyBXaGljaCBlZGdlIG9mIHRoZSBwbG90IGFuIGF4aXMgdGl0bGUgc2l0cyBvbi4gVGhlIGNhdGVnb3J5IGF4aXMncyBpcyBiZWxvdyBhXG4vLyB2ZXJ0aWNhbCBjaGFydCBhbmQgdG8gdGhlIGxlZnQgb2YgYSBob3Jpem9udGFsIG9uZTsgdGhlIHZhbHVlIGF4aXMncyBpcyBhYm92ZVxuLy8gYSB2ZXJ0aWNhbCBjaGFydCBhbmQgYmVsb3cgYSBob3Jpem9udGFsIG9uZS5cbnR5cGUgQXhpc1RpdGxlU2lkZSA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5cbi8vIFdoaWNoIHZhbHVlIGF4aXMgYSBzZXJpZXMgaXMgcGxvdHRlZCBhZ2FpbnN0OiAwIHRoZSBwcmltYXJ5LCAxIHRoZSBzZWNvbmRcbi8vIGF4aXMgb24gdGhlIHJpZ2h0LlxuZXhwb3J0IHR5cGUgVmFsdWVBeGlzSW5kZXggPSAwIHwgMTtcblxuLy8gV2hhdCB2YWx1ZUF4aXNPcHRpb24gYWRkcyBmb3Igb25lIGF4aXMuIGBpbmRleGAgaXMgdGhlIGF4aXMgb2YgYSB0d28tYXhpc1xuLy8gY2hhcnQgaXQgYnVpbGRzOiB0aGUgc2Vjb25kIG9uZSdzIHRpdGxlIGlzIGFsaWduZWQgdG8gcmVhZCBsZWZ0d2FyZCBmcm9tIHRoZVxuLy8gcmlnaHQgZWRnZS4gYHBlcmNlbnRNaW5gIG1ha2VzIGl0IGEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpcywgZnJvbVxuLy8gdGhhdCBib3VuZCAoMCwgb3IgLTEgd2hlbiBhIHNoYXJlIGlzIG5lZ2F0aXZlKSB1cCB0byAxMDAlLCB3aGF0ZXZlciByYW5nZVxuLy8gdGhlIGNvbmZpZyBwaW5zLiBgcmVhY2hgIGlzIHRoZSBzcGFuIG9mIHRoZSByZWZlcmVuY2VzIHBsb3R0ZWQgYWdhaW5zdCBpdCxcbi8vIHdoaWNoIHRoZSBheGlzIHN0cmV0Y2hlcyB0byB3aGVuIHRoZSBkYXRhIGZhbGxzIHNob3J0IG9mIHRoZW0uIGByYW5rYFxuLy8gaW52ZXJ0cyBpdC5cbmludGVyZmFjZSBWYWx1ZUF4aXNFeHRyYXMge1xuICBpbmRleD86IFZhbHVlQXhpc0luZGV4O1xuICBwZXJjZW50TWluPzogbnVtYmVyO1xuICByZWFjaD86IFJlZmVyZW5jZVJlYWNoO1xuICAvLyBFdmVyeSBzZXJpZXMgb24gdGhlIGF4aXMgcGxvdHMgYSByYW5rOiBpdCBydW5zIGZyb20gcmFuayAxIGF0IHRoZSB0b3AgaW5cbiAgLy8gd2hvbGUgc3RlcHMuXG4gIHJhbms/OiBib29sZWFuO1xufVxuXG4vLyBBIHJlZmVyZW5jZSBhcyB0aGUgY2hhcnQgZHJhd3MgaXQ6IGl0cyBsb3dlciBhbmQgdXBwZXIgZWRnZSAodGhlIHNhbWUgdmFsdWVcbi8vIGZvciBhIGxpbmUpLCB3aGV0aGVyIGl0IGlzIGEgYmFuZCwgYW5kIHRoZSB2YWx1ZSBheGlzIGl0IGlzIHBsb3R0ZWQgYWdhaW5zdC5cbi8vIFNoYXJlZCB3aXRoIHRoZSBQb3dlclBvaW50IGV4cG9ydCwgd2hpY2ggZHJhd3MgZWFjaCBlZGdlIGFzIGEgY29uc3RhbnQgbGluZS5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhd25SZWZlcmVuY2Uge1xuICBsYWJlbDogc3RyaW5nO1xuICBsb3c6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xuICBiYW5kOiBib29sZWFuO1xuICBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4O1xufVxuXG4vLyBUaGUgbG93ZXN0IGFuZCBoaWdoZXN0IGVkZ2Ugb2YgdGhlIHJlZmVyZW5jZXMgb24gb25lIHZhbHVlIGF4aXMuXG5pbnRlcmZhY2UgUmVmZXJlbmNlUmVhY2gge1xuICBsb3c6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xufVxuXG4vLyBXaGF0IEVDaGFydHMgaGFuZHMgYSB2YWx1ZSBheGlzJ3MgbWluIGFuZCBtYXggY2FsbGJhY2tzOiB0aGUgZXh0ZW50IG9mIHRoZVxuLy8gZGF0YSBwbG90dGVkIGFnYWluc3QgaXQuXG5pbnRlcmZhY2UgQXhpc0V4dGVudCB7XG4gIG1pbjogbnVtYmVyO1xuICBtYXg6IG51bWJlcjtcbn1cblxuLy8gT25lIHBvaW50IG9mIGEgMTAwJSBzdGFja2VkIHNlcmllczogaXRzIHNoYXJlIG9mIHRoZSBjYXRlZ29yeSdzIHRvdGFsLFxuLy8gd2hpY2ggRUNoYXJ0cyBwbG90cyBhbmQgc3RhY2tzLCBhbmQgdGhlIHZhbHVlIGl0IGNhbWUgZnJvbS5cbmludGVyZmFjZSBTaGFyZURhdGFJdGVtIHtcbiAgdmFsdWU6IG51bWJlciB8IG51bGw7XG4gIHJhdzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gQSBwb2ludCB0aGF0IHByaW50cyBpdHMgb3duIGRhdGEgbGFiZWw6IGEgJ2xhc3QnIHNlcmllcycgbGF0ZXN0IHBvaW50LFxuLy8ga2VlcGluZyB0aGUgcmF3IHZhbHVlIGEgMTAwJSBzdGFja2VkIHBvaW50IGNhcnJpZXMuXG5pbnRlcmZhY2UgTGFiZWxlZERhdGFJdGVtPFAgZXh0ZW5kcyBEYXRhTGFiZWxQb3NpdGlvbj4ge1xuICB2YWx1ZTogbnVtYmVyIHwgbnVsbDtcbiAgcmF3PzogbnVtYmVyIHwgbnVsbDtcbiAgbGFiZWw6IERhdGFMYWJlbDxQPjtcbn1cblxudHlwZSBTZXJpZXNEYXRhSXRlbTxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24+ID0gbnVtYmVyIHwgbnVsbCB8IFNoYXJlRGF0YUl0ZW0gfCBMYWJlbGVkRGF0YUl0ZW08UD47XG5cbi8vIFdoYXQgYSBkYXRhIGxhYmVsJ3MgZm9ybWF0dGVyIGlzIGhhbmRlZDogdGhlIHBvaW50J3MgcGxvdHRlZCB2YWx1ZSwgaXRzXG4vLyBkYXRhIGl0ZW0gYXMgZ2l2ZW4gKGEgbnVtYmVyLCBvciBhbiBvYmplY3QgY2FycnlpbmcgdGhlIHJhdyB2YWx1ZSksIGFuZCBpdHNcbi8vIGluZGV4LlxuaW50ZXJmYWNlIERhdGFMYWJlbFBhcmFtcyB7XG4gIHZhbHVlPzogdW5rbm93bjtcbiAgZGF0YT86IHVua25vd247XG4gIGRhdGFJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgRGF0YUxhYmVsRm9ybWF0dGVyID0gKHBhcmFtczogRGF0YUxhYmVsUGFyYW1zKSA9PiBzdHJpbmc7XG5cbi8vIFdoZXJlIGEgZGF0YSBsYWJlbCBzaXRzOiAnb3V0c2lkZScgcGFzdCBhbiB1bnN0YWNrZWQgYmFyJ3MgZW5kLCBvbiB0aGUgc2lkZVxuLy8gaXRzIHNpZ24gcG9pbnRzIHRvOyAnaW5zaWRlJyBhIHN0YWNrZWQgYmFyOyAndG9wJyBhYm92ZSBhIGxpbmUgb3IgYXJlYVxuLy8gcG9pbnQuIEVDaGFydHMgdGFrZXMgJ291dHNpZGUnIG9uIGEgYmFyIG9ubHkuXG5leHBvcnQgdHlwZSBEYXRhTGFiZWxQb3NpdGlvbiA9ICd0b3AnIHwgJ2luc2lkZScgfCAnb3V0c2lkZSc7XG5cbi8vIE9uZSBFQ2hhcnRzIGxhYmVsLCBhcyBhIHNlcmllcyBvciBhIHNpbmdsZSBwb2ludCBwcmludHMgaXQuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFMYWJlbDxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24gPSBEYXRhTGFiZWxQb3NpdGlvbj4ge1xuICBzaG93OiB0cnVlO1xuICBwb3NpdGlvbjogUDtcbiAgZm9udFNpemU6IG51bWJlcjtcbiAgZm9ybWF0dGVyOiBEYXRhTGFiZWxGb3JtYXR0ZXI7XG59XG5cbi8vIEEgc2VyaWVzJyBkYXRhIGxhYmVscyBhcyBkYXRhTGFiZWxPcHRpb24gZGVjaWRlcyB0aGVtLCBiZWZvcmUgYnVpbGRTZXJpZXNcbi8vIHBsYWNlcyB0aGVtIGJ5IHdoYXQgdGhlIHNlcmllcyBkcmF3czogdGhlIGxhYmVsJ3MgdGV4dCBhbmQgc2l6ZSwgd2hldGhlclxuLy8gbGFiZWxzIHRoYXQgd291bGQgb3ZlcmxhcCBhcmUgaGlkZGVuICgnYXV0bycpLCBhbmQgd2hldGhlciBvbmx5IHRoZSBsYXRlc3Rcbi8vIHBvaW50IHByaW50cyBvbmUgKCdsYXN0JykuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmllc0RhdGFMYWJlbHMge1xuICB0ZXh0OiBPbWl0PERhdGFMYWJlbCwgJ3Bvc2l0aW9uJz47XG4gIGhpZGVPdmVybGFwOiBib29sZWFuO1xuICBsYXN0T25seTogYm9vbGVhbjtcbn1cblxuLy8gQSBzZXJpZXMnIGRhdGEgbGFiZWxzIHBsYWNlZDogYHNlcmllc2AgaXMgc3ByZWFkIG92ZXIgdGhlIHNlcmllcyAoaXRzXG4vLyBsYWJlbCwgYW5kIGZvciAnYXV0bycgdGhlIG92ZXJsYXAgaGlkaW5nKSwgYW5kIGBkYXRhYCBpcyBpdHMgcG9pbnRzLCB0aGVcbi8vIGxhdGVzdCBub24tZW1wdHkgb25lIGNhcnJ5aW5nIHRoZSBsYWJlbCBmb3IgJ2xhc3QnLlxuaW50ZXJmYWNlIFBsYWNlZERhdGFMYWJlbHM8UCBleHRlbmRzIERhdGFMYWJlbFBvc2l0aW9uPiB7XG4gIHNlcmllczogeyBsYWJlbD86IERhdGFMYWJlbDxQPjsgbGFiZWxMYXlvdXQ/OiB7IGhpZGVPdmVybGFwOiBib29sZWFuIH0gfTtcbiAgZGF0YTogU2VyaWVzRGF0YUl0ZW08UD5bXTtcbn1cblxuLy8gQSB2YWx1ZSBheGlzJ3MgbnVtYmVyIGZvcm1hdCwgZGVjaWRlZCBvbmNlIGZvciB0aGUgYXhpczogdGhlIGZvcm1hdCB0aGVcbi8vIG1lYXN1cmVzIHBsb3R0ZWQgYWdhaW5zdCBpdCBhZ3JlZSBvbiAoYXhpc051bWJlckZvcm1hdCksIHdpdGggdGhlIHVuaXRzIGFuZFxuLy8gZGVjaW1hbHMgaXRzIHBlYWsgY2FsbHMgZm9yLCBhbmQgdGhlIGNvbnRleHQgaXRzIHRpY2tzIGFyZSB3cml0dGVuIGluIChhblxuLy8gYXhpcyBvZiAwLTEgZnJhY3Rpb25zIHJlYWRzIHRoZW0gYXMgcmF0aW9zIHdoYXRldmVyIHRoZSByZXBvcnQnc1xuLy8gcGVyY2VudEZvcm1hdCkuIG51bGwgaXMgYSBwbGFpbiBheGlzLiBJdHMgdGlja3MgYW5kIGl0cyBzZXJpZXMnIGRhdGEgbGFiZWxzXG4vLyBib3RoIHdyaXRlIGluIGl0LlxuaW50ZXJmYWNlIFZhbHVlQXhpc0Zvcm1hdCB7XG4gIHNwZWM6IE51bWJlckZvcm1hdFNwZWM7XG4gIGNoYXJ0OiBDaGFydE51bWJlckZvcm1hdDtcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dDtcbn1cblxuLy8gVGhlIHNoYXJlcyBhIDEwMCUgc3RhY2tlZCBjaGFydCBkcmF3cywgYnkgdGhlIGluZGV4IG9mIHRoZSBleHRyYWN0ZWQgc2VyaWVzXG4vLyB0aGV5IHJlcGxhY2UuXG5leHBvcnQgdHlwZSBQZXJjZW50U2hhcmVzID0gTWFwPG51bWJlciwgKG51bWJlciB8IG51bGwpW10+O1xuXG4vLyBUaGUgcGxvdCdzIGRpc3RhbmNlIGZyb20gZWFjaCBlZGdlIG9mIHRoZSBjaGFydCwgaW4gcGl4ZWxzLlxuaW50ZXJmYWNlIEF4aXNHcmlkUm9vbSB7XG4gIGxlZnQ6IG51bWJlcjtcbiAgcmlnaHQ6IG51bWJlcjtcbiAgdG9wOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xuICBjb250YWluTGFiZWw6IGJvb2xlYW47XG59XG5cblxuLy8gY29sb3JCeSBhcHBsaWVzIG9ubHkgdG8gc2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzLCBhbmQgb25seSB3aGVuIHNwbGl0Qnlcbi8vIGlzbid0IGFscmVhZHkgZHJpdmluZyBtdWx0aXBsZSBzZXJpZXM6IGl0IGNvbG9ycyBlYWNoIGJhciBieSBpdHMgY2F0ZWdvcnkgYW5kXG4vLyBzaG93cyBhIGxlZ2VuZCAob25lIHNlcmllcyBwZXIgY2F0ZWdvcnksIG92ZXJsYXBwZWQgdG8gZnVsbCB3aWR0aCkuXG4vL1xuLy8gSXQgaXMgdGhlIERFRkFVTFQgZm9yIGEgY2F0ZWdvcmljYWwgYmFyIGNoYXJ0IHJhdGhlciB0aGFuIHNvbWV0aGluZyB0aGUgY29uZmlnXG4vLyBoYXMgdG8gYXNrIGZvci4gQSBiYXIgY2hhcnQgd2hvc2UgeC1heGlzIGlzIGEgY2F0ZWdvcnkg4oCUIHJlZ2lvbnMsIHN0YXR1c2VzLFxuLy8gc3RvcmVzIOKAlCBpcyBjb21wYXJpbmcgdGhvc2UgY2F0ZWdvcmllcyB0byBlYWNoIG90aGVyLCBhbmQgb25lIGZsYXQgY29sb3Igd2l0aFxuLy8gbm8gbGVnZW5kIGlzIHRoZSB3cm9uZyByZWFkaW5nIG9mIGl0IGluIGVzc2VudGlhbGx5IGV2ZXJ5IGNhc2UuIFJlcXVpcmluZ1xuLy8gY29sb3JCeSB0byBvcHQgaW4gbWVhbnQgZXZlcnkgc3VjaCBjaGFydCByZW5kZXJlZCBtb25vY2hyb21lIHVubGVzcyB3aG9ldmVyXG4vLyB3cm90ZSB0aGUgY29uZmlnIHJlbWVtYmVyZWQgYW4gb3B0aW9uYWwgcHJvcGVydHksIHdoaWNoIGlzIGEgZGVmYXVsdCBzZXQgdGhlXG4vLyB3cm9uZyB3YXkgcm91bmQ6IHRoZSBjb21tb24gY2FzZSBzaG91bGQgbm90IG5lZWQgdGhlIGZsYWcuXG4vL1xuLy8gQSBUSU1FIGF4aXMgaXMgZXhjbHVkZWQ6IGNvbnNlY3V0aXZlIHBlcmlvZHMgYXJlIG9uZSBzZXJpZXMgbW92aW5nLCBub3Rcbi8vIGNhdGVnb3JpZXMgYmVpbmcgY29tcGFyZWQsIGFuZCBjb2xvcmluZyBlYWNoIG1vbnRoIGRpZmZlcmVudGx5IHJlYWRzIGFzXG4vLyB1bnJlbGF0ZWQgZ3JvdXBzLiBFeHBsaWNpdGx5IG9wdGluZyBvdXQg4oCUIGNvbG9yQnk6IHtjb2x1bW46ICcnfSwgYSBjb2xvciBvblxuLy8gdGhlIG1lYXN1cmUgb3IgYSBjb25maWcubGVnZW5kIG9mICdoaWRkZW4nIOKAlCBzdGlsbCB3aW5zLCBzbyBhIGNhbGxlciB0aGF0XG4vLyB3YW50cyBvbmUgZmxhdCBjb2xvciBjYW4gc2F5IHNvLlxuLy9cbi8vIFwiQmFyIGNoYXJ0XCIgaXMgdGhlIHR5cGUgdGhlIGxvbmUgbWVhc3VyZSBpcyBhY3R1YWxseSBEUkFXTiBhczogaXRzIG93biB0eXBlXG4vLyB3aGVuIGl0IG5hbWVzIG9uZSwgd2hpY2ggY2FuIHR1cm4gYSBsaW5lIGNoYXJ0J3Mgc2luZ2xlIHNlcmllcyBpbnRvIGJhcnMgb3Jcbi8vIGEgYmFyIGNoYXJ0J3MgaW50byBhIGxpbmUuXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xvckJ5KGNvbmZpZzogQ2hhcnRDb25maWcpOiBib29sZWFuIHtcbiAgaWYgKGNvbmZpZy5zcGxpdEJ5Py5jb2x1bW4gfHwgKGNvbmZpZy5tZWFzdXJlcz8uWzBdPy50eXBlID8/IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2JhcicpICE9PSAnYmFyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChjb25maWcuY29sb3JCeSkge1xuICAgIHJldHVybiAhIWNvbmZpZy5jb2xvckJ5LmNvbHVtbjtcbiAgfVxuXG4gIC8vIEEgbWVhc3VyZSBnaXZlbiBpdHMgb3duIGNvbG9yIGFza3MgZm9yIG9uZSBmbGF0IGNvbG9yLlxuICBpZiAobWVhc3VyZUNvbG9ySGV4KGNvbmZpZy5tZWFzdXJlcz8uWzBdKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoY29uZmlnLnhBeGlzPy5raW5kID8/ICdjYXRlZ29yeScpID09PSAnY2F0ZWdvcnknXG4gICAgJiYgIWNvbmZpZy54QXhpcz8uZ3JhbnVsYXJpdHlcbiAgICAmJiAoY29uZmlnLm1lYXN1cmVzPy5sZW5ndGggPz8gMSkgPD0gMTtcbn1cblxuXG4vLyBUaGUgY29sdW1uIGNvbG9yQnkgZ3JvdXBzIGJ5IOKAlCBpdHMgb3duIHdoZW4gdGhlIGNvbmZpZyBuYW1lZCBvbmUsIG90aGVyd2lzZVxuLy8gdGhlIHgtYXhpcyBpdCBkZWZhdWx0cyB0byBjb2xvcmluZy5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvckJ5Q29sdW1uKGNvbmZpZzogQ2hhcnRDb25maWcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXNDb2xvckJ5KGNvbmZpZylcbiAgICA/IChjb25maWcuY29sb3JCeT8uY29sdW1uIHx8IGNvbmZpZy54QXhpcz8uY29sdW1uKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5cbi8vIENhdGVnb3JpZXMgKyBuYW1lZCBzZXJpZXMgZXh0cmFjdGVkIGZyb20gYSBjaGFydCBjb21wb25lbnQncyBjb25maWcgKyByb3dzIOKAlFxuLy8gdGhlIG9uZSBwaXZvdCAoc3BsaXRCeSDihpIgc2VyaWVzLCBtZWFzdXJlcyDihpIgc2VyaWVzKSBzaGFyZWQgYnkgdGhlIG9uLXNjcmVlblxuLy8gRUNoYXJ0cyBvcHRpb24gYmVsb3cgQU5EIHRoZSBQb3dlclBvaW50IGV4cG9ydCdzIG5hdGl2ZSBjaGFydCBkYXRhLCBzbyBib3RoXG4vLyBtZWRpYSBwbG90IGlkZW50aWNhbCBudW1iZXJzLlxuLy9cbi8vIEEgc2VyaWVzJyBgdHlwZWAgaXMgdGhlIHR5cGUgaXRzIG1lYXN1cmUgYXNrcyB0byBiZSBkcmF3biBhcywgYW5kIGlzIGFic2VudFxuLy8gd2hlbiB0aGUgbWVhc3VyZSBsZWF2ZXMgaXQgdG8gdGhlIGNoYXJ0J3MgY2hhcnRUeXBlIChzZWUgc2VyaWVzVHlwZXMpLiBJdHNcbi8vIGBtZWFzdXJlYCBpcyB0aGUgb25lIGl0IHBsb3RzLCB3aG9zZSBudW1iZXIgZm9ybWF0IGl0cyB0b29sdGlwIHVzZXMgYW5kXG4vLyB3aG9zZSBkaXNwbGF5IGtleXMgKGNvbG9yLCBheGlzKSBpdCBmb2xsb3dzLCBhbmQgYG1lYXN1cmVJbmRleGAgdGhhdFxuLy8gbWVhc3VyZSdzIHBvc2l0aW9uOiB0aGUgZmlyc3QgbWVhc3VyZSwgMCwgZm9yIGV2ZXJ5IHNlcmllcyBvZiBhIHNwbGl0Qnkgb3Jcbi8vIGNvbG9yQnkgY2hhcnQuXG4vL1xuLy8gcmF3Q2F0ZWdvcmllcyBob2xkcyBlYWNoIGNhdGVnb3J5IGFzIGRhdGEucm93cyBob2xkIGl0LCBieSBwb3NpdGlvbiwgYW5kXG4vLyByYXdHcm91cHMgZWFjaCBzcGxpdCAob3IgY29sb3JCeSkgdmFsdWUgYnkgc2VyaWVzIHBvc2l0aW9uLCBlbXB0eSB3aGVuIHRoZVxuLy8gY2hhcnQgZG9lcyBub3Qgc3BsaXQ6IGEgY2xpY2sgbmFtZXMgdGhlIHJhdyB2YWx1ZXMsIG5ldmVyIHRoZSBkcmF3biB0ZXh0LlxuLy8gVGhlIFBvd2VyUG9pbnQgZXhwb3J0IHJlYWRzIG9ubHkgY2F0ZWdvcmllcyBhbmQgc2VyaWVzLlxuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRDaGFydFNlcmllcyB7XG4gIGNhdGVnb3JpZXM6IHN0cmluZ1tdO1xuICBzZXJpZXM6IEV4dHJhY3RlZENoYXJ0U2VyaWVzSXRlbVtdO1xuICByYXdDYXRlZ29yaWVzOiB1bmtub3duW107XG4gIHJhd0dyb3VwczogdW5rbm93bltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RlZENoYXJ0U2VyaWVzSXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXTtcbiAgdHlwZT86IEF4aXNDaGFydFR5cGU7XG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZTtcbiAgbWVhc3VyZUluZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q2hhcnRTZXJpZXMoY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIGRhdGE6IENvbXBvbmVudERhdGEpOiBFeHRyYWN0ZWRDaGFydFNlcmllcyB7XG4gIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC5jb25maWcgYXMgQ2hhcnRDb25maWc7XG4gIGNvbnN0IHsgeENvbHVtbiwgZ3JvdXBDb2x1bW4gfSA9IGNoYXJ0Q29sdW1ucyhjb25maWcsIGRhdGEpO1xuICBjb25zdCBtZWFzdXJlcyA9IGNoYXJ0TWVhc3VyZXMoY29uZmlnLCBkYXRhKTtcblxuICBjb25zdCByYXdDYXRlZ29yaWVzID0gdW5pcXVlVmFsdWVzKGRhdGEucm93cywgeENvbHVtbik7XG4gIGNvbnN0IGNhdGVnb3JpZXMgPSByYXdDYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IFN0cmluZyhjYXRlZ29yeSA/PyAn4oCUJykpO1xuICBjb25zdCBzZXJpZXM6IEV4dHJhY3RlZENoYXJ0U2VyaWVzWydzZXJpZXMnXSA9IFtdO1xuICBjb25zdCByYXdHcm91cHMgPSBncm91cENvbHVtbiA/IHVuaXF1ZVZhbHVlcyhkYXRhLnJvd3MsIGdyb3VwQ29sdW1uKSA6IFtdO1xuXG4gIGlmIChncm91cENvbHVtbikge1xuICAgIC8vIE9uZSBzZXJpZXMgcGVyIGdyb3VwIHZhbHVlIChzcGxpdEJ5L2NvbG9yQnkpLCBwaXZvdGVkIG92ZXIgdGhlIGZpcnN0IG1lYXN1cmUuXG4gICAgY29uc3QgbWVhc3VyZSA9IG1lYXN1cmVzWzBdO1xuICAgIGZvciAoY29uc3QgZ3JvdXBWYWx1ZSBvZiByYXdHcm91cHMpIHtcbiAgICAgIHNlcmllcy5wdXNoKHtcbiAgICAgICAgbmFtZTogU3RyaW5nKGdyb3VwVmFsdWUgPz8gJ+KAlCcpLFxuICAgICAgICB2YWx1ZXM6IGNhdGVnb3J5VmFsdWVzKGRhdGEucm93cywgeENvbHVtbiwgcmF3Q2F0ZWdvcmllcywgbWVhc3VyZS5jb2x1bW4sIChyb3cpID0+IHJvd1tncm91cENvbHVtbl0gPT09IGdyb3VwVmFsdWUpLFxuICAgICAgICB0eXBlOiBtZWFzdXJlLnR5cGUsXG4gICAgICAgIG1lYXN1cmUsXG4gICAgICAgIG1lYXN1cmVJbmRleDogMCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IFttZWFzdXJlSW5kZXgsIG1lYXN1cmVdIG9mIG1lYXN1cmVzLmVudHJpZXMoKSkge1xuICAgICAgc2VyaWVzLnB1c2goe1xuICAgICAgICBuYW1lOiBjb21wYXJlZFNlcmllc05hbWUobWVhc3VyZSwgbWVhc3VyZXMsIGRhdGEpID8/IG1lYXN1cmUubGFiZWwgPz8gbWVhc3VyZS5jb2x1bW4sXG4gICAgICAgIHZhbHVlczogY2F0ZWdvcnlWYWx1ZXMoZGF0YS5yb3dzLCB4Q29sdW1uLCByYXdDYXRlZ29yaWVzLCBtZWFzdXJlLmNvbHVtbiksXG4gICAgICAgIHR5cGU6IG1lYXN1cmUudHlwZSxcbiAgICAgICAgbWVhc3VyZSxcbiAgICAgICAgbWVhc3VyZUluZGV4LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgY2F0ZWdvcmllcywgc2VyaWVzLCByYXdDYXRlZ29yaWVzLCByYXdHcm91cHMgfTtcbn1cblxuLy8gVGhlIGNvbHVtbiBhIGNoYXJ0J3MgY2F0ZWdvcmllcyBjb21lIGZyb20sIGFuZCB0aGUgb25lIHRoYXQgc3BsaXRzIGl0c1xuLy8gZmlyc3QgbWVhc3VyZSBpbnRvIGEgc2VyaWVzIHBlciB2YWx1ZSwgaWYgYW55LiBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyXG4vLyBjYXRlZ29yeSB0b28gKHNvIGVhY2ggYmFyIGNhcnJpZXMgaXRzIG93biBjb2xvciArIGxlZ2VuZCBlbnRyeSksIGJ1dCB0aGVcbi8vIGJhcnMgYXJlIG92ZXJsYXBwZWQgdG8gZnVsbCB3aWR0aCBpbiBidWlsZEF4aXNPcHRpb24gcmF0aGVyIHRoYW4gbGFpZFxuLy8gc2lkZS1ieS1zaWRlLiBzcGxpdEJ5IHdpbnMgaWYgYm90aCBhcmUgc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0Q29sdW1ucyhjb25maWc6IENoYXJ0Q29uZmlnLCBkYXRhOiBDb21wb25lbnREYXRhKTogeyB4Q29sdW1uOiBzdHJpbmc7IGdyb3VwQ29sdW1uOiBzdHJpbmcgfCB1bmRlZmluZWQgfSB7XG4gIHJldHVybiB7XG4gICAgeENvbHVtbjogY29uZmlnLnhBeGlzPy5jb2x1bW4gPz8gZGF0YS5jb2x1bW5zWzBdLFxuICAgIGdyb3VwQ29sdW1uOiBjb25maWcuc3BsaXRCeT8uY29sdW1uIHx8IGNvbG9yQnlDb2x1bW4oY29uZmlnKSxcbiAgfTtcbn1cblxuLy8gT25lIGNvbHVtbidzIHZhbHVlcyBieSBjYXRlZ29yeSwgZnJvbSB0aGUgcm93cyBgbWF0Y2hgIGtlZXBzIChhbGwgb2YgdGhlbVxuLy8gd2hlbiBpdCBpcyBsZWZ0IG91dCkuIEEgY2F0ZWdvcnkgd2l0aCBubyByb3cgaGFzIG5vIHZhbHVlLlxuZnVuY3Rpb24gY2F0ZWdvcnlWYWx1ZXMoXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gIHhDb2x1bW46IHN0cmluZyxcbiAgcmF3Q2F0ZWdvcmllczogdW5rbm93bltdLFxuICBjb2x1bW46IHN0cmluZyxcbiAgbWF0Y2g/OiAocm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gYm9vbGVhbixcbik6IChudW1iZXIgfCBudWxsKVtdIHtcbiAgY29uc3QgYnlDYXRlZ29yeSA9IG5ldyBNYXA8dW5rbm93biwgdW5rbm93bj4oKTtcbiAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgIGlmICghbWF0Y2ggfHwgbWF0Y2gocm93KSkge1xuICAgICAgYnlDYXRlZ29yeS5zZXQocm93W3hDb2x1bW5dLCByb3dbY29sdW1uXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJhd0NhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gbnVtZXJpYyhieUNhdGVnb3J5LmdldChjYXRlZ29yeSkpKTtcbn1cblxuLy8gQSBjb21wYXJlZCBzZXJpZXMnIG5hbWUsIHdvcmRlZCBmcm9tIGl0cyBsYW5lJ3Mgb2Zmc2V0IHJhdGhlciB0aGFuIGZyb20gaXRzXG4vLyBvd24gbGFiZWwsIHNvIGEgY2hhcnQgdGhlIHZpZXdlciByZWdyb3VwZWQgc2F5cyB3aGF0IGl0IG5vdyBjb21wYXJlczpcbi8vICdSZXZlbnVlICh2cyBwcmV2aW91cyB3ZWVrKScsICdSZXZlbnVlIGNoYW5nZSAodnMgcHJldmlvdXMgd2VlayknLCAnUmV2ZW51ZVxuLy8gJSBjaGFuZ2UgKHZzIHByZXZpb3VzIHllYXIpJy4gVGhlIG1lYXN1cmUgaXMgbmFtZWQgYXMgaXRzIGN1cnJlbnQgdmFsdWUnc1xuLy8gc2VyaWVzIGlzLiBudWxsIGZvciBhbnkgb3RoZXIgc2VyaWVzLCB3aGljaCBrZWVwcyBpdHMgb3duIG5hbWUsIGFuZCBmb3Jcbi8vIGRhdGEgd2l0aG91dCB0aGUgY29tcGFyaXNvbiBrZXlzLlxuZnVuY3Rpb24gY29tcGFyZWRTZXJpZXNOYW1lKG1lYXN1cmU6IENoYXJ0TWVhc3VyZSwgbWVhc3VyZXM6IENoYXJ0TWVhc3VyZVtdLCBkYXRhOiBDb21wb25lbnREYXRhKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IG91dHB1dCA9IGRhdGEub3V0cHV0cz8uW21lYXN1cmUuY29sdW1uXTtcbiAgY29uc3Qgb2Zmc2V0ID0gb3V0cHV0Py5vZmZzZXQgPyBkYXRhLmNvbXBhcmlzb24/Lm9mZnNldHM/LltvdXRwdXQub2Zmc2V0IC0gMV0gOiB1bmRlZmluZWQ7XG5cbiAgaWYgKCFvdXRwdXQgfHwgIW9mZnNldCB8fCAhb3V0cHV0LnJvbGUgfHwgb3V0cHV0LnJvbGUgPT09ICdjdXJyZW50Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY3VycmVudCA9IGN1cnJlbnRPdXRwdXRBbGlhcyhkYXRhLm91dHB1dHMsIG1lYXN1cmUuY29sdW1uKTtcbiAgY29uc3QgbGFiZWwgPSBtZWFzdXJlcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5jb2x1bW4gPT09IGN1cnJlbnQpPy5sYWJlbCA/PyBjdXJyZW50O1xuXG4gIHJldHVybiBgJHtsYWJlbH0ke1JPTEVfTkFNRV9TVUZGSVhFU1tvdXRwdXQucm9sZV19ICgke2NvbXBhcmlzb25PZmZzZXRMYWJlbChvZmZzZXQpfSlgO1xufVxuXG4vLyBUaGUgY29sdW1uIGFuIG91dHB1dCdzIGN1cnJlbnQgdmFsdWUgaXMgaW46IGl0cyBsYW5lJ3MgY3VycmVudCBvdXRwdXQsIGVsc2Vcbi8vIGZvciBhIHJhbmsgb3IgYSBzaGFyZSB0aGUgdW5jb21wYXJlZCBvbmUgb2YgdGhlIHNhbWUgbWVhc3VyZSwgZWxzZSB0aGVcbi8vIG1lYXN1cmUncyBvd24gY29sdW1uIChhIHdpbmRvd2VkIHZhbHVlJ3Mgc291cmNlKS5cbmZ1bmN0aW9uIGN1cnJlbnRPdXRwdXRBbGlhcyhvdXRwdXRzOiBSZWNvcmQ8c3RyaW5nLCBPdXRwdXRNZXRhPiwgYWxpYXM6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbYWxpYXNdO1xuICBjb25zdCB1bmNvbXBhcmVkID0gb3V0cHV0LmtpbmQgPT09ICd2YWx1ZSdcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogT2JqZWN0LmtleXMob3V0cHV0cykuZmluZCgoa2V5KSA9PiBvdXRwdXRzW2tleV0ubWVhc3VyZSA9PT0gb3V0cHV0Lm1lYXN1cmVcbiAgICAgICYmIG91dHB1dHNba2V5XS5raW5kID09PSBvdXRwdXQua2luZFxuICAgICAgJiYgb3V0cHV0c1trZXldLnJvbGUgPT09IG51bGwpO1xuXG4gIHJldHVybiBsYW5lT3V0cHV0QWxpYXMob3V0cHV0cywgYWxpYXMsICdjdXJyZW50JykgPz8gdW5jb21wYXJlZCA/PyBvdXRwdXQubWVhc3VyZTtcbn1cblxuLy8gQSBzZXJpZXMnIG93biBjb2xvciBhcyBDU1MgaGV4OiBpdHMgbWVhc3VyZSdzIG5hbWVkIGNvbG9yLCBvciB1bmRlZmluZWQgd2hlblxuLy8gaXQgbmFtZXMgbm9uZSAob3IgYSBuYW1lIHRoZSBwYWxldHRlIGRvZXMgbm90IGtub3cpIGFuZCB0aGUgdGhlbWUgY29sb3JzIGl0XG4vLyBieSBpdHMgcG9zaXRpb24uXG5leHBvcnQgZnVuY3Rpb24gc2VyaWVzQ29sb3Ioc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBoZXggPSBuYW1lZENvbG9ySGV4KHNlcmllcyk7XG5cbiAgcmV0dXJuIGhleCA/IGAjJHtoZXh9YCA6IHVuZGVmaW5lZDtcbn1cblxuLy8gQSBzZXJpZXMnIGNvbG9yIGFzIHRoZSBiYXJlIGhleCBQb3dlclBvaW50IHRha2VzOiBpdHMgbWVhc3VyZSdzIG5hbWVkIGNvbG9yLFxuLy8gZWxzZSB0aGUgcGFsZXR0ZSBjb2xvciBvZiBpdHMgcG9zaXRpb24sIGFzIHRoZSBzY3JlZW4ncyB0aGVtZSBwaWNrcyBpdC5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpZXNIZXgoc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0sIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gbmFtZWRDb2xvckhleChzZXJpZXMpID8/IFJFUE9SVF9DSEFSVF9DT0xPUlNbaW5kZXggJSBSRVBPUlRfQ0hBUlRfQ09MT1JTLmxlbmd0aF07XG59XG5cbmZ1bmN0aW9uIG5hbWVkQ29sb3JIZXgoc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gbWVhc3VyZUNvbG9ySGV4KHNlcmllcy5tZWFzdXJlKTtcbn1cblxuLy8gQSBtZWFzdXJlJ3MgbmFtZWQgY29sb3IgYXMgYmFyZSBoZXgsIG9yIHVuZGVmaW5lZCB3aGVuIGl0IG5hbWVzIG5vbmUgb3IgYVxuLy8gbmFtZSB0aGUgcGFsZXR0ZSBkb2VzIG5vdCBrbm93LiBUaGUgbmFtZSBpcyByZWFkIHRocm91Z2ggdGhlIGVudW0sIHNvIGFcbi8vIHN0b3JlZCBuYW1lIHN1Y2ggYXMgJ19fcHJvdG9fXycgbmV2ZXIgcmVhY2hlcyB0aGUgbG9va3VwIG9iamVjdC5cbmZ1bmN0aW9uIG1lYXN1cmVDb2xvckhleChtZWFzdXJlOiBDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb2xvciA9IE9iamVjdC52YWx1ZXMoUmVwb3J0Q2hhcnRDb2xvcikuZmluZCgobmFtZSkgPT4gbmFtZSA9PT0gbWVhc3VyZT8uY29sb3IpO1xuXG4gIHJldHVybiBjb2xvciA/IFJFUE9SVF9DSEFSVF9DT0xPUl9CWV9OQU1FW2NvbG9yXSA6IHVuZGVmaW5lZDtcbn1cblxuLy8gQSBtZWFzdXJlJ3MgbGluZSBzdHlsZSB3aGVuIGl0IG5hbWVzIG9uZSBFQ2hhcnRzIGtub3dzLCBlbHNlIHVuZGVmaW5lZCBhbmRcbi8vIHRoZSBsaW5lIGlzIHNvbGlkLlxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVMaW5lU3R5bGUobWVhc3VyZTogQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkKTogUmVwb3J0Q2hhcnRMaW5lU3R5bGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhSZXBvcnRDaGFydExpbmVTdHlsZSkuZmluZCgoc3R5bGUpID0+IHN0eWxlID09PSBtZWFzdXJlPy5saW5lKTtcbn1cblxuLy8gQSBtZWFzdXJlJ3Mgc3RhdGlzdGljIGxpbmUgd2hlbiBpdCBuYW1lcyBvbmUgdGhlIHZpZXdlciBrbm93cywgZWxzZVxuLy8gdW5kZWZpbmVkIGFuZCBpdCBkcmF3cyBub25lLlxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVNYXJrU3RhdChtZWFzdXJlOiBDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQpOiBSZXBvcnRDaGFydE1hcmtTdGF0IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoUmVwb3J0Q2hhcnRNYXJrU3RhdCkuZmluZCgoc3RhdCkgPT4gc3RhdCA9PT0gbWVhc3VyZT8ubWFya0xpbmUpO1xufVxuXG4vLyBBIHNlcmllcycgc3RhdGlzdGljIG92ZXIgaXRzIHBvaW50cyB0aGF0IGhhdmUgYSB2YWx1ZTogdGhlaXIgbWVhbiwgdGhlaXJcbi8vIG1lZGlhbiAodGhlIG1lYW4gb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIHdoZW4gdGhlIGNvdW50IGlzIGV2ZW4pLCB0aGVcbi8vIGxvd2VzdCBvciB0aGUgaGlnaGVzdC4gbnVsbCB3aGVuIG5vIHBvaW50IGhhcyBhIHZhbHVlLiBTaGFyZWQgd2l0aCB0aGVcbi8vIFBvd2VyUG9pbnQgZXhwb3J0IHNvIGJvdGggbWVkaWEgZHJhdyB0aGUgbGluZSBhdCB0aGUgc2FtZSBoZWlnaHQuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWVzU3RhdCh2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLCBzdGF0OiBSZXBvcnRDaGFydE1hcmtTdGF0KTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IHByZXNlbnQgPSB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIG51bWJlciA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpO1xuXG4gIGlmICghcHJlc2VudC5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoc3RhdCkge1xuICAgIGNhc2UgUmVwb3J0Q2hhcnRNYXJrU3RhdC5BdmVyYWdlOlxuICAgICAgcmV0dXJuIHByZXNlbnQucmVkdWNlKChzdW0sIHZhbHVlKSA9PiBzdW0gKyB2YWx1ZSwgMCkgLyBwcmVzZW50Lmxlbmd0aDtcbiAgICBjYXNlIFJlcG9ydENoYXJ0TWFya1N0YXQuTWVkaWFuOiB7XG4gICAgICBjb25zdCBzb3J0ZWQgPSBbLi4ucHJlc2VudF0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgY29uc3QgbWlkZGxlID0gTWF0aC5mbG9vcihzb3J0ZWQubGVuZ3RoIC8gMik7XG5cbiAgICAgIHJldHVybiBzb3J0ZWQubGVuZ3RoICUgMiA/IHNvcnRlZFttaWRkbGVdIDogKHNvcnRlZFttaWRkbGUgLSAxXSArIHNvcnRlZFttaWRkbGVdKSAvIDI7XG4gICAgfVxuICAgIGNhc2UgUmVwb3J0Q2hhcnRNYXJrU3RhdC5NaW46XG4gICAgICByZXR1cm4gTWF0aC5taW4oLi4ucHJlc2VudCk7XG4gICAgY2FzZSBSZXBvcnRDaGFydE1hcmtTdGF0Lk1heDpcbiAgICAgIHJldHVybiBNYXRoLm1heCguLi5wcmVzZW50KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy8gV2hldGhlciBhIGNoYXJ0IGRyYXdzIHN0YXRpc3RpYyBsaW5lcy4gQSBob3Jpem9udGFsIGNoYXJ0J3MgdmFsdWVzIHJ1blxuLy8gYWxvbmcgeCwgYW5kIFBvd2VyUG9pbnQgY2Fubm90IGRyYXcgYSBsaW5lIGJlc2lkZSBob3Jpem9udGFsIGJhcnMsIHNvXG4vLyBuZWl0aGVyIG1lZGl1bSBkcmF3cyBvbmUgdGhlcmUuXG5leHBvcnQgZnVuY3Rpb24gZHJhd3NTdGF0TGluZXMoY29uZmlnOiBDaGFydENvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gY29uZmlnLm9yaWVudGF0aW9uICE9PSAnaG9yaXpvbnRhbCc7XG59XG5cbi8vIEEgY29sb3JCeSBjaGFydCdzIG9uZSB2YWx1ZSBwZXIgY2F0ZWdvcnk6IHNlcmllcyBpIGhvbGRzIGNhdGVnb3J5IGkncyBiYXIuXG4vLyBQb3dlclBvaW50IGRyYXdzIHRoZXNlIGFzIGl0cyBvbmUgc2VyaWVzLCBhbmQgYSBzdGF0aXN0aWMgbGluZSBpcyB0YWtlblxuLy8gb3ZlciB0aGVtLlxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yQnlWYWx1ZXMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyk6IChudW1iZXIgfCBudWxsKVtdIHtcbiAgcmV0dXJuIGV4dHJhY3RlZC5jYXRlZ29yaWVzLm1hcCgoXywgaW5kZXgpID0+IGV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdPy52YWx1ZXNbaW5kZXhdID8/IG51bGwpO1xufVxuXG4vLyBUaGUgcmVmZXJlbmNlcyBhIGNoYXJ0IGRyYXdzLiBBIHZlcnRpY2FsIGF4aXMgY2hhcnQgYW5kIGEgd2F0ZXJmYWxsIGRyYXdcbi8vIHRoZW07IGEgcGllIGhhcyBubyB2YWx1ZSBheGlzLCBhbmQgYSBob3Jpem9udGFsIGNoYXJ0IGlzIGxlZnQgd2l0aG91dCB0aGVtXG4vLyBhcyBQb3dlclBvaW50IGNhbm5vdCBkcmF3IGEgbGluZSBiZXNpZGUgaG9yaXpvbnRhbCBiYXJzLiBBbiBlbnRyeSB3aXRob3V0IGFcbi8vIGZpbml0ZSB2YWx1ZSBpcyBza2lwcGVkLCBhbmQgb25lIHdob3NlIGB0b2AgaXMgbWlzc2luZyBvciBlcXVhbCB0byBpdHMgdmFsdWVcbi8vIGlzIGEgbGluZS4gc2Vjb25kYXJ5IHJlYWNoZXMgdGhlIHNlY29uZCB2YWx1ZSBheGlzIG9ubHkgb24gYSBjaGFydCB0aGF0IGhhc1xuLy8gb25lICh0d29BeGVzKS4gU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnQgZXhwb3J0LlxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0UmVmZXJlbmNlcyhjb25maWc6IENoYXJ0Q29uZmlnLCB0d29BeGVzOiBib29sZWFuKTogRHJhd25SZWZlcmVuY2VbXSB7XG4gIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG4gIGNvbnN0IHJlZmVyZW5jZXM6IChDaGFydFJlZmVyZW5jZSB8IG51bGwgfCB1bmRlZmluZWQpW10gPSBBcnJheS5pc0FycmF5KGNvbmZpZy5yZWZlcmVuY2VzKSA/IGNvbmZpZy5yZWZlcmVuY2VzIDogW107XG5cbiAgaWYgKGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHJlZmVyZW5jZXMuZmxhdE1hcCgocmVmZXJlbmNlKTogRHJhd25SZWZlcmVuY2VbXSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBheGlzTnVtYmVyKHJlZmVyZW5jZT8udmFsdWUpO1xuXG4gICAgaWYgKCFyZWZlcmVuY2UgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHRvID0gYXhpc051bWJlcihyZWZlcmVuY2UudG8pO1xuICAgIGNvbnN0IGxhYmVsID0gdHlwZW9mIHJlZmVyZW5jZS5sYWJlbCA9PT0gJ3N0cmluZycgPyByZWZlcmVuY2UubGFiZWwgOiAnJztcbiAgICBjb25zdCBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4ID0gdHdvQXhlcyAmJiByZWZlcmVuY2Uuc2Vjb25kYXJ5ID09PSB0cnVlID8gMSA6IDA7XG5cbiAgICByZXR1cm4gW3RvICE9PSB1bmRlZmluZWQgJiYgdG8gIT09IHZhbHVlXG4gICAgICA/IHsgbGFiZWwsIGxvdzogTWF0aC5taW4odmFsdWUsIHRvKSwgaGlnaDogTWF0aC5tYXgodmFsdWUsIHRvKSwgYmFuZDogdHJ1ZSwgYXhpc0luZGV4IH1cbiAgICAgIDogeyBsYWJlbCwgbG93OiB2YWx1ZSwgaGlnaDogdmFsdWUsIGJhbmQ6IGZhbHNlLCBheGlzSW5kZXggfV07XG4gIH0pO1xufVxuXG4vLyBFYWNoIHNlcmllcyBhcyBpdHMgc2hhcmUgb2YgaXRzIGNhdGVnb3J5J3MgdG90YWw6IHBlciBjYXRlZ29yeSwgdGhlXG4vLyBkZW5vbWluYXRvciBpcyB0aGUgc3VtIG9mIGV2ZXJ5IHNlcmllcycgYWJzb2x1dGUgdmFsdWUgdGhlcmUsIHNvIHRoZVxuLy8gbWFnbml0dWRlcyBvZiBhIGNhdGVnb3J5J3Mgc2hhcmVzIGFkZCB1cCB0byAxLiBBIG1peGVkLXNpZ24gY2F0ZWdvcnknc1xuLy8gbmVnYXRpdmUgdmFsdWVzIHRha2UgbmVnYXRpdmUgc2hhcmVzLCBkcmF3biBiZWxvdyB6ZXJvLiBBIG1pc3NpbmcgdmFsdWVcbi8vIHN0YXlzIG1pc3NpbmcsIGFuZCBhIGNhdGVnb3J5IHdob3NlIHRvdGFsIGlzIHplcm8gaGFzIG5vIHNoYXJlcy4gU2hhcmVkIGJ5XG4vLyB0aGUgc2NyZWVuLCB0aGUgUERGIGFuZCBQb3dlclBvaW50LCBzbyBhIDEwMCUgc3RhY2sgcmVhZHMgdGhlIHNhbWUgaW4gZWFjaC5cbmV4cG9ydCBmdW5jdGlvbiBwZXJjZW50U2hhcmVzKHZhbHVlczogKG51bWJlciB8IG51bGwpW11bXSk6IChudW1iZXIgfCBudWxsKVtdW10ge1xuICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCAuLi52YWx1ZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy5sZW5ndGgpKTtcbiAgY29uc3QgdG90YWxzID0gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaW5kZXgpID0+IHZhbHVlc1xuICAgIC5yZWR1Y2UoKHN1bSwgc2VyaWVzKSA9PiBzdW0gKyBNYXRoLmFicyhzZXJpZXNbaW5kZXhdID8/IDApLCAwKSk7XG5cbiAgcmV0dXJuIHZhbHVlcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiAoXG4gICAgdmFsdWUgPT09IG51bGwgfHwgIXRvdGFsc1tpbmRleF0gPyBudWxsIDogdmFsdWUgLyB0b3RhbHNbaW5kZXhdXG4gICkpKTtcbn1cblxuLy8gVGhlIHNoYXJlcyBhIDEwMCUgc3RhY2tlZCBjaGFydCBkcmF3cyBpbiBwbGFjZSBvZiBpdHMgdmFsdWVzLCBvciBudWxsIHdoZW5cbi8vIHRoZSBjaGFydCBpcyBub3Qgb25lLiBUaGUgcHJpbWFyeSBheGlzJ3MgYmFyIGFuZCBhcmVhIHNlcmllcyB0YWtlIHRoZW0sXG4vLyBlYWNoIHR5cGUncyBzZXJpZXMgc2hhcmluZyBhbW9uZyB0aGVtc2VsdmVzLCBhcyBlYWNoIHR5cGUgc3RhY2tzIGFwYXJ0LlxuLy8gTGluZXMgYW5kIHNlY29uZGFyeS1heGlzIHNlcmllcyBrZWVwIHRoZWlyIHZhbHVlcy4gQSBwaWUsIGEgd2F0ZXJmYWxsIGFuZCBhXG4vLyBjb2xvckJ5IGNoYXJ0IChvbmUgc2VyaWVzIHBlciBjYXRlZ29yeSwgZWFjaCBvZiB3aGljaCB3b3VsZCBiZSAxMDAlKSBhcmVcbi8vIG5ldmVyIDEwMCUgc3RhY2tlZCwgbm9yIGlzIGEgY2hhcnQgd2l0aCBubyBiYXIgb3IgYXJlYSBvbiBpdHMgcHJpbWFyeSBheGlzLlxuZXhwb3J0IGZ1bmN0aW9uIHBlcmNlbnRTdGFja2VkU2hhcmVzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIGNvbmZpZzogQ2hhcnRDb25maWcpOiBQZXJjZW50U2hhcmVzIHwgbnVsbCB7XG4gIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG5cbiAgaWYgKGNvbmZpZy5wZXJjZW50U3RhY2tlZCAhPT0gdHJ1ZVxuICAgIHx8IGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnIHx8IGNoYXJ0VHlwZSA9PT0gJ3dhdGVyZmFsbCdcbiAgICB8fCBpc0NvbG9yQnkoY29uZmlnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgdHlwZXMgPSBzZXJpZXNUeXBlcyhleHRyYWN0ZWQsIGNoYXJ0VHlwZSk7XG4gIGNvbnN0IGF4aXNJbmRleGVzID0gc2VyaWVzQXhpc0luZGV4ZXMoZXh0cmFjdGVkLCBjb25maWcpO1xuICBjb25zdCBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgPSBuZXcgTWFwKCk7XG5cbiAgZm9yIChjb25zdCB0eXBlIG9mIFsnYmFyJywgJ2FyZWEnXSBhcyBjb25zdCkge1xuICAgIGNvbnN0IGluZGV4ZXMgPSB0eXBlc1xuICAgICAgLm1hcCgoc2VyaWVzVHlwZSwgaW5kZXgpID0+IChzZXJpZXNUeXBlID09PSB0eXBlICYmIGF4aXNJbmRleGVzW2luZGV4XSA9PT0gMCA/IGluZGV4IDogLTEpKVxuICAgICAgLmZpbHRlcigoaW5kZXgpID0+IGluZGV4ID49IDApO1xuICAgIGNvbnN0IHR5cGVTaGFyZXMgPSBwZXJjZW50U2hhcmVzKGluZGV4ZXMubWFwKChpbmRleCkgPT4gZXh0cmFjdGVkLnNlcmllc1tpbmRleF0udmFsdWVzKSk7XG4gICAgaW5kZXhlcy5mb3JFYWNoKChzZXJpZXNJbmRleCwgcG9zaXRpb24pID0+IHNoYXJlcy5zZXQoc2VyaWVzSW5kZXgsIHR5cGVTaGFyZXNbcG9zaXRpb25dKSk7XG4gIH1cblxuICByZXR1cm4gc2hhcmVzLnNpemUgPyBzaGFyZXMgOiBudWxsO1xufVxuXG4vLyBXaGVyZSBhIDEwMCUgc3RhY2tlZCBjaGFydCdzIHZhbHVlIGF4aXMgc3RhcnRzOiBhdCAtMTAwJSB3aGVuIGFueSBzaGFyZSBpc1xuLy8gbmVnYXRpdmUsIGVsc2UgYXQgemVyby5cbmV4cG9ydCBmdW5jdGlvbiBwZXJjZW50QXhpc01pbihzaGFyZXM6IFBlcmNlbnRTaGFyZXMpOiBudW1iZXIge1xuICByZXR1cm4gWy4uLnNoYXJlcy52YWx1ZXMoKV0uc29tZSgoc2VyaWVzKSA9PiBzZXJpZXMuc29tZSgoc2hhcmUpID0+IChzaGFyZSA/PyAwKSA8IDApKSA/IC0xIDogMDtcbn1cblxuLy8gVGhlIG1lYXN1cmVzIGEgY2hhcnQgcGxvdHM6IGl0cyBjb25maWd1cmVkIG9uZXMsIGVsc2UgdGhlIHF1ZXJ5J3MgbGFzdFxuLy8gY29sdW1uLCB1bmZvcm1hdHRlZC5cbmZ1bmN0aW9uIGNoYXJ0TWVhc3VyZXMoY29uZmlnOiBDaGFydENvbmZpZywgZGF0YTogQ29tcG9uZW50RGF0YSk6IENoYXJ0TWVhc3VyZVtdIHtcbiAgcmV0dXJuIGNvbmZpZy5tZWFzdXJlcz8ubGVuZ3RoXG4gICAgPyBjb25maWcubWVhc3VyZXNcbiAgICA6IFt7IGNvbHVtbjogZGF0YS5jb2x1bW5zW2RhdGEuY29sdW1ucy5sZW5ndGggLSAxXSB9XTtcbn1cblxuLy8gVGhlIHR5cGUgZWFjaCBleHRyYWN0ZWQgc2VyaWVzIGlzIGRyYXduIGFzOiBpdHMgbWVhc3VyZSdzIG93biB0eXBlIHdoZW4gaXRcbi8vIG5hbWVzIG9uZSwgdGhlIGNoYXJ0J3MgY2hhcnRUeXBlIG90aGVyd2lzZS4gTW9yZSB0aGFuIG9uZSBkaXN0aW5jdCB0eXBlIGlzIGFcbi8vIGNvbWJvIGNoYXJ0LiBTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludCBleHBvcnQgc28gYm90aCBtZWRpYSBkcmF3IGVhY2ggc2VyaWVzXG4vLyB0aGUgc2FtZSB3YXkuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWVzVHlwZXMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcywgY2hhcnRUeXBlOiBBeGlzQ2hhcnRUeXBlKTogQXhpc0NoYXJ0VHlwZVtdIHtcbiAgcmV0dXJuIGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy50eXBlID8/IGNoYXJ0VHlwZSk7XG59XG5cbi8vIFRoZSB2YWx1ZSBheGlzIGVhY2ggZXh0cmFjdGVkIHNlcmllcyBpcyBwbG90dGVkIGFnYWluc3Q6IDEgd2hlbiBpdHMgbWVhc3VyZVxuLy8gaXMgc2Vjb25kYXJ5LCAwIG90aGVyd2lzZS4gQSBzZWNvbmQgYXhpcyBpcyBkcmF3biBvbmx5IG9uIGEgdmVydGljYWwgY2hhcnRcbi8vIHRoYXQga2VlcHMgYXQgbGVhc3Qgb25lIHNlcmllcyBvbiB0aGUgcHJpbWFyeSBheGlzLCBzbyBhIGNvbWJpbmF0aW9uIHRoZVxuLy8gc2VydmVyIHJlZnVzZXMgKGEgaG9yaXpvbnRhbCBjaGFydCwgZXZlcnkgbWVhc3VyZSBzZWNvbmRhcnksIHRoZSBvbmUgbWVhc3VyZVxuLy8gb2YgYSBzcGxpdEJ5IG9yIGNvbG9yQnkgY2hhcnQpIHBsb3RzIGV2ZXJ5dGhpbmcgb24gdGhlIHByaW1hcnkgYXhpcy4gU2hhcmVkXG4vLyB3aXRoIHRoZSBQb3dlclBvaW50IGV4cG9ydCBzbyBib3RoIG1lZGlhIHB1dCBlYWNoIHNlcmllcyBvbiB0aGUgc2FtZSBheGlzLlxuZXhwb3J0IGZ1bmN0aW9uIHNlcmllc0F4aXNJbmRleGVzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIGNvbmZpZzogQ2hhcnRDb25maWcpOiBWYWx1ZUF4aXNJbmRleFtdIHtcbiAgY29uc3Qgc2Vjb25kYXJ5ID0gZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gISFzZXJpZXMubWVhc3VyZS5zZWNvbmRhcnkpO1xuICBjb25zdCB0d29BeGVzID0gY29uZmlnLm9yaWVudGF0aW9uICE9PSAnaG9yaXpvbnRhbCcgJiYgc2Vjb25kYXJ5LmluY2x1ZGVzKHRydWUpICYmIHNlY29uZGFyeS5pbmNsdWRlcyhmYWxzZSk7XG5cbiAgcmV0dXJuIHNlY29uZGFyeS5tYXAoKGlzU2Vjb25kYXJ5KSA9PiAodHdvQXhlcyAmJiBpc1NlY29uZGFyeSA/IDEgOiAwKSk7XG59XG5cbi8vIE9uZSBiYXIgb2YgYSB3YXRlcmZhbGwuIGBzdGFydGAgaXMgdGhlIHJ1bm5pbmcgdG90YWwgYmVmb3JlIGl0LCB3aGVyZSB0aGUgYmFyXG4vLyBzdGFydHMsIGFuZCBgY2hhbmdlYCBpdHMgc2lnbmVkIGhlaWdodCwgc28gaXQgZW5kcyBhdCBzdGFydCArIGNoYW5nZS4gVGhlXG4vLyBjbG9zaW5nIHRvdGFsIHN0YXJ0cyBhdCB6ZXJvIGFuZCBpdHMgY2hhbmdlIGlzIHRoZSB3aG9sZSBydW5uaW5nIHRvdGFsLlxuZXhwb3J0IGludGVyZmFjZSBXYXRlcmZhbGxTdGVwIHtcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgc3RhcnQ6IG51bWJlcjtcbiAgY2hhbmdlOiBudW1iZXIgfCBudWxsO1xuICBraW5kOiBXYXRlcmZhbGxTdGVwS2luZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRXYXRlcmZhbGwge1xuICBuYW1lOiBzdHJpbmc7XG4gIHN0ZXBzOiBXYXRlcmZhbGxTdGVwW107XG59XG5cbmV4cG9ydCBjb25zdCBXQVRFUkZBTExfVE9UQUxfTEFCRUwgPSAnVG90YWwnO1xuXG4vLyBBIHdhdGVyZmFsbCdzIGJhcnMgZnJvbSBpdHMgb25lIG1lYXN1cmU6IGVhY2ggY2F0ZWdvcnkncyB2YWx1ZSBpcyBob3cgZmFyIHRoZVxuLy8gcnVubmluZyB0b3RhbCBtb3ZlcyB0aGVyZSwgYW5kIGEgbGFzdCBUb3RhbCBiYXIgc2hvd3Mgd2hlcmUgaXQgZW5kZWQuIEFcbi8vIGNhdGVnb3J5IHdpdGggbm8gdmFsdWUgbW92ZXMgbm90aGluZyBhbmQgZHJhd3Mgbm8gYmFyLiBTaGFyZWQgd2l0aCB0aGVcbi8vIFBvd2VyUG9pbnQgZXhwb3J0IHNvIGJvdGggbWVkaWEgZHJhdyB0aGUgc2FtZSBzdGVwcy5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0V2F0ZXJmYWxsKGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBkYXRhOiBDb21wb25lbnREYXRhKTogRXh0cmFjdGVkV2F0ZXJmYWxsIHtcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IHZhbHVlcyA9IGV4dHJhY3RlZC5zZXJpZXNbMF0/LnZhbHVlcyA/PyBbXTtcbiAgY29uc3Qgc3RlcHM6IFdhdGVyZmFsbFN0ZXBbXSA9IFtdO1xuICBsZXQgdG90YWwgPSAwO1xuXG4gIGV4dHJhY3RlZC5jYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGNoYW5nZSA9IHZhbHVlc1tpbmRleF0gPz8gbnVsbDtcbiAgICBzdGVwcy5wdXNoKHsgY2F0ZWdvcnksIHN0YXJ0OiB0b3RhbCwgY2hhbmdlLCBraW5kOiAoY2hhbmdlID8/IDApIDwgMCA/ICdmYWxsJyA6ICdyaXNlJyB9KTtcbiAgICB0b3RhbCArPSBjaGFuZ2UgPz8gMDtcbiAgfSk7XG5cbiAgc3RlcHMucHVzaCh7IGNhdGVnb3J5OiBXQVRFUkZBTExfVE9UQUxfTEFCRUwsIHN0YXJ0OiAwLCBjaGFuZ2U6IHRvdGFsLCBraW5kOiAndG90YWwnIH0pO1xuXG4gIHJldHVybiB7IG5hbWU6IGV4dHJhY3RlZC5zZXJpZXNbMF0/Lm5hbWUgPz8gJycsIHN0ZXBzIH07XG59XG5cbi8vIFRoZSBvbmUgcHVyZSBtYXBwaW5nIGZyb20gb3VyIHN0YW5kYXJkIGNhbWVsQ2FzZSBjaGFydCBjb25maWcgKyB0aGUgZGF0YVxuLy8gZW5kcG9pbnQncyByb3dzIHRvIGFuIEVDaGFydHMgb3B0aW9uLiBFdmVyeXRoaW5nIHZpc3VhbCB0aGF0IGlzbid0IGluIHRoZVxuLy8gcmVnaXN0ZXJlZCAncmVwb3J0JyB0aGVtZSBpcyBkZWNpZGVkIGhlcmUsIHNvIHJlcG9ydCBzdGFuZGFyZHMgaGF2ZSBleGFjdGx5XG4vLyB0d28gaG9tZXMuXG4vL1xuLy8gRXZlcnkgbnVtYmVyIGFuZCBwZXJpb2QgdGhlIGNoYXJ0IHdyaXRlcyAodmFsdWUtYXhpcyB0aWNrcywgdG9vbHRpcCB2YWx1ZXMsXG4vLyBwZXJpb2QgbGFiZWxzKSBpcyBpbiB0aGUgY29udGV4dCdzIGxvY2FsZSwgbmV2ZXIgdGhlIGJyb3dzZXIncy4gQSBtZWFzdXJlXG4vLyB3aXRoIG51bWJlci1mb3JtYXQga2V5cyBmb3JtYXRzIGl0cyB0b29sdGlwcywgYW5kIHRoZSB2YWx1ZSBheGlzIHdoZW4gZXZlcnlcbi8vIG1lYXN1cmUgb24gaXQgYWdyZWVzIChheGlzTnVtYmVyRm9ybWF0KTsgd2l0aG91dCB0aGVtIHRoZSBheGlzIGFuZCB0b29sdGlwc1xuLy8ga2VlcCB0aGUgcGxhaW4gbG9jYWxlLWdyb3VwZWQgbnVtYmVyLlxuLy9cbi8vIGxlZ2VuZFNlbGVjdGVkIGlzIHRoZSB2aWV3ZXIncyBsZWdlbmQ6IHdoaWNoIGVudHJpZXMgYXJlIG9uLCBieSBzZXJpZXNcbi8vIG5hbWUgKGxlZ2VuZFdpdGhTZWxlY3RlZCkuIFdpdGhvdXQgaXQgdGhlIG9wdGlvbiBpcyBhcyBpdCBhbHdheXMgd2FzLlxuLy9cbi8vIGFjdGlvbnMgYXJlIHdoYXQgYSBjbGljayBvbiB0aGUgY2hhcnQncyBtYXJrcyBkb2VzIChCMTAuMiksIGZvciB0aGVcbi8vIHNjcmVlbiBvbmx5OiB0aGUgc2VyaWVzIGEgY2xpY2sgYWN0cyBvbiBzaG93IGEgaGFuZCBhbmQgYW5zd2VyIGEgY2xpY2sgb25cbi8vIHRoZSBsaW5lIGl0c2VsZiwgYW5kIHRoZSB0b29sdGlwIGVuZHMgd2l0aCBhIG11dGVkIGxpbmUgbmFtaW5nIHRoZSBhY3Rpb25zXG4vLyAod2l0aENsaWNrQWN0aW9ucykuIFdpdGhvdXQgYWN0aW9ucyB0aGUgcG9pbnRlciBzdGF5cyBhbiBhcnJvdy4gQW4gZXhwb3J0XG4vLyBwYXNzZXMgbm9uZS5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENoYXJ0T3B0aW9uKFxuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgbGVnZW5kU2VsZWN0ZWQ6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PiA9IHt9LFxuICBhY3Rpb25zOiByZWFkb25seSBSZXBvcnRNYXJrQWN0aW9uW10gPSBbXSxcbik6IEVDaGFydHNPcHRpb24ge1xuICByZXR1cm4gd2l0aENsaWNrQWN0aW9ucyhsZWdlbmRXaXRoU2VsZWN0ZWQoY2hhcnRPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjb250ZXh0KSwgbGVnZW5kU2VsZWN0ZWQpLCBhY3Rpb25zKTtcbn1cblxuLy8gVGhlIHRvb2x0aXAncyBsYXN0IGxpbmUgb24gYSBjaGFydCB3aG9zZSBtYXJrcyBhY3Qgb24gYSBjbGljazogdGhlIG9uZVxuLy8gYWN0aW9uICgnQ2xpY2sgdG8gZHJpbGwgZG93bicsICdDbGljayB0byBmaWx0ZXIgb3RoZXIgdGlsZXMnLCAnQ2xpY2sgdG9cbi8vIHNob3cgcm93cycpLCBvciB0aGUgc2hvcnQgbmFtZXMgb2Ygc2V2ZXJhbCAoJ0NsaWNrIHRvIGRyaWxsIGRvd24gb3Jcbi8vIGZpbHRlcicsICdDbGljayB0byBkcmlsbCBkb3duLCBmaWx0ZXIgb3Igc2hvdyByb3dzJykuIG51bGwgd2l0aG91dCBvbmUuXG5leHBvcnQgZnVuY3Rpb24gbWFya0FjdGlvbkhpbnQoYWN0aW9uczogcmVhZG9ubHkgUmVwb3J0TWFya0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IG9mZmVyZWQgPSBNQVJLX0FDVElPTl9PUkRFUi5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9ucy5pbmNsdWRlcyhhY3Rpb24pKTtcblxuICBpZiAob2ZmZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYENsaWNrIHRvICR7TUFSS19BQ1RJT05fSElOVFNbb2ZmZXJlZFswXV19YDtcbiAgfVxuXG4gIGNvbnN0IG5hbWVzID0gb2ZmZXJlZC5tYXAoKGFjdGlvbikgPT4gTUFSS19BQ1RJT05fU0hPUlRfSElOVFNbYWN0aW9uXSk7XG5cbiAgcmV0dXJuIG5hbWVzLmxlbmd0aFxuICAgID8gYENsaWNrIHRvICR7bmFtZXMuc2xpY2UoMCwgLTEpLmpvaW4oJywgJyl9IG9yICR7bmFtZXNbbmFtZXMubGVuZ3RoIC0gMV19YFxuICAgIDogbnVsbDtcbn1cblxuLy8gVGVsbHMgdGhlIHZpZXdlciB3aGF0IGEgY2xpY2sgb24gdGhlIGNoYXJ0IGRvZXMuIFdpdGggYWN0aW9ucywgZXZlcnlcbi8vIHNlcmllcyBhIGNsaWNrIHJlYWNoZXMgKGFsbCBidXQgdGhlIHNpbGVudCByZWZlcmVuY2UgY2FycmllcnMgYW5kIGFcbi8vIHdhdGVyZmFsbCdzIGJhc2UpIHNob3dzIGEgaGFuZCwgYSBsaW5lIG9yIGFyZWEgc2VyaWVzIGFuc3dlcnMgYSBjbGljayBvblxuLy8gaXRzIGxpbmUgdG9vICh0cmlnZ2VyTGluZUV2ZW50KSwgbm90IG9ubHkgb24gaXRzIHBvaW50cywgYW5kIHRoZSB0b29sdGlwXG4vLyBnYWlucyB0aGUgaGludCBhcyBpdHMgbGFzdCBsaW5lLCBtdXRlZC4gV2l0aG91dCBhY3Rpb25zIHRob3NlIHNlcmllcyBrZWVwXG4vLyB0aGUgYXJyb3cgYW5kIHRoZSB0b29sdGlwIGlzIHVuY2hhbmdlZC5cbmZ1bmN0aW9uIHdpdGhDbGlja0FjdGlvbnMob3B0aW9uOiBFQ2hhcnRzT3B0aW9uLCBhY3Rpb25zOiByZWFkb25seSBSZXBvcnRNYXJrQWN0aW9uW10pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgaGludCA9IG1hcmtBY3Rpb25IaW50KGFjdGlvbnMpO1xuICBjb25zdCBzZXJpZXMgPSAoKG9wdGlvbi5zZXJpZXMgPz8gW10pIGFzIFNlcmllc09wdGlvbltdKS5tYXAoKGl0ZW0pID0+IHtcbiAgICBpZiAoKGl0ZW0gYXMgeyBzaWxlbnQ/OiBib29sZWFuIH0pLnNpbGVudCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBjdXJzb3I6IGhpbnQgPyAncG9pbnRlcicgOiAnZGVmYXVsdCcsXG4gICAgICAuLi4oaGludCAmJiBpdGVtLnR5cGUgPT09ICdsaW5lJyA/IHsgdHJpZ2dlckxpbmVFdmVudDogdHJ1ZSB9IDoge30pLFxuICAgIH0gYXMgU2VyaWVzT3B0aW9uO1xuICB9KTtcblxuICByZXR1cm4gaGludFxuICAgID8geyAuLi5vcHRpb24sIHNlcmllcywgdG9vbHRpcDogaGludGVkVG9vbHRpcChvcHRpb24udG9vbHRpcCBhcyBUb29sdGlwQ29tcG9uZW50T3B0aW9uIHwgdW5kZWZpbmVkLCBzZXJpZXMsIGhpbnQpIH1cbiAgICA6IHsgLi4ub3B0aW9uLCBzZXJpZXMgfTtcbn1cblxuLy8gVGhlIGNoYXJ0J3MgdG9vbHRpcCB3aXRoIHRoZSBoaW50IGFzIGl0cyBtdXRlZCBsYXN0IGxpbmUuIEEgdG9vbHRpcCB0aGF0XG4vLyB3cml0ZXMgaXRzIG93biB0ZXh0IGtlZXBzIGl0OyBvbmUgRUNoYXJ0cyB3cml0ZXMgYnkgaXRzZWxmIGlzIHdyaXR0ZW4gaGVyZVxuLy8gYXMgdGhlIG90aGVyIHRvb2x0aXBzIGFyZTogdGhlIGNhdGVnb3J5LCB0aGVuIGVhY2ggc2VyaWVzJyB2YWx1ZSBpbiBpdHMgb3duXG4vLyB0b29sdGlwIGZvcm1hdCAoYW4gaXRlbSB0b29sdGlwIG5hbWVzIHRoZSBob3ZlcmVkIGl0ZW0gaW5zdGVhZCkuIEFuIGl0ZW1cbi8vIHRoYXQga2VlcHMgdGhlIGFycm93IChhIHdhdGVyZmFsbCdzIFRvdGFsKSBnZXRzIG5vIGhpbnQuXG5mdW5jdGlvbiBoaW50ZWRUb29sdGlwKFxuICB0b29sdGlwOiBUb29sdGlwQ29tcG9uZW50T3B0aW9uIHwgdW5kZWZpbmVkLFxuICBzZXJpZXM6IFNlcmllc09wdGlvbltdLFxuICBoaW50OiBzdHJpbmcsXG4pOiBUb29sdGlwQ29tcG9uZW50T3B0aW9uIHtcbiAgY29uc3QgbGluZSA9IGA8c3BhbiBzdHlsZT1cIm9wYWNpdHk6IDAuN1wiPiR7ZXNjYXBlSHRtbChoaW50KX08L3NwYW4+YDtcbiAgY29uc3Qgb3duID0gdHlwZW9mIHRvb2x0aXA/LmZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJyA/IHRvb2x0aXAuZm9ybWF0dGVyIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIC4uLnRvb2x0aXAsXG4gICAgZm9ybWF0dGVyOiAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBvd24gPyBTdHJpbmcob3duKHBhcmFtcywgJycsICgpID0+IHVuZGVmaW5lZCkgPz8gJycpIDogcGxhaW5Ub29sdGlwKHBhcmFtcywgc2VyaWVzKTtcblxuICAgICAgaWYgKCFhbnN3ZXJzQ2xpY2socGFyYW1zKSkge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRleHQgPyBgJHt0ZXh0fTxici8+JHtsaW5lfWAgOiBsaW5lO1xuICAgIH0sXG4gIH07XG59XG5cbi8vIFdoZXRoZXIgdGhlIGhvdmVyZWQgbWFyayBhY3RzIG9uIGEgY2xpY2s6IGV2ZXJ5IG1hcmsgb2YgYW4gYXhpcyB0b29sdGlwLFxuLy8gYW5kIGFuIGl0ZW0gdW5sZXNzIGl0cyBkYXRhIGl0ZW0ga2VlcHMgdGhlIGFycm93LlxuZnVuY3Rpb24gYW5zd2Vyc0NsaWNrKHBhcmFtczogVG9vbHRpcENvbXBvbmVudEZvcm1hdHRlckNhbGxiYWNrUGFyYW1zKTogYm9vbGVhbiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtcykgfHwgKHBhcmFtcy5kYXRhIGFzIHsgY3Vyc29yPzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZCk/LmN1cnNvciAhPT0gJ2RlZmF1bHQnO1xufVxuXG4vLyBUaGUgdG9vbHRpcCBFQ2hhcnRzIHdvdWxkIHdyaXRlLCBpbiB0aGlzIGZpbGUncyBmb3JtLiBBbiBheGlzIHRvb2x0aXA6IHRoZVxuLy8gY2F0ZWdvcnkgKHRoZSBheGlzIHBvaW50ZXIncyBsYWJlbCwgc28gYSBwZXJpb2QgcmVhZHMgYXMgb24gdGhlIGF4aXMpLFxuLy8gdGhlbiAn4pePIFNlcmllczogdmFsdWUnIHBlciBzZXJpZXMgc2hvd24uIEFuIGl0ZW0gdG9vbHRpcDogJ+KXjyBJdGVtOiB2YWx1ZScuXG4vLyBOYW1lcyBjb21lIGZyb20gdGhlIGRhdGEgYW5kIHRoZSBjb25maWcsIGFuZCBFQ2hhcnRzIHNldHMgdGhlIHRvb2x0aXAgYXNcbi8vIEhUTUwsIHNvIGJvdGggYXJlIGVzY2FwZWQuXG5mdW5jdGlvbiBwbGFpblRvb2x0aXAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMsIHNlcmllczogU2VyaWVzT3B0aW9uW10pOiBzdHJpbmcge1xuICBjb25zdCBheGlzID0gQXJyYXkuaXNBcnJheShwYXJhbXMpO1xuICBjb25zdCBpdGVtcyA9IGF4aXMgPyBwYXJhbXMgOiBbcGFyYW1zXTtcbiAgY29uc3QgbGluZXMgPSBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICBjb25zdCB3cml0ZSA9IChzZXJpZXNbaXRlbS5zZXJpZXNJbmRleCA/PyAtMV0/LnRvb2x0aXAgYXMgU2VyaWVzVG9vbHRpcCB8IHVuZGVmaW5lZCk/LnZhbHVlRm9ybWF0dGVyO1xuICAgIGNvbnN0IG1hcmtlciA9IHR5cGVvZiBpdGVtLm1hcmtlciA9PT0gJ3N0cmluZycgPyBpdGVtLm1hcmtlciA6ICcnO1xuICAgIGNvbnN0IG5hbWUgPSBTdHJpbmcoKGF4aXMgPyBpdGVtLnNlcmllc05hbWUgOiBpdGVtLm5hbWUpID8/ICcnKTtcbiAgICBjb25zdCB2YWx1ZSA9IHdyaXRlID8gd3JpdGUoaXRlbS52YWx1ZSkgOiBTdHJpbmcoaXRlbS52YWx1ZSA/PyAnJyk7XG5cbiAgICByZXR1cm4gYCR7bWFya2VyfSAke2VzY2FwZUh0bWwobmFtZSl9OiAke2VzY2FwZUh0bWwodmFsdWUpfWA7XG4gIH0pO1xuICBjb25zdCBmaXJzdCA9IGl0ZW1zWzBdIGFzIHsgYXhpc1ZhbHVlTGFiZWw/OiB1bmtub3duOyBuYW1lPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICBjb25zdCBoZWFkaW5nID0gYXhpcyA/IFN0cmluZyhmaXJzdD8uYXhpc1ZhbHVlTGFiZWwgPz8gZmlyc3Q/Lm5hbWUgPz8gJycpIDogJyc7XG5cbiAgcmV0dXJuIFsuLi4oaGVhZGluZyA/IFtlc2NhcGVIdG1sKGhlYWRpbmcpXSA6IFtdKSwgLi4ubGluZXNdLmpvaW4oJzxici8+Jyk7XG59XG5cbi8vIFRoZSBvcHRpb24sIGJ5IGNoYXJ0IHR5cGUuXG5mdW5jdGlvbiBjaGFydE9wdGlvbihcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICBpZiAoY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcpIHtcbiAgICByZXR1cm4gYnVpbGRQaWVPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUgPT09ICdkb251dCcsIGNvbnRleHQpO1xuICB9XG5cbiAgaWYgKGNoYXJ0VHlwZSA9PT0gJ3dhdGVyZmFsbCcpIHtcbiAgICByZXR1cm4gYnVpbGRXYXRlcmZhbGxPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEF4aXNPcHRpb24oY29tcG9uZW50LCBkYXRhLCBjaGFydFR5cGUsIGNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBidWlsZEF4aXNPcHRpb24oXG4gIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBjaGFydFR5cGU6IEF4aXNDaGFydFR5cGUsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IGhvcml6b250YWwgPSBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgY29uc3QgY29sb3JCeSA9IGlzQ29sb3JCeShjb25maWcpO1xuICBjb25zdCB0eXBlcyA9IHNlcmllc1R5cGVzKGV4dHJhY3RlZCwgY2hhcnRUeXBlKTtcbiAgY29uc3QgY29tYm8gPSBuZXcgU2V0KHR5cGVzKS5zaXplID4gMTtcblxuICAvLyBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5OyBvdmVybGFwcGluZyB0aGVtIChiYXJHYXAgLTEwMCUpIG1ha2VzXG4gIC8vIGVhY2ggcmVuZGVyIGF0IHRoZSBmdWxsIGNhdGVnb3J5LWJhbmQgd2lkdGgg4oCUIG9uZSBmdWxsLXdpZHRoLCBkaXN0aW5jdGx5XG4gIC8vIGNvbG9yZWQgYmFyIHBlciBjYXRlZ29yeSDigJQgaW5zdGVhZCBvZiBzaWRlLWJ5LXNpZGUgc2xpdmVycy4gVGhlIGxheW91dCBwcm9wc1xuICAvLyBhcmUgcmVhZCBmcm9tIHRoZSBmaXJzdCBzZXJpZXMgb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLlxuICAvL1xuICAvLyBTdGFja2luZyBzdW1zIGV2ZXJ5IHNlcmllcyB0aGF0IHNoYXJlcyBhIHN0YWNrIG5hbWUsIHdoYXRldmVyIGl0cyB0eXBlLiBJblxuICAvLyBhIGNvbWJvIGVhY2ggdHlwZSBzdGFja3Mgb25seSB3aXRoIGl0cyBvd24ga2luZCwgc28gYSBsaW5lIG9mIGEgcmF0ZSBuZXZlclxuICAvLyBzaXRzIG9uIHRvcCBvZiB0aGUgYmFycycgdG90YWwsIGFuZCBvbiBhIHR3by1heGlzIGNoYXJ0IG9ubHkgd2l0aCB0aGVcbiAgLy8gc2VyaWVzIG9uIGl0cyBvd24gYXhpcy5cbiAgLy9cbiAgLy8gQSAxMDAlIHN0YWNrZWQgY2hhcnQgKHBlcmNlbnRTdGFja2VkU2hhcmVzKSBwbG90cyBpdHMgcHJpbWFyeSBiYXJzIGFuZFxuICAvLyBhcmVhcyBhcyBzaGFyZXMsIGVhY2ggdHlwZSBpbiBpdHMgb3duIHN0YWNrLCBhbmQgbGVhdmVzIGV2ZXJ5IG90aGVyIHNlcmllc1xuICAvLyB1bnN0YWNrZWQgb24gaXRzIG93biB2YWx1ZXMuXG4gIC8vXG4gIC8vIFdoYXQgdGhlIHNlcnZlciBzYXlzIG9mIHRoZSBudW1iZXJzIChjaGFydEFubm90YXRpb25zKSBtYXJrcyB0aGVtOiBhXG4gIC8vIHByaW9yIHNlcmllcyBkYXNoZWQgaW4gaXRzIGN1cnJlbnQgc2VyaWVzJyBjb2xvciwgdGhlIHBlcmlvZCBub3Qgb3ZlciB5ZXRcbiAgLy8gaGF0Y2hlZCBvciBkYXNoZWQsIHJhbmtzIG9uIGFuIGludmVydGVkIGF4aXMsIGZyYWN0aW9ucyBvbiBhIHBlcmNlbnQgYXhpcyxcbiAgLy8gYW5kIHRoZSB0b29sdGlwIG5hbWluZyBlYWNoIHByaW9yJ3MgZGF5cyBhbmQgZWFjaCB3aW5kb3cuIERhdGEgd2l0aG91dFxuICAvLyB0aG9zZSBrZXlzIGRyYXdzIGV4YWN0bHkgYXMgYmVmb3JlLlxuICBjb25zdCBheGlzSW5kZXhlcyA9IHNlcmllc0F4aXNJbmRleGVzKGV4dHJhY3RlZCwgY29uZmlnKTtcbiAgY29uc3QgdHdvQXhlcyA9IGF4aXNJbmRleGVzLmluY2x1ZGVzKDEpO1xuICBjb25zdCBzaGFyZXMgPSBwZXJjZW50U3RhY2tlZFNoYXJlcyhleHRyYWN0ZWQsIGNvbmZpZyk7XG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBjaGFydFJlZmVyZW5jZXMoY29uZmlnLCB0d29BeGVzKTtcbiAgY29uc3QgYW5ub3RhdGlvbnMgPSBjaGFydEFubm90YXRpb25zKGNvbmZpZywgZGF0YSwgZXh0cmFjdGVkLCBjb2xvckJ5KTtcbiAgY29uc3QgYXhpc0Zvcm1hdHMgPSB2YWx1ZUF4aXNGb3JtYXRzKFxuICAgIGNvbmZpZyxcbiAgICBhbm5vdGF0aW9ucyA/IGFubm90YXRlZEF4aXNTZXJpZXMoZXh0cmFjdGVkLCBhbm5vdGF0aW9ucykgOiBleHRyYWN0ZWQsXG4gICAgYXhpc0luZGV4ZXMsXG4gICAgYW5ub3RhdGlvbnMgJiYgIXNoYXJlcyA/IGFubm90YXRlZEF4aXNDb250ZXh0cyhhbm5vdGF0aW9ucywgYXhpc0luZGV4ZXMsIGNvbnRleHQpIDogW2NvbnRleHQsIGNvbnRleHRdLFxuICAgICEhc2hhcmVzLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIGNvbnN0IHJhbmtBeGVzID0gYW5ub3RhdGlvbnMgJiYgIXNoYXJlcyA/IHJhbmtBeGlzRmxhZ3MoYW5ub3RhdGlvbnMub3V0cHV0cywgYXhpc0luZGV4ZXMpIDogW2ZhbHNlLCBmYWxzZV07XG4gIC8vIEEgc2VyaWVzJyBzdGF0aXN0aWMgbGluZSBpcyB0YWtlbiBvdmVyIHRoZSBwb2ludHMgaXQgcGxvdHMuIE9uIGEgY29sb3JCeVxuICAvLyBjaGFydCBlYWNoIHNlcmllcyBob2xkcyBvbmUgYmFyLCBzbyB0aGUgb25lIGxpbmUgaXMgdGFrZW4gb3ZlciB0aGUgYmFyc1xuICAvLyB0b2dldGhlciBhbmQgaGFuZ3Mgb2ZmIHRoZSBmaXJzdCBzZXJpZXMgKGNvbG9yQnlTdGF0TGluZSkuXG4gIGNvbnN0IHN0YXRMaW5lcyA9IGRyYXdzU3RhdExpbmVzKGNvbmZpZykgJiYgIWNvbG9yQnk7XG4gIGNvbnN0IHNlcmllczogU2VyaWVzT3B0aW9uW10gPSBleHRyYWN0ZWQuc2VyaWVzLm1hcCgoZXh0cmFjdGVkU2VyaWVzLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHNlcmllc1NoYXJlcyA9IHNoYXJlcz8uZ2V0KGluZGV4KTtcbiAgICBsZXQgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoc2VyaWVzU2hhcmVzKSB7XG4gICAgICBzdGFjayA9IHN0YWNrS2V5KHR5cGVzW2luZGV4XSwgY29tYm8sIDApO1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLnN0YWNrZWQgJiYgIXNoYXJlcykge1xuICAgICAgc3RhY2sgPSBzdGFja0tleSh0eXBlc1tpbmRleF0sIGNvbWJvLCB0d29BeGVzID8gYXhpc0luZGV4ZXNbaW5kZXhdIDogdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICAvLyBBbiBvdXRwdXQgc2VyaWVzIChhIGNvbXBhcmVkLCB3aW5kb3dlZCwgcmFua2VkIG9yIHNoYXJlZCB2YWx1ZSkgd3JpdGVzXG4gICAgLy8gaXRzIHRvb2x0aXAsIGRhdGEgbGFiZWxzIGFuZCBzdGF0aXN0aWMgbGluZSBieSB3aGF0IGl0IGhvbGRzLlxuICAgIGNvbnN0IHdyaXRlID0gYW5ub3RhdGlvbnMgJiYgIXNlcmllc1NoYXJlcyAmJiBhbm5vdGF0aW9ucy5vdXRwdXRzW2luZGV4XVxuICAgICAgPyBvdXRwdXRXcml0ZXIoYW5ub3RhdGlvbnMsIGluZGV4LCBleHRyYWN0ZWRTZXJpZXMubWVhc3VyZSwgY29udGV4dClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBzdGF0ID0gc3RhdExpbmVzID8gbWVhc3VyZU1hcmtTdGF0KGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtYXJrTGluZSA9IHN0YXQgJiYgc3RhdE1hcmtMaW5lKFxuICAgICAgc2VyaWVzU2hhcmVzID8/IGV4dHJhY3RlZFNlcmllcy52YWx1ZXMsXG4gICAgICBzdGF0LFxuICAgICAgc2VyaWVzU2hhcmVzID8gc2hhcmVXcml0ZXIoY29udGV4dCkgOiB3cml0ZSA/PyBtZWFzdXJlV3JpdGVyKGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlLCBjb250ZXh0KSxcbiAgICApO1xuICAgIGNvbnN0IG9wdGlvbiA9IGJ1aWxkU2VyaWVzKFxuICAgICAgZXh0cmFjdGVkU2VyaWVzLFxuICAgICAgc2VyaWVzU2hhcmVzID8gc2hhcmVEYXRhKGV4dHJhY3RlZFNlcmllcy52YWx1ZXMsIHNlcmllc1NoYXJlcykgOiBleHRyYWN0ZWRTZXJpZXMudmFsdWVzLFxuICAgICAge1xuICAgICAgICB0eXBlOiB0eXBlc1tpbmRleF0sXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBvdmVybGFwOiBjb2xvckJ5ICYmIGluZGV4ID09PSAwLFxuICAgICAgICBjb21ibyxcbiAgICAgICAgdG9vbHRpcDogd3JpdGUgPyB7IHZhbHVlRm9ybWF0dGVyOiB3cml0ZSB9IDogc2VyaWVzVG9vbHRpcChleHRyYWN0ZWRTZXJpZXMubWVhc3VyZSwgY29udGV4dCksXG4gICAgICAgIGF4aXNJbmRleDogdHdvQXhlcyA/IGF4aXNJbmRleGVzW2luZGV4XSA6IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gQSBjb2xvckJ5IGNoYXJ0J3MgYmFycyB0YWtlIHRoZSBwYWxldHRlIGJ5IGNhdGVnb3J5LCBhcyBpblxuICAgICAgICAvLyBQb3dlclBvaW50LCB3aGF0ZXZlciBjb2xvciB0aGUgbWVhc3VyZSBuYW1lcy5cbiAgICAgICAgY29sb3I6IGNvbG9yQnkgPyB1bmRlZmluZWQgOiBhbm5vdGF0aW9ucz8uY29sb3JzPy5baW5kZXhdID8/IHNlcmllc0NvbG9yKGV4dHJhY3RlZFNlcmllcyksXG4gICAgICAgIGxhYmVsczogZGF0YUxhYmVsT3B0aW9uKGNvbmZpZy5kYXRhTGFiZWxzLCB3cml0ZVxuICAgICAgICAgID8gb3V0cHV0TGFiZWxGb3JtYXR0ZXIod3JpdGUpXG4gICAgICAgICAgOiBkYXRhTGFiZWxGb3JtYXR0ZXIoXG4gICAgICAgICAgICBleHRyYWN0ZWRTZXJpZXMubWVhc3VyZSxcbiAgICAgICAgICAgIGF4aXNGb3JtYXRzW2F4aXNJbmRleGVzW2luZGV4XV0gPz8gbnVsbCxcbiAgICAgICAgICAgICEhc2VyaWVzU2hhcmVzLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICApKSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBtYXJrZWQgPSBhbm5vdGF0aW9ucyA/IG1hcmtTZXJpZXMob3B0aW9uLCBhbm5vdGF0aW9ucywgaW5kZXgsIGV4dHJhY3RlZFNlcmllcy5tZWFzdXJlKSA6IG9wdGlvbjtcblxuICAgIHJldHVybiBtYXJrTGluZSA/IHsgLi4ubWFya2VkLCBtYXJrTGluZSB9IGFzIFNlcmllc09wdGlvbiA6IG1hcmtlZDtcbiAgfSk7XG5cbiAgaWYgKGNvbG9yQnkgJiYgZHJhd3NTdGF0TGluZXMoY29uZmlnKSAmJiBzZXJpZXMubGVuZ3RoKSB7XG4gICAgc2VyaWVzWzBdID0gY29sb3JCeVN0YXRMaW5lKHNlcmllc1swXSwgZXh0cmFjdGVkLCBjb250ZXh0LCBhbm5vdGF0aW9ucz8ub3V0cHV0c1swXVxuICAgICAgPyBvdXRwdXRXcml0ZXIoYW5ub3RhdGlvbnMsIDAsIGV4dHJhY3RlZC5zZXJpZXNbMF0ubWVhc3VyZSwgY29udGV4dClcbiAgICAgIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8vIERyYXduIGFmdGVyIHRoZSBtZWFzdXJlIHNlcmllcywgc28gYSB0b29sdGlwIHJlYWRzIGEgc2VyaWVzIGJ5IGl0cyBpbmRleC5cbiAgY29uc3Qgc2VnbWVudHMgPSBhbm5vdGF0aW9ucyA/IHBhcnRpYWxTZWdtZW50cyhzZXJpZXMsIGFubm90YXRpb25zKSA6IFtdO1xuICBjb25zdCBwZXJjZW50TWluID0gc2hhcmVzID8gcGVyY2VudEF4aXNNaW4oc2hhcmVzKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY2F0ZWdvcnlBeGlzID0gY2F0ZWdvcnlBeGlzT3B0aW9uKGNvbmZpZywgZGF0YSwgZXh0cmFjdGVkLmNhdGVnb3JpZXMsIGhvcml6b250YWwsIGNvbnRleHQubG9jYWxlKTtcbiAgLy8gQW4gYXhpcyBvZiByYXRlIGNoYW5nZXMgYWxvbmUgcmVhZHMgaW4gcGVyY2VudGFnZSBwb2ludHMsIGFzIGl0cyB2YWx1ZXMgZG8uXG4gIGNvbnN0IGF4aXNMYWJlbHMgPSAoWzAsIDFdIGFzIGNvbnN0KS5tYXAoKGF4aXNJbmRleCkgPT4gKGFubm90YXRpb25zICYmICFzaGFyZXNcbiAgICA/IHBvaW50c0F4aXNMYWJlbChhbm5vdGF0aW9ucywgZXh0cmFjdGVkLCBheGlzSW5kZXhlcywgYXhpc0luZGV4LCBjb250ZXh0KVxuICAgIDogbnVsbCkgPz8gdmFsdWVBeGlzTGFiZWwoYXhpc0Zvcm1hdHNbYXhpc0luZGV4XSA/PyBudWxsLCBjb250ZXh0KSk7XG4gIGNvbnN0IHZhbHVlQXhpcyA9IHR3b0F4ZXNcbiAgICA/IHR3b1ZhbHVlQXhlc09wdGlvbihjb25maWcsIGF4aXNMYWJlbHMsIGNvbnRleHQsIHBlcmNlbnRNaW4sIHJlZmVyZW5jZXMsIHJhbmtBeGVzKVxuICAgIDogdmFsdWVBeGlzT3B0aW9uKGNvbmZpZy52YWx1ZUF4aXMsIGhvcml6b250YWwsIHBlcmNlbnRNaW4gPT09IHVuZGVmaW5lZFxuICAgICAgPyBheGlzTGFiZWxzWzBdXG4gICAgICA6IHBlcmNlbnRBeGlzTGFiZWwoY29udGV4dCksIHsgcGVyY2VudE1pbiwgcmVhY2g6IHJlZmVyZW5jZVJlYWNoKHJlZmVyZW5jZXMsIDApLCByYW5rOiByYW5rQXhlc1swXSB9KTtcblxuICBjb25zdCBsZWdlbmRQb3NpdGlvbiA9IHJlc29sdmVMZWdlbmRQb3NpdGlvbihjb25maWcsIHNlcmllcy5sZW5ndGgsIGNvbG9yQnkpO1xuICBjb25zdCB2YWx1ZVRpdGxlcyA9IFtjb25maWcudmFsdWVBeGlzLCB0d29BeGVzID8gY29uZmlnLnNlY29uZGFyeUF4aXMgOiB1bmRlZmluZWRdO1xuICBjb25zdCBncmFudWxhcml0eSA9IGJ1Y2tldEdyYW51bGFyaXR5KGRhdGEpO1xuXG4gIHJldHVybiB7XG4gICAgZ3JpZDogYXhpc0dyaWQoXG4gICAgICBsZWdlbmRQb3NpdGlvbixcbiAgICAgIGNhdGVnb3J5VGl0bGVTaWRlKGNvbmZpZywgZGF0YSwgaG9yaXpvbnRhbCksXG4gICAgICB2YWx1ZVRpdGxlU2lkZSh2YWx1ZVRpdGxlcywgaG9yaXpvbnRhbCksXG4gICAgKSxcbiAgICBsZWdlbmQ6IHJlZmVyZW5jZUxlZ2VuZChsZWdlbmRPcHRpb24obGVnZW5kUG9zaXRpb24pLCBzZXJpZXMsIHJlZmVyZW5jZXMpLFxuICAgIC8vIGNvbG9yQnkgY2hhcnRzIG92ZXJsYXAgTiBtb3N0bHktbnVsbCBzZXJpZXMsIHNvIGFuIGF4aXMgdG9vbHRpcCB3b3VsZCBsaXN0XG4gICAgLy8gZXZlcnkgY2F0ZWdvcnk7IGFuIGl0ZW0gdG9vbHRpcCBzaG93cyBqdXN0IHRoZSBob3ZlcmVkIGJhci4gQSAxMDAlXG4gICAgLy8gc3RhY2tlZCBjaGFydCdzIHRvb2x0aXAgZ2l2ZXMgZWFjaCBzaGFyZSBhbmQgdGhlIHZhbHVlIGl0IGNhbWUgZnJvbS4gQVxuICAgIC8vIGNoYXJ0IHdpdGggdGhlIHNlcnZlcidzIGFubm90YXRpb25zIG5hbWVzIHdoYXQgZWFjaCB2YWx1ZSBjb3ZlcnMuXG4gICAgdG9vbHRpcDogc2hhcmVzXG4gICAgICA/IHtcbiAgICAgICAgdHJpZ2dlcjogJ2F4aXMnLFxuICAgICAgICBmb3JtYXR0ZXI6IChwYXJhbXM6IFRvb2x0aXBDb21wb25lbnRGb3JtYXR0ZXJDYWxsYmFja1BhcmFtcykgPT4gcGVyY2VudFRvb2x0aXAoXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIGV4dHJhY3RlZCxcbiAgICAgICAgICBzaGFyZXMsXG4gICAgICAgICAgZ3JhbnVsYXJpdHksXG4gICAgICAgICAgY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICApLFxuICAgICAgfVxuICAgICAgOiBhbm5vdGF0ZWRDaGFydFRvb2x0aXAoYW5ub3RhdGlvbnMgJiYgIWNvbG9yQnkgPyB7XG4gICAgICAgIGV4dHJhY3RlZCxcbiAgICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICAgIG93bmVyczogc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiBzZWdtZW50Lm93bmVyKSxcbiAgICAgICAgZ3JhbnVsYXJpdHksXG4gICAgICAgIGRhdGVMYWJlbDogY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgIH0gOiBudWxsKSA/PyB7IHRyaWdnZXI6IGNvbG9yQnkgPyAnaXRlbScgOiAnYXhpcycgfSxcbiAgICB4QXhpczogaG9yaXpvbnRhbCA/IHZhbHVlQXhpcyA6IGNhdGVnb3J5QXhpcyxcbiAgICB5QXhpczogaG9yaXpvbnRhbCA/IGNhdGVnb3J5QXhpcyA6IHZhbHVlQXhpcyxcbiAgICBzZXJpZXM6IFsuLi5zZXJpZXMsIC4uLnNlZ21lbnRzLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC5zZXJpZXMpLCAuLi5yZWZlcmVuY2VDYXJyaWVycyhyZWZlcmVuY2VzLCBleHRyYWN0ZWQuY2F0ZWdvcmllcyldLFxuICB9O1xufVxuXG4vLyBXaGF0IHRoZSBzZXJ2ZXIgc2F5cyBvZiB0aGUgc2VyaWVzIGFuIGF4aXMgY2hhcnQgcGxvdHMsIHJlYWQgZnJvbSB0aGVcbi8vIGRhdGEncyBjb21wYXJpc29uLCBvdXRwdXRzLCB3aW5kb3dzIGFuZCBwYXJ0aWFsUGVyaW9kIGJ5IGVhY2ggc2VyaWVzJ1xuLy8gbWVhc3VyZSBjb2x1bW4uIGNoYXJ0QW5ub3RhdGlvbnMgaXMgbnVsbCB3aGVuIHRoZSBkYXRhIGNhcnJpZXMgbm9uZSBvZlxuLy8gdGhvc2Uga2V5cywgYW5kIHRoZSBjaGFydCBkcmF3cyBleGFjdGx5IGFzIGJlZm9yZS5cbmludGVyZmFjZSBDaGFydEFubm90YXRpb25zIHtcbiAgb3V0cHV0czogKE91dHB1dE1ldGEgfCBudWxsKVtdO1xuICB3aW5kb3dzOiAoV2luZG93TWV0YSB8IG51bGwpW107XG4gIC8vIFRoZSBjaGFydCBtZWFzdXJlIGFuIG91dHB1dCB0YWtlcyBpdHMgbWVhc3VyZSdzIGZvcm1hdCBmcm9tOiBpdHMgY3VycmVudFxuICAvLyB2YWx1ZSdzLCB3aGVuIHRoZSBjaGFydCBwbG90cyBpdC5cbiAgbWVhc3VyZVNwZWNzOiAoQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkKVtdO1xuICAvLyBBIGNoYW5nZSBvciBwZXJjZW50IGNoYW5nZSBzZXJpZXMnIHByaW9yIHZhbHVlcyBieSBjYXRlZ29yeSwgd2hpY2ggdGVsbFxuICAvLyBhIG1pc3NpbmcgYmFzZWxpbmUgZnJvbSBhIHplcm8gb25lOyBudWxsIGZvciBhbnkgb3RoZXIgc2VyaWVzLlxuICBwcmlvcnM6ICgobnVtYmVyIHwgbnVsbClbXSB8IG51bGwpW107XG4gIC8vIFRoZSBsYW5lIHByaW9yIGEgY3VycmVudCwgY2hhbmdlIG9yIHBlcmNlbnQgY2hhbmdlIHNlcmllcyBpcyBjb21wYXJlZFxuICAvLyB3aXRoLCB3aGVuIHRoZSBjaGFydCBkb2VzIG5vdCBwbG90IHRoYXQgcHJpb3IgaXRzZWxmOiBpdHMgdG9vbHRpcCBsaW5lXG4gIC8vIG5hbWVzIHRoZSBwcmlvcidzIHZhbHVlIGFuZCBkYXlzLiBudWxsIGZvciBhbnkgb3RoZXIgc2VyaWVzLlxuICBsYW5lUHJpb3JzOiAoTGFuZVByaW9yIHwgbnVsbClbXTtcbiAgLy8gRXZlcnkgc2VyaWVzJyBvd24gQ1NTIGNvbG9yLCBzbyBhIHByaW9yIHNlcmllcyBhbmQgYSBwYXJ0aWFsIHNlZ21lbnQgY2FuXG4gIC8vIHNoYXJlIGFub3RoZXInczsgbnVsbCBvbiBhIGNvbG9yQnkgY2hhcnQsIHdoaWNoIGNvbG9ycyBieSBjYXRlZ29yeS5cbiAgY29sb3JzOiBzdHJpbmdbXSB8IG51bGw7XG4gIHByaW9yU2VyaWVzOiBib29sZWFuW107XG4gIGNvbXBhcmlzb246IENvbXBvbmVudENvbXBhcmlzb24gfCBudWxsO1xuICAvLyBUaGUgY2F0ZWdvcnkgb2YgdGhlIHBlcmlvZCBub3Qgb3ZlciB5ZXQsIG9yIG51bGwuXG4gIHBhcnRpYWxJbmRleDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gQSBzZXJpZXMnIGxhbmUgcHJpb3I6IGl0cyBvdXRwdXQsIGl0cyB2YWx1ZXMgYnkgY2F0ZWdvcnksIGFuZCBhIGtleSB0aGF0XG4vLyBuYW1lcyBpdCBvbmNlIGluIGEgdG9vbHRpcCAodGhlIHByaW9yIGNvbHVtbiwgYW5kIG9uIGEgc3BsaXRCeSBjaGFydCB0aGVcbi8vIGdyb3VwKS5cbmludGVyZmFjZSBMYW5lUHJpb3Ige1xuICBrZXk6IHN0cmluZztcbiAgb3V0cHV0OiBPdXRwdXRNZXRhO1xuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdO1xufVxuXG4vLyBUaGUga2V5cyBvZiBhIGJ1aWx0IGF4aXMgc2VyaWVzIHRoYXQgdGhlIGFubm90YXRpb25zIHJlYWQgYW5kIHJlcGxhY2UuXG5pbnRlcmZhY2UgRHJhd25TZXJpZXMge1xuICB0eXBlPzogc3RyaW5nO1xuICBzdGFjaz86IHN0cmluZztcbiAgZGF0YT86IFNlcmllc0RhdGFJdGVtPERhdGFMYWJlbFBvc2l0aW9uPltdO1xuICBpdGVtU3R5bGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbGluZVN0eWxlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIEEgZGFzaGVkIGxhc3Qgc2VnbWVudCAocGFydGlhbFNlZ21lbnRzKSwgZHJhd24gYWZ0ZXIgdGhlIG1lYXN1cmUgc2VyaWVzLFxuLy8gYW5kIHRoZSBpbmRleCBvZiB0aGUgc2VyaWVzIGl0IGNvbnRpbnVlcy5cbmludGVyZmFjZSBQYXJ0aWFsU2VnbWVudCB7XG4gIHNlcmllczogU2VyaWVzT3B0aW9uO1xuICBvd25lcjogbnVtYmVyO1xufVxuXG4vLyBXaGF0IGFuIGFubm90YXRlZCBjaGFydCdzIGF4aXMgdG9vbHRpcCByZWFkcy4gb3duZXJzIGhvbGRzLCBieSBwb3NpdGlvbixcbi8vIHRoZSBzZXJpZXMgZWFjaCBwYXJ0aWFsIHNlZ21lbnQgY29udGludWVzLlxuaW50ZXJmYWNlIEFubm90YXRlZFRvb2x0aXBTb3VyY2Uge1xuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzO1xuICBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucztcbiAgb3duZXJzOiBudW1iZXJbXTtcbiAgZ3JhbnVsYXJpdHk6IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsO1xuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBjaGFydEFubm90YXRpb25zKFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBjb2xvckJ5OiBib29sZWFuLFxuKTogQ2hhcnRBbm5vdGF0aW9ucyB8IG51bGwge1xuICBpZiAoIWRhdGEuY29tcGFyaXNvbiAmJiAhZGF0YS5vdXRwdXRzICYmICFkYXRhLndpbmRvd3MgJiYgKGRhdGEucGFydGlhbFBlcmlvZCA/PyBudWxsKSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY29sdW1ucyA9IGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy5tZWFzdXJlLmNvbHVtbik7XG4gIGNvbnN0IG91dHB1dHMgPSBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBkYXRhLm91dHB1dHM/Lltjb2x1bW5dID8/IG51bGwpO1xuICBjb25zdCBjdXJyZW50cyA9IGNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiAob3V0cHV0c1tpbmRleF0gPyBjdXJyZW50T3V0cHV0QWxpYXMoZGF0YS5vdXRwdXRzLCBjb2x1bW4pIDogbnVsbCkpO1xuICBjb25zdCBtZWFzdXJlcyA9IGNoYXJ0TWVhc3VyZXMoY29uZmlnLCBkYXRhKTtcbiAgLy8gQSBwcmlvciBzZXJpZXMnIGN1cnJlbnQgc2VyaWVzLCBieSBpbmRleDsgLTEgZm9yIGFueSBvdGhlci5cbiAgY29uc3Qgc291cmNlcyA9IGN1cnJlbnRzLm1hcCgoY3VycmVudCwgaW5kZXgpID0+IChvdXRwdXRzW2luZGV4XT8ucm9sZSA9PT0gJ3ByaW9yJyA/IGNvbHVtbnMuaW5kZXhPZihjdXJyZW50KSA6IC0xKSk7XG4gIGNvbnN0IHBhcnRpYWxJbmRleCA9IChkYXRhLnBhcnRpYWxQZXJpb2QgPz8gbnVsbCkgPT09IG51bGwgPyAtMSA6IGV4dHJhY3RlZC5jYXRlZ29yaWVzLmluZGV4T2YoU3RyaW5nKGRhdGEucGFydGlhbFBlcmlvZCkpO1xuICBjb25zdCBsYW5lcyA9IGxhbmVQcmlvclZhbHVlcyhjb25maWcsIGRhdGEsIGV4dHJhY3RlZCwgb3V0cHV0cyk7XG5cbiAgcmV0dXJuIHtcbiAgICBvdXRwdXRzLFxuICAgIHdpbmRvd3M6IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IGRhdGEud2luZG93cz8uW2NvbHVtbl0gPz8gbnVsbCksXG4gICAgbWVhc3VyZVNwZWNzOiBjdXJyZW50cy5tYXAoKGN1cnJlbnQpID0+IG1lYXN1cmVzLmZpbmQoKG1lYXN1cmUpID0+IG1lYXN1cmUuY29sdW1uID09PSBjdXJyZW50KSksXG4gICAgcHJpb3JzOiBsYW5lcy5tYXAoKGxhbmUsIGluZGV4KSA9PiAoaXNEZWx0YVJvbGUob3V0cHV0c1tpbmRleF0/LnJvbGUpID8gbGFuZT8ucHJpb3IudmFsdWVzID8/IG51bGwgOiBudWxsKSksXG4gICAgbGFuZVByaW9yczogbGFuZXMubWFwKChsYW5lKSA9PiAobGFuZSAmJiAhY29sdW1ucy5pbmNsdWRlcyhsYW5lLmFsaWFzKSA/IGxhbmUucHJpb3IgOiBudWxsKSksXG4gICAgY29sb3JzOiBjb2xvckJ5ID8gbnVsbCA6IGFubm90YXRlZENvbG9ycyhleHRyYWN0ZWQsIHNvdXJjZXMpLFxuICAgIHByaW9yU2VyaWVzOiBvdXRwdXRzLm1hcCgob3V0cHV0KSA9PiBvdXRwdXQ/LnJvbGUgPT09ICdwcmlvcicpLFxuICAgIGNvbXBhcmlzb246IGRhdGEuY29tcGFyaXNvbiA/PyBudWxsLFxuICAgIHBhcnRpYWxJbmRleDogcGFydGlhbEluZGV4IDwgMCA/IG51bGwgOiBwYXJ0aWFsSW5kZXgsXG4gIH07XG59XG5cbi8vIEEgY3VycmVudCwgY2hhbmdlIG9yIHBlcmNlbnQgY2hhbmdlIHNlcmllcycgbGFuZSBwcmlvciwgYnkgY2F0ZWdvcnk6IGl0c1xuLy8gbGFuZSdzIHByaW9yIGNvbHVtbiBpbiB0aGUgc2FtZSByb3dzICh0aGUgc2FtZSBncm91cCdzIG9uIGEgc3BsaXRCeSBjaGFydCksXG4vLyBhbmQgdGhhdCBjb2x1bW4ncyBhbGlhcy5cbmZ1bmN0aW9uIGxhbmVQcmlvclZhbHVlcyhcbiAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgb3V0cHV0czogKE91dHB1dE1ldGEgfCBudWxsKVtdLFxuKTogKHsgYWxpYXM6IHN0cmluZzsgcHJpb3I6IExhbmVQcmlvciB9IHwgbnVsbClbXSB7XG4gIGNvbnN0IHsgeENvbHVtbiwgZ3JvdXBDb2x1bW4gfSA9IGNoYXJ0Q29sdW1ucyhjb25maWcsIGRhdGEpO1xuICBjb25zdCByYXdDYXRlZ29yaWVzID0gdW5pcXVlVmFsdWVzKGRhdGEucm93cywgeENvbHVtbik7XG4gIGNvbnN0IGdyb3VwcyA9IGdyb3VwQ29sdW1uID8gdW5pcXVlVmFsdWVzKGRhdGEucm93cywgZ3JvdXBDb2x1bW4pIDogW107XG5cbiAgcmV0dXJuIGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMsIGluZGV4KSA9PiB7XG4gICAgY29uc3Qgcm9sZSA9IG91dHB1dHNbaW5kZXhdPy5yb2xlO1xuICAgIGNvbnN0IGFsaWFzID0gcm9sZSA9PT0gJ2N1cnJlbnQnIHx8IGlzRGVsdGFSb2xlKHJvbGUpXG4gICAgICA/IGxhbmVPdXRwdXRBbGlhcyhkYXRhLm91dHB1dHMsIHNlcmllcy5tZWFzdXJlLmNvbHVtbiwgJ3ByaW9yJylcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBvdXRwdXQgPSBhbGlhcyA/IGRhdGEub3V0cHV0cz8uW2FsaWFzXSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghYWxpYXMgfHwgIW91dHB1dCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSBncm91cENvbHVtbiA/IChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiByb3dbZ3JvdXBDb2x1bW5dID09PSBncm91cHNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFsaWFzLFxuICAgICAgcHJpb3I6IHtcbiAgICAgICAga2V5OiBncm91cENvbHVtbiA/IGAke2FsaWFzfVxcdTAwMDAke2luZGV4fWAgOiBhbGlhcyxcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICB2YWx1ZXM6IGNhdGVnb3J5VmFsdWVzKGRhdGEucm93cywgeENvbHVtbiwgcmF3Q2F0ZWdvcmllcywgYWxpYXMsIG1hdGNoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzRGVsdGFSb2xlKHJvbGU6IE91dHB1dFJvbGUgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiByb2xlID09PSAnY2hhbmdlJyB8fCByb2xlID09PSAncGVyY2VudF9jaGFuZ2UnO1xufVxuXG4vLyBFYWNoIHNlcmllcycgY29sb3IgYXMgdGhlIHRoZW1lIHdvdWxkIGhhbmQgaXQgb3V0OiBpdHMgbWVhc3VyZSdzIG5hbWVkXG4vLyBjb2xvciwgZWxzZSB0aGUgbmV4dCBwYWxldHRlIGNvbG9yIGFtb25nIHRoZSBzZXJpZXMgd2l0aG91dCBvbmUuIEEgcHJpb3Jcbi8vIHNlcmllcyB0aGF0IG5hbWVzIG5vIGNvbG9yIHRha2VzIGl0cyBjdXJyZW50IHNlcmllcycgY29sb3IgKHNvdXJjZXMpIGFuZFxuLy8gbm8gcGFsZXR0ZSBjb2xvciBvZiBpdHMgb3duLlxuZnVuY3Rpb24gYW5ub3RhdGVkQ29sb3JzKGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsIHNvdXJjZXM6IG51bWJlcltdKTogc3RyaW5nW10ge1xuICBsZXQgc2xvdCA9IDA7XG4gIGNvbnN0IG93biA9IGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbmFtZWQgPSBzZXJpZXNDb2xvcihzZXJpZXMpO1xuXG4gICAgaWYgKG5hbWVkIHx8IHNvdXJjZXNbaW5kZXhdID49IDApIHtcbiAgICAgIHJldHVybiBuYW1lZCA/PyBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBSRVBPUlRfQ0hBUlRfQ09MT1JTX0NTU1tzbG90KysgJSBSRVBPUlRfQ0hBUlRfQ09MT1JTX0NTUy5sZW5ndGhdO1xuICB9KTtcblxuICByZXR1cm4gb3duLm1hcCgoY29sb3IsIGluZGV4KSA9PiBjb2xvciA/PyBvd25bc291cmNlc1tpbmRleF1dIGFzIHN0cmluZyk7XG59XG5cbi8vIEEgc2VyaWVzJyBtYXJrczogYSBwcmlvciBkcmF3biBpbiBpdHMgY3VycmVudCBzZXJpZXMnIGNvbG9yIGZhbWlseSwgZGFzaGVkLFxuLy8gYW5kIHRoZSBwZXJpb2Qgbm90IG92ZXIgeWV0IGhhdGNoZWQgKGEgYmFyKSBvciByaW5nZWQgKGEgcG9pbnQpLlxuZnVuY3Rpb24gbWFya1NlcmllcyhcbiAgb3B0aW9uOiBTZXJpZXNPcHRpb24sXG4gIGFubm90YXRpb25zOiBDaGFydEFubm90YXRpb25zLFxuICBpbmRleDogbnVtYmVyLFxuICBtZWFzdXJlOiBDaGFydE1lYXN1cmUsXG4pOiBTZXJpZXNPcHRpb24ge1xuICBjb25zdCBwcmlvciA9IGFubm90YXRpb25zLnByaW9yU2VyaWVzW2luZGV4XSA/IHByaW9yU3R5bGUob3B0aW9uLCBtZWFzdXJlLCBhbm5vdGF0aW9ucy5jb2xvcnM/LltpbmRleF0pIDogb3B0aW9uO1xuXG4gIHJldHVybiBhbm5vdGF0aW9ucy5wYXJ0aWFsSW5kZXggPT09IG51bGwgPyBwcmlvciA6IG1hcmtQYXJ0aWFsUG9pbnQocHJpb3IsIGFubm90YXRpb25zLnBhcnRpYWxJbmRleCk7XG59XG5cbi8vIEEgcHJpb3IncyBiYXJzIGFyZSBmYWRlZCB3aXRoIGEgZGFzaGVkIGVkZ2U7IGl0cyBsaW5lIGlzIGRhc2hlZCB1bmxlc3MgaXRzXG4vLyBtZWFzdXJlIG5hbWVzIGEgbGluZSBzdHlsZS5cbmZ1bmN0aW9uIHByaW9yU3R5bGUob3B0aW9uOiBTZXJpZXNPcHRpb24sIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSwgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFNlcmllc09wdGlvbiB7XG4gIGNvbnN0IGRyYXduID0gb3B0aW9uIGFzIERyYXduU2VyaWVzO1xuXG4gIGlmIChkcmF3bi50eXBlID09PSAnYmFyJykge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vcHRpb24sXG4gICAgICBpdGVtU3R5bGU6IHtcbiAgICAgICAgLi4uZHJhd24uaXRlbVN0eWxlLFxuICAgICAgICBvcGFjaXR5OiBQUklPUl9CQVJfT1BBQ0lUWSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgIGJvcmRlclR5cGU6ICdkYXNoZWQnLFxuICAgICAgICAuLi4oY29sb3IgPyB7IGJvcmRlckNvbG9yOiBjb2xvciB9IDoge30pLFxuICAgICAgfSxcbiAgICB9IGFzIFNlcmllc09wdGlvbjtcbiAgfVxuXG4gIHJldHVybiB7IC4uLm9wdGlvbiwgbGluZVN0eWxlOiB7IC4uLmRyYXduLmxpbmVTdHlsZSwgdHlwZTogbWVhc3VyZUxpbmVTdHlsZShtZWFzdXJlKSA/PyBQUklPUl9MSU5FX1NUWUxFIH0gfSBhcyBTZXJpZXNPcHRpb247XG59XG5cbi8vIFRoZSBwb2ludCBvZiB0aGUgcGVyaW9kIG5vdCBvdmVyIHlldCwgd2hlbiBpdCBoYXMgYSB2YWx1ZS5cbmZ1bmN0aW9uIG1hcmtQYXJ0aWFsUG9pbnQob3B0aW9uOiBTZXJpZXNPcHRpb24sIHBhcnRpYWxJbmRleDogbnVtYmVyKTogU2VyaWVzT3B0aW9uIHtcbiAgY29uc3QgZHJhd24gPSBvcHRpb24gYXMgRHJhd25TZXJpZXM7XG4gIGNvbnN0IGRhdGEgPSBbLi4uKGRyYXduLmRhdGEgPz8gW10pXTtcbiAgY29uc3QgaXRlbSA9IGRhdGFbcGFydGlhbEluZGV4XTtcblxuICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IHBvaW50VmFsdWUoaXRlbSkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG5cbiAgY29uc3QgbWFyayA9IGRyYXduLnR5cGUgPT09ICdiYXInID8geyBpdGVtU3R5bGU6IHsgZGVjYWw6IFBBUlRJQUxfQkFSX0RFQ0FMIH0gfSA6IFBBUlRJQUxfUE9JTlRfTUFSSztcbiAgZGF0YVtwYXJ0aWFsSW5kZXhdID0gKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IHsgLi4uaXRlbSwgLi4ubWFyayB9IDogeyB2YWx1ZTogaXRlbSwgLi4ubWFyayB9KSBhcyBTZXJpZXNEYXRhSXRlbTxEYXRhTGFiZWxQb3NpdGlvbj47XG5cbiAgcmV0dXJuIHsgLi4ub3B0aW9uLCBkYXRhIH0gYXMgU2VyaWVzT3B0aW9uO1xufVxuXG4vLyBBIGxpbmUgb3IgYXJlYSBzZXJpZXMgd2hvc2UgbGFzdCBwZXJpb2QgaXMgbm90IG92ZXIgeWV0IGRyYXdzIGl0cyBsYXN0XG4vLyBzZWdtZW50IGRhc2hlZDogdGhlIHNlcmllcyBzdG9wcyBvbmUgcG9pbnQgc2hvcnQsIGFuZCBhIHNlZ21lbnQgc2VyaWVzXG4vLyBjYXJyaWVzIGl0cyBsYXN0IHR3byBwb2ludHMsIGRhc2hlZCwgaW4gaXRzIGNvbG9yIGFuZCB1bmRlciBpdHMgbmFtZSwgc29cbi8vIHRoZSBvbmUgbGVnZW5kIGVudHJ5IHRvZ2dsZXMgYm90aC4gSXRzIGlkIG5hbWVzIHRoZSBzZXJpZXMgaXQgY29udGludWVzXG4vLyAocGFydGlhbFNlZ21lbnRJZCksIHNvIGEgY2xpY2sgb24gaXQgcmVhZHMgYXMgYSBjbGljayBvbiB0aGF0IHNlcmllcy4gQVxuLy8gc3RhY2tlZCBzZXJpZXMga2VlcHMgaXRzIGxpbmUgd2hvbGUgKGEgc2VnbWVudCB3b3VsZCBzdGFjayBvbiB0b3Agb2YgaXQpLFxuLy8gYW5kIGEgZ2FwIHN0YXlzIGEgZ2FwLiBSZXBsYWNlcyBlYWNoIHN1Y2ggc2VyaWVzIGluIGBzZXJpZXNgIGFuZCByZXR1cm5zXG4vLyB0aGUgc2VnbWVudHMuXG5mdW5jdGlvbiBwYXJ0aWFsU2VnbWVudHMoc2VyaWVzOiBTZXJpZXNPcHRpb25bXSwgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMpOiBQYXJ0aWFsU2VnbWVudFtdIHtcbiAgY29uc3QgbGFzdCA9IGFubm90YXRpb25zLnBhcnRpYWxJbmRleDtcbiAgY29uc3Qgc2VnbWVudHM6IFBhcnRpYWxTZWdtZW50W10gPSBbXTtcblxuICBzZXJpZXMuZm9yRWFjaCgob3B0aW9uLCBvd25lcikgPT4ge1xuICAgIGNvbnN0IGRyYXduID0gb3B0aW9uIGFzIERyYXduU2VyaWVzO1xuICAgIGNvbnN0IGRhdGEgPSBkcmF3bi5kYXRhID8/IFtdO1xuICAgIGNvbnN0IGNvbG9yID0gYW5ub3RhdGlvbnMuY29sb3JzPy5bb3duZXJdO1xuXG4gICAgaWYgKGxhc3QgPT09IG51bGwgfHwgbGFzdCA8IDEgfHwgbGFzdCAhPT0gZGF0YS5sZW5ndGggLSAxIHx8IGRyYXduLnR5cGUgIT09ICdsaW5lJyB8fCBkcmF3bi5zdGFjayB8fCAhY29sb3JcbiAgICAgIHx8IHBvaW50VmFsdWUoZGF0YVtsYXN0IC0gMV0pID09PSBudWxsIHx8IHBvaW50VmFsdWUoZGF0YVtsYXN0XSkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXJpZXNbb3duZXJdID0geyAuLi5vcHRpb24sIGRhdGE6IFsuLi5kYXRhLnNsaWNlKDAsIGxhc3QpLCBudWxsXSB9IGFzIFNlcmllc09wdGlvbjtcbiAgICBzZWdtZW50cy5wdXNoKHsgb3duZXIsIHNlcmllczogeyAuLi5zZWdtZW50U2VyaWVzKG9wdGlvbiwgY29sb3IsIGxhc3QpLCBpZDogcGFydGlhbFNlZ21lbnRJZChvd25lcikgfSBhcyBTZXJpZXNPcHRpb24gfSk7XG4gIH0pO1xuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuLy8gVGhlIGRhc2hlZCBzZWdtZW50IGZyb20gdGhlIHBvaW50IGJlZm9yZSB0aGUgbGFzdCB0byB0aGUgbGFzdCBvbmUsIHdoaWNoXG4vLyBrZWVwcyBpdHMgbWFya3MgYW5kIGl0cyBkYXRhIGxhYmVsLiBUaGUgcG9pbnQgYmVmb3JlIGl0IGlzIGRyYXduLCBhbmRcbi8vIGxhYmVsZWQsIGJ5IHRoZSBzZXJpZXMgaXRzZWxmLlxuZnVuY3Rpb24gc2VnbWVudFNlcmllcyhvcHRpb246IFNlcmllc09wdGlvbiwgY29sb3I6IHN0cmluZywgbGFzdDogbnVtYmVyKTogU2VyaWVzT3B0aW9uIHtcbiAgY29uc3QgZHJhd24gPSBvcHRpb24gYXMgRHJhd25TZXJpZXM7XG4gIGNvbnN0IGRhdGEgPSBkcmF3bi5kYXRhID8/IFtdO1xuXG4gIHJldHVybiB7XG4gICAgLi4ub3B0aW9uLFxuICAgIG1hcmtMaW5lOiB1bmRlZmluZWQsXG4gICAgbGluZVN0eWxlOiB7IC4uLmRyYXduLmxpbmVTdHlsZSwgY29sb3IsIHR5cGU6IFBBUlRJQUxfTElORV9TVFlMRSB9LFxuICAgIGRhdGE6IGRhdGEubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBsYXN0KSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXggPT09IGxhc3QgLSAxID8geyB2YWx1ZTogcG9pbnRWYWx1ZShpdGVtKSwgc3ltYm9sOiAnbm9uZScsIGxhYmVsOiB7IHNob3c6IGZhbHNlIH0gfSA6IG51bGw7XG4gICAgfSksXG4gIH0gYXMgU2VyaWVzT3B0aW9uO1xufVxuXG4vLyBBIHBhcnRpYWwgc2VnbWVudCdzIHNlcmllcyBpZCwgZnJvbSB0aGUgaW5kZXggb2YgdGhlIHNlcmllcyBpdCBjb250aW51ZXMuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbFNlZ21lbnRJZChvd25lcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1BBUlRJQUxfU0VHTUVOVF9JRH0ke293bmVyfWA7XG59XG5cbi8vIFRoZSBpbmRleCBvZiB0aGUgc2VyaWVzIGEgcGFydGlhbCBzZWdtZW50IGNvbnRpbnVlcywgcmVhZCBmcm9tIGl0cyBpZDtcbi8vIG51bGwgZm9yIGFueSBvdGhlciBpZC5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsU2VnbWVudE93bmVyKHNlcmllc0lkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmICghc2VyaWVzSWQ/LnN0YXJ0c1dpdGgoUEFSVElBTF9TRUdNRU5UX0lEKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3duZXIgPSBOdW1iZXIoc2VyaWVzSWQuc2xpY2UoUEFSVElBTF9TRUdNRU5UX0lELmxlbmd0aCkpO1xuXG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG93bmVyKSAmJiBvd25lciA+PSAwID8gb3duZXIgOiBudWxsO1xufVxuXG4vLyBBIHBvaW50J3MgcGxvdHRlZCB2YWx1ZSwgd2hldGhlciBpdCBpcyBhIGJhcmUgbnVtYmVyIG9yIGFuIG9iamVjdC5cbmZ1bmN0aW9uIHBvaW50VmFsdWUoaXRlbTogU2VyaWVzRGF0YUl0ZW08RGF0YUxhYmVsUG9zaXRpb24+IHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyA/IGl0ZW0gOiBpdGVtLnZhbHVlO1xufVxuXG4vLyBIb3cgYW4gb3V0cHV0IHNlcmllcyB3cml0ZXMgYSB2YWx1ZTogZm9ybWF0T3V0cHV0VmFsdWUncyBydWxlcyAoYSBzaWduZWRcbi8vIGNoYW5nZSwgcG9pbnRzLCAn4oCUJyB3aXRoIHRoZSBuby1iYXNlbGluZSB0aXRsZSwgcmFua3MgYW5kIHNoYXJlcykgd2l0aCBpdHNcbi8vIG1lYXN1cmUncyBmb3JtYXQgYW5kIHRoZSBjb21wYXJpc29uJ3MgZmxvb3IuIEdpdmVuIHRoZSBwb2ludCdzIGluZGV4IChhXG4vLyB0b29sdGlwLCBhIGRhdGEgbGFiZWwpLCBhIGNoYW5nZSByZWFkcyBpdHMgcHJpb3IgdGhlcmUsIHdoaWNoIHRlbGxzIGFcbi8vIG1pc3NpbmcgYmFzZWxpbmUgZnJvbSBhIHplcm8gb25lLiBUaGUgdGl0bGUgc2F5cyB3aHkgYSB2YWx1ZSByZWFkcyAn4oCUJyBvclxuLy8gJ24vYScuXG5mdW5jdGlvbiBvdXRwdXRWYWx1ZShcbiAgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMsXG4gIGluZGV4OiBudW1iZXIsXG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6ICh2YWx1ZTogdW5rbm93biwgZGF0YUluZGV4PzogbnVtYmVyKSA9PiBGb3JtYXR0ZWRPdXRwdXRWYWx1ZSB7XG4gIGNvbnN0IG91dHB1dCA9IGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdO1xuICBjb25zdCBwcmlvcnMgPSBhbm5vdGF0aW9ucy5wcmlvcnNbaW5kZXhdO1xuXG4gIHJldHVybiAodmFsdWUsIGRhdGFJbmRleCkgPT4gZm9ybWF0T3V0cHV0VmFsdWUoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlLCBvdXRwdXQsIG1lYXN1cmUsIGNvbnRleHQsIHtcbiAgICBtZWFzdXJlU3BlYzogYW5ub3RhdGlvbnMubWVhc3VyZVNwZWNzW2luZGV4XSxcbiAgICBmbG9vcjogYW5ub3RhdGlvbnMuY29tcGFyaXNvbj8uZmxvb3IgPz8gbnVsbCxcbiAgICAuLi4ocHJpb3JzICYmIGRhdGFJbmRleCAhPT0gdW5kZWZpbmVkID8geyBwcmlvcjogcHJpb3JzW2RhdGFJbmRleF0gPz8gbnVsbCB9IDoge30pLFxuICB9KTtcbn1cblxuLy8gQW4gb3V0cHV0IHZhbHVlJ3MgdGV4dCBhbG9uZSwgZm9yIGEgc2VyaWVzJyBvd24gdG9vbHRpcCBhbmQgaXRzIGRhdGEgbGFiZWxzLlxuZnVuY3Rpb24gb3V0cHV0V3JpdGVyKFxuICBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucyxcbiAgaW5kZXg6IG51bWJlcixcbiAgbWVhc3VyZTogQ2hhcnRNZWFzdXJlLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuKTogKHZhbHVlOiB1bmtub3duLCBkYXRhSW5kZXg/OiBudW1iZXIpID0+IHN0cmluZyB7XG4gIGNvbnN0IHdyaXRlID0gb3V0cHV0VmFsdWUoYW5ub3RhdGlvbnMsIGluZGV4LCBtZWFzdXJlLCBjb250ZXh0KTtcblxuICByZXR1cm4gKHZhbHVlLCBkYXRhSW5kZXgpID0+IHdyaXRlKHZhbHVlLCBkYXRhSW5kZXgpLnRleHQ7XG59XG5cbmZ1bmN0aW9uIG91dHB1dExhYmVsRm9ybWF0dGVyKHdyaXRlOiAodmFsdWU6IHVua25vd24sIGRhdGFJbmRleD86IG51bWJlcikgPT4gc3RyaW5nKTogRGF0YUxhYmVsRm9ybWF0dGVyIHtcbiAgcmV0dXJuIChwYXJhbXMpID0+IHdyaXRlKGRhdGFMYWJlbFZhbHVlKHBhcmFtcyksIHBhcmFtcy5kYXRhSW5kZXgpO1xufVxuXG4vLyBUaGUgY2hhcnQncyBzZXJpZXMgYXMgaXRzIHZhbHVlIGF4ZXMgcmVhZCB0aGVtOiBhbiBvdXRwdXQgc2VyaWVzIHdob3NlXG4vLyBzbG90IG5hbWVzIG5vIGZvcm1hdCB0YWtlcyBpdHMgb3V0cHV0J3MgKG91dHB1dEF4aXNNZWFzdXJlKS5cbmZ1bmN0aW9uIGFubm90YXRlZEF4aXNTZXJpZXMoZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcywgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMpOiBFeHRyYWN0ZWRDaGFydFNlcmllcyB7XG4gIHJldHVybiB7XG4gICAgLi4uZXh0cmFjdGVkLFxuICAgIHNlcmllczogZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcywgaW5kZXgpID0+ICh7XG4gICAgICAuLi5zZXJpZXMsXG4gICAgICBtZWFzdXJlOiBvdXRwdXRBeGlzTWVhc3VyZShzZXJpZXMubWVhc3VyZSwgYW5ub3RhdGlvbnMub3V0cHV0c1tpbmRleF0sIGFubm90YXRpb25zLm1lYXN1cmVTcGVjc1tpbmRleF0pLFxuICAgIH0pKSxcbiAgfTtcbn1cblxuLy8gVGhlIGZvcm1hdCBhbiBvdXRwdXQncyBheGlzIHJlYWRzIHdoZW4gaXRzIHNsb3QgbmFtZXMgbm9uZTogYSByYW5rJ3Mgd2hvbGVcbi8vIG51bWJlcnMsIGEgMC0xIGZyYWN0aW9uJ3MgcGVyY2VudCwgYW5kIGEgY29tcGFyZWQgb3Igd2luZG93ZWQgdmFsdWUgaXRzXG4vLyBtZWFzdXJlJ3MgZm9ybWF0LiBUaGUgc2xvdCdzIG93biBwcmVjaXNpb24gYW5kIHVuaXRzIHN0aWxsIGFwcGx5LlxuZnVuY3Rpb24gb3V0cHV0QXhpc01lYXN1cmUoXG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSxcbiAgb3V0cHV0OiBPdXRwdXRNZXRhIHwgbnVsbCxcbiAgbWVhc3VyZVNwZWM6IENoYXJ0TWVhc3VyZSB8IHVuZGVmaW5lZCxcbik6IENoYXJ0TWVhc3VyZSB7XG4gIGlmICghb3V0cHV0IHx8IG5hbWVzVmFsdWVGb3JtYXQobWVhc3VyZSkpIHtcbiAgICByZXR1cm4gbWVhc3VyZTtcbiAgfVxuXG4gIGxldCBiYXNlOiBOdW1iZXJGb3JtYXRTcGVjIHwgbnVsbCA9IG1lYXN1cmVTcGVjICYmIGhhc051bWJlckZvcm1hdChtZWFzdXJlU3BlYykgPyBmb3JtYXRLZXlzKG1lYXN1cmVTcGVjKSA6IG51bGw7XG4gIGlmIChvdXRwdXQua2luZCA9PT0gJ3JhbmsnKSB7XG4gICAgYmFzZSA9IFJBTktfQVhJU19GT1JNQVQ7XG4gIH0gZWxzZSBpZiAoaXNGcmFjdGlvbk91dHB1dChvdXRwdXQpKSB7XG4gICAgYmFzZSA9IEZSQUNUSU9OX0FYSVNfRk9STUFUO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VcbiAgICA/IHsgLi4ubWVhc3VyZSwgLi4uYmFzZSwgLi4uZm9ybWF0S2V5cyh7IHByZWNpc2lvbjogbWVhc3VyZS5wcmVjaXNpb24sIHVuaXRzOiBtZWFzdXJlLnVuaXRzIH0pIH0gYXMgQ2hhcnRNZWFzdXJlXG4gICAgOiBtZWFzdXJlO1xufVxuXG5mdW5jdGlvbiBuYW1lc1ZhbHVlRm9ybWF0KHNwZWM6IE51bWJlckZvcm1hdFNwZWMpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoUmVwb3J0VmFsdWVGb3JtYXQpLnNvbWUoKGZvcm1hdCkgPT4gZm9ybWF0ID09PSBzcGVjLmZvcm1hdCk7XG59XG5cbi8vIEEgc3BlYydzIG51bWJlci1mb3JtYXQga2V5cyB0aGF0IGFyZSBzZXQuXG5mdW5jdGlvbiBmb3JtYXRLZXlzKHNwZWM6IE51bWJlckZvcm1hdFNwZWMpOiBOdW1iZXJGb3JtYXRTcGVjIHtcbiAgcmV0dXJuIHtcbiAgICAuLi4oKHNwZWMuZm9ybWF0ID8/IG51bGwpICE9PSBudWxsID8geyBmb3JtYXQ6IHNwZWMuZm9ybWF0IH0gOiB7fSksXG4gICAgLi4uKChzcGVjLnByZWNpc2lvbiA/PyBudWxsKSAhPT0gbnVsbCA/IHsgcHJlY2lzaW9uOiBzcGVjLnByZWNpc2lvbiB9IDoge30pLFxuICAgIC4uLigoc3BlYy51bml0cyA/PyBudWxsKSAhPT0gbnVsbCA/IHsgdW5pdHM6IHNwZWMudW5pdHMgfSA6IHt9KSxcbiAgfTtcbn1cblxuLy8gRWFjaCB2YWx1ZSBheGlzJ3MgY29udGV4dDogb25lIHRoYXQgcGxvdHMgb25seSAwLTEgZnJhY3Rpb25zIHJlYWRzIHRoZW0gYXNcbi8vIHJhdGlvcywgd2hhdGV2ZXIgdGhlIHJlcG9ydCdzIHBlcmNlbnRGb3JtYXQgc2F5cyBvZiBpdHMgc3RvcmVkIHZhbHVlcy5cbmZ1bmN0aW9uIGFubm90YXRlZEF4aXNDb250ZXh0cyhcbiAgYW5ub3RhdGlvbnM6IENoYXJ0QW5ub3RhdGlvbnMsXG4gIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuKTogUmVwb3J0Rm9ybWF0Q29udGV4dFtdIHtcbiAgcmV0dXJuIChbMCwgMV0gYXMgY29uc3QpLm1hcCgoYXhpc0luZGV4KSA9PiAoZXZlcnlPbkF4aXMoYW5ub3RhdGlvbnMub3V0cHV0cywgYXhpc0luZGV4ZXMsIGF4aXNJbmRleCwgaXNGcmFjdGlvbk91dHB1dClcbiAgICA/IHsgLi4uY29udGV4dCwgcmF0aW9QZXJjZW50OiB0cnVlIH1cbiAgICA6IGNvbnRleHQpKTtcbn1cblxuLy8gV2hpY2ggdmFsdWUgYXhlcywgYnkgaW5kZXgsIHBsb3Qgbm90aGluZyBidXQgcmFua3MuXG5mdW5jdGlvbiByYW5rQXhpc0ZsYWdzKG91dHB1dHM6IChPdXRwdXRNZXRhIHwgbnVsbClbXSwgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10pOiBib29sZWFuW10ge1xuICByZXR1cm4gKFswLCAxXSBhcyBjb25zdCkubWFwKChheGlzSW5kZXgpID0+IGV2ZXJ5T25BeGlzKG91dHB1dHMsIGF4aXNJbmRleGVzLCBheGlzSW5kZXgsIGlzUmFua1Bvc2l0aW9uKSk7XG59XG5cbi8vIEhvdyBhIGNoYXJ0IHRoYXQgcGxvdHMgYSBwcmlvciBzZXJpZXMgY29sb3JzIGVhY2ggc2VyaWVzLCBmb3IgdGhlXG4vLyBQb3dlclBvaW50IGV4cG9ydDogZXZlcnkgc2VyaWVzJyBjb2xvciBhcyBiYXJlIGhleCwgYSBwcmlvciB0YWtpbmcgaXRzXG4vLyBjdXJyZW50IHNlcmllcycgY29sb3IgYW5kIG5vIHBhbGV0dGUgY29sb3Igb2YgaXRzIG93biAoYW5ub3RhdGVkQ29sb3JzKSxcbi8vIGFuZCB3aGljaCBzZXJpZXMgYXJlIHByaW9ycywgd2hpY2ggYSBsaW5lIGRyYXdzIGRhc2hlZC4gbnVsbCB3aGVuIHRoZSBjaGFydFxuLy8gcGxvdHMgbm8gcHJpb3Igc2VyaWVzLCBhbmQgb24gYSBjb2xvckJ5IGNoYXJ0OyBpdHMgc2VyaWVzIGtlZXAgc2VyaWVzSGV4LlxuZXhwb3J0IGZ1bmN0aW9uIHByaW9yU2VyaWVzU3R5bGVzKFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBkYXRhOiBDb21wb25lbnREYXRhLFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuKTogeyBjb2xvcnM6IHN0cmluZ1tdOyBwcmlvcnM6IGJvb2xlYW5bXSB9IHwgbnVsbCB7XG4gIGNvbnN0IGFubm90YXRpb25zID0gY2hhcnRBbm5vdGF0aW9ucyhjb25maWcsIGRhdGEsIGV4dHJhY3RlZCwgaXNDb2xvckJ5KGNvbmZpZykpO1xuXG4gIGlmICghYW5ub3RhdGlvbnM/LmNvbG9ycyB8fCAhYW5ub3RhdGlvbnMucHJpb3JTZXJpZXMuc29tZSgocHJpb3IpID0+IHByaW9yKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb2xvcnM6IGFubm90YXRpb25zLmNvbG9ycy5tYXAoKGNvbG9yKSA9PiBjb2xvci5yZXBsYWNlKCcjJywgJycpKSxcbiAgICBwcmlvcnM6IGFubm90YXRpb25zLnByaW9yU2VyaWVzLFxuICB9O1xufVxuXG4vLyBXaGljaCB2YWx1ZSBheGVzLCBieSBpbmRleCwgcGxvdCBub3RoaW5nIGJ1dCByYW5rcywgd2hpY2ggdGhlIGNoYXJ0IGRyYXdzXG4vLyBpbnZlcnRlZCB3aXRoIHJhbmsgMSBhdCB0aGUgdG9wLiBTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludCBleHBvcnQuXG5leHBvcnQgZnVuY3Rpb24gcmFua1ZhbHVlQXhlcyhleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLCBkYXRhOiBDb21wb25lbnREYXRhLCBjb25maWc6IENoYXJ0Q29uZmlnKTogYm9vbGVhbltdIHtcbiAgcmV0dXJuIHJhbmtBeGlzRmxhZ3MoXG4gICAgZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gZGF0YS5vdXRwdXRzPy5bc2VyaWVzLm1lYXN1cmUuY29sdW1uXSA/PyBudWxsKSxcbiAgICBzZXJpZXNBeGlzSW5kZXhlcyhleHRyYWN0ZWQsIGNvbmZpZyksXG4gICk7XG59XG5cbi8vIFdoZXRoZXIgYW4gYXhpcyBoYXMgc2VyaWVzIGFuZCBldmVyeSBvbmUgb2YgdGhlbSBwYXNzZXMgdGhlIHRlc3QuXG5mdW5jdGlvbiBldmVyeU9uQXhpcyhcbiAgb3V0cHV0czogKE91dHB1dE1ldGEgfCBudWxsKVtdLFxuICBheGlzSW5kZXhlczogVmFsdWVBeGlzSW5kZXhbXSxcbiAgYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCxcbiAgdGVzdDogKG91dHB1dDogT3V0cHV0TWV0YSkgPT4gYm9vbGVhbixcbik6IGJvb2xlYW4ge1xuICBjb25zdCBvbkF4aXMgPSBvdXRwdXRzLmZpbHRlcigoXywgaW5kZXgpID0+IGF4aXNJbmRleGVzW2luZGV4XSA9PT0gYXhpc0luZGV4KTtcblxuICByZXR1cm4gb25BeGlzLmxlbmd0aCA+IDAgJiYgb25BeGlzLmV2ZXJ5KChvdXRwdXQpID0+ICEhb3V0cHV0ICYmIHRlc3Qob3V0cHV0KSk7XG59XG5cbi8vIEEgc2hhcmUgYW5kIGEgcGVyY2VudCBjaGFuZ2UgYXJlIDAtMSBmcmFjdGlvbnMsIHdoYXRldmVyIHBlcmNlbnRGb3JtYXQgc2F5cy5cbmZ1bmN0aW9uIGlzRnJhY3Rpb25PdXRwdXQob3V0cHV0OiBPdXRwdXRNZXRhKTogYm9vbGVhbiB7XG4gIHJldHVybiBvdXRwdXQua2luZCA9PT0gJ3NoYXJlJyB8fCBvdXRwdXQucm9sZSA9PT0gJ3BlcmNlbnRfY2hhbmdlJztcbn1cblxuLy8gQSB2YWx1ZSBheGlzJ3MgdGljayBsYWJlbHMgd2hlbiBldmVyeSBzZXJpZXMgb24gaXQgaXMgYSBjaGFuZ2Ugb2YgYSByYXRlXG4vLyAoYSBzaGFyZSdzLCBvciBhIHBlcmNlbnQtZm9ybWF0IHZhbHVlJ3MpOiBzaWduZWQgcGVyY2VudGFnZSBwb2ludHMsIGFzIHRoZVxuLy8gc2VyaWVzJyB0b29sdGlwcyBhbmQgZGF0YSBsYWJlbHMgd3JpdGUgdGhlbSAoJys1LjAgcHAnKS4gbnVsbCBmb3IgYW55IG90aGVyXG4vLyBheGlzLlxuZnVuY3Rpb24gcG9pbnRzQXhpc0xhYmVsKFxuICBhbm5vdGF0aW9uczogQ2hhcnRBbm5vdGF0aW9ucyxcbiAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10sXG4gIGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXgsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBWYWx1ZUF4aXNMYWJlbCB8IG51bGwge1xuICBjb25zdCBvbkF4aXMgPSBleHRyYWN0ZWQuc2VyaWVzXG4gICAgLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KVxuICAgIC5maWx0ZXIoKGluZGV4KSA9PiBheGlzSW5kZXhlc1tpbmRleF0gPT09IGF4aXNJbmRleCk7XG4gIGNvbnN0IHBvaW50cyA9IG9uQXhpcy5sZW5ndGggPiAwICYmIG9uQXhpcy5ldmVyeSgoaW5kZXgpID0+IGlzUG9pbnRzQ2hhbmdlKFxuICAgIGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdLFxuICAgIG91dHB1dEF4aXNNZWFzdXJlKGV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdLm1lYXN1cmUsIGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdLCBhbm5vdGF0aW9ucy5tZWFzdXJlU3BlY3NbaW5kZXhdKSxcbiAgKSk7XG5cbiAgaWYgKCFwb2ludHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHdyaXRlID0gb3V0cHV0V3JpdGVyKGFubm90YXRpb25zLCBvbkF4aXNbMF0sIGV4dHJhY3RlZC5zZXJpZXNbb25BeGlzWzBdXS5tZWFzdXJlLCBjb250ZXh0KTtcblxuICByZXR1cm4geyBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiB3cml0ZSh2YWx1ZSkgfTtcbn1cblxuLy8gQSBjaGFuZ2Ugb2YgYSByYXRlLCB3aGljaCBwcmludHMgaW4gcGVyY2VudGFnZSBwb2ludHM6IGEgc2hhcmUncyBjaGFuZ2UsIG9yXG4vLyB0aGUgY2hhbmdlIG9mIGEgdmFsdWUgd2hvc2UgZm9ybWF0IChpdHMgc2xvdCdzLCBlbHNlIGl0cyBtZWFzdXJlJ3MpIGlzIGFcbi8vIHBlcmNlbnQuXG5mdW5jdGlvbiBpc1BvaW50c0NoYW5nZShvdXRwdXQ6IE91dHB1dE1ldGEgfCBudWxsLCBheGlzTWVhc3VyZTogQ2hhcnRNZWFzdXJlKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIW91dHB1dCAmJiBvdXRwdXQucm9sZSA9PT0gJ2NoYW5nZScgJiYgb3V0cHV0LmtpbmQgIT09ICdyYW5rJ1xuICAgICYmIChvdXRwdXQua2luZCA9PT0gJ3NoYXJlJyB8fCBheGlzTWVhc3VyZS5mb3JtYXQgPT09IFJlcG9ydFZhbHVlRm9ybWF0LlBlcmNlbnQpO1xufVxuXG4vLyBBIHJhbmssIGN1cnJlbnQgb3IgcHJpb3I7IGEgcmFuayBjaGFuZ2UgaXMgYSBkaWZmZXJlbmNlLCBub3QgYSBwb3NpdGlvbi5cbmZ1bmN0aW9uIGlzUmFua1Bvc2l0aW9uKG91dHB1dDogT3V0cHV0TWV0YSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb3V0cHV0LmtpbmQgPT09ICdyYW5rJyAmJiBvdXRwdXQucm9sZSAhPT0gJ2NoYW5nZSc7XG59XG5cbmZ1bmN0aW9uIGFubm90YXRlZENoYXJ0VG9vbHRpcChzb3VyY2U6IEFubm90YXRlZFRvb2x0aXBTb3VyY2UgfCBudWxsKSB7XG4gIHJldHVybiBzb3VyY2VcbiAgICA/IHtcbiAgICAgIHRyaWdnZXI6ICdheGlzJyBhcyBjb25zdCxcbiAgICAgIGZvcm1hdHRlcjogKHBhcmFtczogVG9vbHRpcENvbXBvbmVudEZvcm1hdHRlckNhbGxiYWNrUGFyYW1zKSA9PiBhbm5vdGF0ZWRUb29sdGlwKHBhcmFtcywgc291cmNlKSxcbiAgICB9XG4gICAgOiBudWxsO1xufVxuXG4vLyBUaGUgcGVyaW9kLCB3aXRoICd0byBkYXRlJyB3aGVuIGl0IGlzIG5vdCBvdmVyIHlldCwgdGhlbiBlYWNoIHNlcmllcyBzaG93blxuLy8gKGEgbGVnZW5kIGNhbiBoaWRlIHNvbWUpOiBpdHMgdmFsdWUgd3JpdHRlbiBieSB3aGF0IGl0IGlzLCBhbmQgd2hhdCBpdFxuLy8gY292ZXJzLiBBIHBhcnRpYWwgc2VnbWVudCBzcGVha3MgZm9yIGl0cyBzZXJpZXMuIE5hbWVzIGFuZCB2YWx1ZXMgY29tZSBmcm9tXG4vLyB0aGUgZGF0YSBhbmQgdGhlIGNvbmZpZywgYW5kIEVDaGFydHMgc2V0cyB0aGUgdG9vbHRpcCBhcyBIVE1MLCBzbyBib3RoIGFyZVxuLy8gZXNjYXBlZC5cbmZ1bmN0aW9uIGFubm90YXRlZFRvb2x0aXAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMsIHNvdXJjZTogQW5ub3RhdGVkVG9vbHRpcFNvdXJjZSk6IHN0cmluZyB7XG4gIGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zIDogW3BhcmFtc107XG4gIGNvbnN0IGRhdGFJbmRleCA9IGl0ZW1zWzBdPy5kYXRhSW5kZXggPz8gMDtcbiAgY29uc3QgY291bnQgPSBzb3VyY2UuZXh0cmFjdGVkLnNlcmllcy5sZW5ndGg7XG4gIGNvbnN0IG1hcmtlcnMgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHNlcmllc0luZGV4ID0gaXRlbS5zZXJpZXNJbmRleCA/PyAtMTtcbiAgICBjb25zdCBvd25lciA9IHNlcmllc0luZGV4IDwgY291bnQgPyBzZXJpZXNJbmRleCA6IHNvdXJjZS5vd25lcnNbc2VyaWVzSW5kZXggLSBjb3VudF07XG5cbiAgICBpZiAob3duZXIgIT09IHVuZGVmaW5lZCAmJiBvd25lciA+PSAwICYmICFtYXJrZXJzLmhhcyhvd25lcikpIHtcbiAgICAgIG1hcmtlcnMuc2V0KG93bmVyLCB0eXBlb2YgaXRlbS5tYXJrZXIgPT09ICdzdHJpbmcnID8gaXRlbS5tYXJrZXIgOiAnJyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmFtZWRQcmlvcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgbGluZXMgPSBbLi4ubWFya2Vycy5lbnRyaWVzKCldXG4gICAgLnNvcnQoKFtmaXJzdF0sIFtzZWNvbmRdKSA9PiBmaXJzdCAtIHNlY29uZClcbiAgICAubWFwKChbaW5kZXgsIG1hcmtlcl0pID0+IGFubm90YXRlZFRvb2x0aXBMaW5lKHNvdXJjZSwgaW5kZXgsIGRhdGFJbmRleCwgbWFya2VyLCBuYW1lZFByaW9ycykpO1xuXG4gIHJldHVybiBbYW5ub3RhdGVkVG9vbHRpcEhlYWRpbmcoc291cmNlLCBkYXRhSW5kZXgpLCAuLi5saW5lc10uam9pbignPGJyLz4nKTtcbn1cblxuZnVuY3Rpb24gYW5ub3RhdGVkVG9vbHRpcEhlYWRpbmcoc291cmNlOiBBbm5vdGF0ZWRUb29sdGlwU291cmNlLCBkYXRhSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGNhdGVnb3J5ID0gc291cmNlLmV4dHJhY3RlZC5jYXRlZ29yaWVzW2RhdGFJbmRleF0gPz8gJyc7XG4gIGNvbnN0IHBlcmlvZCA9IHNvdXJjZS5ncmFudWxhcml0eVxuICAgID8gZm9ybWF0UGVyaW9kTGFiZWwoY2F0ZWdvcnksIHNvdXJjZS5ncmFudWxhcml0eSwgdHJ1ZSwgc291cmNlLmNvbnRleHQubG9jYWxlLCBzb3VyY2UuZGF0ZUxhYmVsKVxuICAgIDogY2F0ZWdvcnk7XG5cbiAgcmV0dXJuIGVzY2FwZUh0bWwoZGF0YUluZGV4ID09PSBzb3VyY2UuYW5ub3RhdGlvbnMucGFydGlhbEluZGV4ID8gYCR7cGVyaW9kfSAoJHtQQVJUSUFMX1BFUklPRF9URVhUfSlgIDogcGVyaW9kKTtcbn1cblxuLy8gJ+KXjyBSZXZlbnVlICh2cyBwcmV2aW91cyBtb250aCk6ICQ4MTMgwrcgQXVnIDEg4oCTIDE1LCAyMDI2JywgYW5kIHdoeSBhIHZhbHVlXG4vLyByZWFkcyAn4oCUJyBvciAnbi9hJyB3aGVuIGl0IGRvZXMgKCdObyBiYXNlbGluZTogbm8gZGF0YSBiZWZvcmUgSnVuIDEwLCAyMDI2JykuXG4vLyBBIHZhbHVlIGNvbXBhcmVkIHdpdGggYSBwcmlvciB0aGUgY2hhcnQgZG9lcyBub3QgcGxvdCBuYW1lcyB0aGF0IHByaW9yXG4vLyBvbmNlLCBvbiB0aGUgZmlyc3QgbGluZSBzaG93biB0aGF0IGlzIGNvbXBhcmVkIHdpdGggaXQ6ICdSYXRlICUgY2hhbmdlICh2c1xuLy8gcHJldmlvdXMgbW9udGgpOiAtMTAlIMK3IHZzIDUwJSAoU2VwIDEg4oCTIDIsIDIwMjYpJy4gbmFtZWRQcmlvcnMgaG9sZHMgdGhlXG4vLyBwcmlvcnMgYWxyZWFkeSBuYW1lZC5cbmZ1bmN0aW9uIGFubm90YXRlZFRvb2x0aXBMaW5lKFxuICBzb3VyY2U6IEFubm90YXRlZFRvb2x0aXBTb3VyY2UsXG4gIGluZGV4OiBudW1iZXIsXG4gIGRhdGFJbmRleDogbnVtYmVyLFxuICBtYXJrZXI6IHN0cmluZyxcbiAgbmFtZWRQcmlvcnM6IFNldDxzdHJpbmc+LFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VyaWVzID0gc291cmNlLmV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdO1xuICBjb25zdCB2YWx1ZSA9IHNlcmllcy52YWx1ZXNbZGF0YUluZGV4XSA/PyBudWxsO1xuICBjb25zdCBmb3JtYXR0ZWQgPSBzb3VyY2UuYW5ub3RhdGlvbnMub3V0cHV0c1tpbmRleF1cbiAgICA/IG91dHB1dFZhbHVlKHNvdXJjZS5hbm5vdGF0aW9ucywgaW5kZXgsIHNlcmllcy5tZWFzdXJlLCBzb3VyY2UuY29udGV4dCkodmFsdWUsIGRhdGFJbmRleClcbiAgICA6IHsgdGV4dDogc2VyaWVzVG9vbHRpcChzZXJpZXMubWVhc3VyZSwgc291cmNlLmNvbnRleHQpLnZhbHVlRm9ybWF0dGVyKHZhbHVlKSwgdGl0bGU6IG51bGwgfTtcbiAgY29uc3QgbGFuZVByaW9yID0gc291cmNlLmFubm90YXRpb25zLmxhbmVQcmlvcnNbaW5kZXhdO1xuICBjb25zdCBjb21wYXJlZCA9IGxhbmVQcmlvciAmJiAhbmFtZWRQcmlvcnMuaGFzKGxhbmVQcmlvci5rZXkpXG4gICAgPyBjb21wYXJlZFByaW9yRGV0YWlsKHNvdXJjZSwgaW5kZXgsIGxhbmVQcmlvciwgZGF0YUluZGV4KVxuICAgIDogJyc7XG4gIGlmIChsYW5lUHJpb3IpIHtcbiAgICBuYW1lZFByaW9ycy5hZGQobGFuZVByaW9yLmtleSk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IFtmb3JtYXR0ZWQudGV4dCwgc2VyaWVzRGV0YWlsKHNvdXJjZSwgaW5kZXgsIGRhdGFJbmRleCksIGNvbXBhcmVkLCBmb3JtYXR0ZWQudGl0bGUgPz8gJyddO1xuXG4gIHJldHVybiBgJHttYXJrZXJ9ICR7ZXNjYXBlSHRtbChzZXJpZXMubmFtZSl9OiAke2VzY2FwZUh0bWwocGFydHMuZmlsdGVyKChwYXJ0KSA9PiAhIXBhcnQpLmpvaW4oVE9PTFRJUF9ERVRBSUxfU0VQQVJBVE9SKSl9YDtcbn1cblxuLy8gVGhlIHByaW9yIGEgdmFsdWUgaXMgY29tcGFyZWQgd2l0aCwgd2hlbiB0aGUgY2hhcnQgZG9lcyBub3QgcGxvdCBpdDogaXRzXG4vLyB2YWx1ZSBpbiBpdHMgbWVhc3VyZSdzIGZvcm1hdCwgYW5kIGl0cyBkYXlzICgndnMgNTAlIChTZXAgMSDigJMgMiwgMjAyNiknKS5cbi8vIFRoZSBtZWFzdXJlJ3MgZm9ybWF0IGlzIHRoZSBjdXJyZW50IHNlcmllcycgd2hlbiB0aGUgY2hhcnQgcGxvdHMgaXQsIGVsc2Vcbi8vIGEgY2hhbmdlIHNsb3QncyBvd24gZXhwbGljaXQgZm9ybWF0IChhIGNoYW5nZSBpcyBpbiBpdHMgbWVhc3VyZSdzIHVuaXRzKS5cbmZ1bmN0aW9uIGNvbXBhcmVkUHJpb3JEZXRhaWwoXG4gIHNvdXJjZTogQW5ub3RhdGVkVG9vbHRpcFNvdXJjZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgbGFuZVByaW9yOiBMYW5lUHJpb3IsXG4gIGRhdGFJbmRleDogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgYW5ub3RhdGlvbnMgPSBzb3VyY2UuYW5ub3RhdGlvbnM7XG4gIGNvbnN0IG1lYXN1cmUgPSBzb3VyY2UuZXh0cmFjdGVkLnNlcmllc1tpbmRleF0ubWVhc3VyZTtcbiAgY29uc3QgbWVhc3VyZVNwZWMgPSBhbm5vdGF0aW9ucy5tZWFzdXJlU3BlY3NbaW5kZXhdXG4gICAgPz8gKGFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdPy5yb2xlICE9PSAncGVyY2VudF9jaGFuZ2UnICYmIG5hbWVzVmFsdWVGb3JtYXQobWVhc3VyZSkgPyBtZWFzdXJlIDogbnVsbCk7XG4gIGNvbnN0IHRleHQgPSBmb3JtYXRPdXRwdXRWYWx1ZShsYW5lUHJpb3IudmFsdWVzW2RhdGFJbmRleF0gPz8gbnVsbCwgbGFuZVByaW9yLm91dHB1dCwgbnVsbCwgc291cmNlLmNvbnRleHQsIHtcbiAgICBtZWFzdXJlU3BlYyxcbiAgICBmbG9vcjogYW5ub3RhdGlvbnMuY29tcGFyaXNvbj8uZmxvb3IgPz8gbnVsbCxcbiAgfSkudGV4dDtcbiAgY29uc3Qgd2luZG93ID0gcHJpb3JEZXRhaWwoc291cmNlLCBsYW5lUHJpb3Iub3V0cHV0LCBkYXRhSW5kZXgpO1xuXG4gIHJldHVybiB3aW5kb3cgPyBgJHtDT01QQVJFRF9QUklPUl9QUkVGSVh9ICR7dGV4dH0gKCR7d2luZG93fSlgIDogYCR7Q09NUEFSRURfUFJJT1JfUFJFRklYfSAke3RleHR9YDtcbn1cblxuLy8gV2hhdCBhIHNlcmllcycgdmFsdWUgY292ZXJzLCB3aGVuIHRoZSBzZXJ2ZXIgc2F5czogYSBwcmlvcidzIGRheXMsIG9yIGFcbi8vIHdpbmRvd2VkIHZhbHVlJ3Mgd2luZG93ICgnUm9sbGluZyAzLW1vbnRoIHRvdGFsJyksIHdob3NlIGRheXMgdGhlIG5vdGVcbi8vIHVuZGVyIHRoZSBjaGFydCBuYW1lcy5cbmZ1bmN0aW9uIHNlcmllc0RldGFpbChzb3VyY2U6IEFubm90YXRlZFRvb2x0aXBTb3VyY2UsIGluZGV4OiBudW1iZXIsIGRhdGFJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3Qgb3V0cHV0ID0gc291cmNlLmFubm90YXRpb25zLm91dHB1dHNbaW5kZXhdO1xuICBjb25zdCB3aW5kb3cgPSBzb3VyY2UuYW5ub3RhdGlvbnMud2luZG93c1tpbmRleF07XG5cbiAgaWYgKG91dHB1dD8ucm9sZSA9PT0gJ3ByaW9yJykge1xuICAgIHJldHVybiBwcmlvckRldGFpbChzb3VyY2UsIG91dHB1dCwgZGF0YUluZGV4KTtcbiAgfVxuXG4gIHJldHVybiB3aW5kb3cgPyB3aW5kb3dUZXh0KHsgLi4ud2luZG93LCBzdGFydDogbnVsbCwgZW5kOiBudWxsIH0sIHNvdXJjZS5jb250ZXh0LmxvY2FsZSwgc291cmNlLmdyYW51bGFyaXR5KSA6ICcnO1xufVxuXG4vLyBBIHByaW9yIHZhbHVlJ3MgZGF5cy4gQSByYW5nZSBjb21wYXJpc29uIGNvbXBhcmVzIGV2ZXJ5IHBvaW50IHdpdGggdGhlXG4vLyBzYW1lIHdpbmRvdy4gQSBzZXJpZXMgY29tcGFyaXNvbiBjb21wYXJlcyBlYWNoIHBlcmlvZCB3aXRoIHRoZSBwZXJpb2QgaXRzXG4vLyBsYW5lJ3Mgb2Zmc2V0IGJhY2s7IGEgcGVyaW9kX2VuZCBjb21wYXJpc29uIHJlYWRzIHRoZSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHRoYXRcbi8vIHBlcmlvZCAoJ29uIEF1ZyAzMSwgMjAyNicpLlxuZnVuY3Rpb24gcHJpb3JEZXRhaWwoc291cmNlOiBBbm5vdGF0ZWRUb29sdGlwU291cmNlLCBvdXRwdXQ6IE91dHB1dE1ldGEsIGRhdGFJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgY29tcGFyaXNvbiA9IHNvdXJjZS5hbm5vdGF0aW9ucy5jb21wYXJpc29uO1xuICBjb25zdCBsYW5lID0gKG91dHB1dC5vZmZzZXQgPz8gMSkgLSAxO1xuICBjb25zdCBvZmZzZXQgPSBjb21wYXJpc29uPy5vZmZzZXRzPy5bbGFuZV07XG4gIGNvbnN0IGxvY2FsZSA9IHNvdXJjZS5jb250ZXh0LmxvY2FsZTtcblxuICBpZiAoIWNvbXBhcmlzb24gfHwgIW9mZnNldCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChjb21wYXJpc29uLm1vZGUgPT09ICdyYW5nZScgfHwgIXNvdXJjZS5ncmFudWxhcml0eSkge1xuICAgIGNvbnN0IHByaW9yID0gY29tcGFyaXNvbi5wcmlvcnM/LltsYW5lXTtcblxuICAgIHJldHVybiBwcmlvciA/IGZvcm1hdERheVdpbmRvdyhwcmlvciwgY29tcGFyaXNvbi50aW1lem9uZSwgbG9jYWxlKSA6ICcnO1xuICB9XG5cbiAgY29uc3QgcGFydGlhbCA9IGRhdGFJbmRleCA9PT0gc291cmNlLmFubm90YXRpb25zLnBhcnRpYWxJbmRleCAmJiBjb21wYXJpc29uLmFsaWduID09PSAndG9fZGF0ZSc7XG4gIGNvbnN0IHRvZGF5ID0gcGFydGlhbCA/IHpvbmVUb2RheShjb21wYXJpc29uLnRpbWV6b25lKSA6IG51bGw7XG4gIGNvbnN0IHdpbmRvdyA9IHByaW9yUGVyaW9kV2luZG93KHNvdXJjZS5leHRyYWN0ZWQuY2F0ZWdvcmllc1tkYXRhSW5kZXhdID8/ICcnLCBzb3VyY2UuZ3JhbnVsYXJpdHksIG9mZnNldCwgdG9kYXkpO1xuXG4gIGlmICghd2luZG93KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGNvbXBhcmlzb24ubW9kZSA9PT0gJ3BlcmlvZF9lbmQnKSB7XG4gICAgcmV0dXJuIGBvbiAke2Zvcm1hdERheVJhbmdlKHdpbmRvdy5lbmQsIHdpbmRvdy5lbmQsIGxvY2FsZSl9YDtcbiAgfVxuXG4gIHJldHVybiBmb3JtYXREYXlXaW5kb3coXG4gICAgeyAuLi53aXRoaW5MYW5lU3Bhbih3aW5kb3csIGNvbXBhcmlzb24ucHJpb3JzPy5bbGFuZV0pLCB0aHJvdWdoOiBwYXJ0aWFsID8gY29tcGFyaXNvbi5jdXJyZW50Py50aHJvdWdoID8/IG51bGwgOiBudWxsIH0sXG4gICAgY29tcGFyaXNvbi50aW1lem9uZSxcbiAgICBsb2NhbGUsXG4gICk7XG59XG5cbi8vIEEgc2VyaWVzIGxhbmUgcmVhZHMgdGhlIHNwYW4gc2hvd24gbW92ZWQgYmFjayBieSBpdHMgb2Zmc2V0ICh0aGUgc2VydmVyJ3Ncbi8vIGNvbXBhcmlzb24ucHJpb3JzW2xhbmVdKSwgc28gdGhlIGVhcmxpZXIgY29weSBvZiBhIHBlcmlvZCB0aGUgc3BhbiBzdGFydHNcbi8vIG9yIGVuZHMgaW5zaWRlIGhvbGRzIG9ubHkgdGhlIGRheXMgd2l0aGluIGl0OiBhIHNwYW4gZnJvbSBNYXIgMTUgc2V0c1xuLy8gTWFyY2ggYWdhaW5zdCBGZWIgMTUg4oCTIDI4LCBub3QgdGhlIHdob2xlIG9mIEZlYnJ1YXJ5LlxuZnVuY3Rpb24gd2l0aGluTGFuZVNwYW4oXG4gIHdpbmRvdzogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9LFxuICBzcGFuOiBDb21wYXJpc29uV2luZG93IHwgdW5kZWZpbmVkLFxuKTogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9IHtcbiAgaWYgKCFzcGFuKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gd2luZG93LnN0YXJ0IDwgc3Bhbi5zdGFydCA/IHNwYW4uc3RhcnQgOiB3aW5kb3cuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IHdpbmRvdy5lbmQgPiBzcGFuLmVuZCA/IHNwYW4uZW5kIDogd2luZG93LmVuZDtcblxuICByZXR1cm4gc3RhcnQgPD0gZW5kID8geyBzdGFydCwgZW5kIH0gOiB3aW5kb3c7XG59XG5cbi8vIFRoZSBkYXlzIG9uZSBwZXJpb2Qgb2YgdGhlIGF4aXMgaXMgY29tcGFyZWQgd2l0aDogdGhlIHBlcmlvZCBtb3ZlZCBiYWNrIGJ5XG4vLyB0aGUgbGFuZSdzIG9mZnNldC4gQSBwZXJpb2Qgbm90IG92ZXIgeWV0LCBjb21wYXJlZCB0byBkYXRlLCBydW5zIG9ubHkgdG9cbi8vIHRvZGF5IG1vdmVkIGJhY2sgKHByaW9yVG9EYXRlRW5kKS4gbnVsbCBmb3IgYSBjYXRlZ29yeSB0aGF0IGlzIG5vdCBhIGRheSxcbi8vIG9yIGFuIG9mZnNldCB3aXRob3V0IGEgdW5pdCAoYSBjdXN0b20gcmFuZ2UpLlxuZnVuY3Rpb24gcHJpb3JQZXJpb2RXaW5kb3coXG4gIGNhdGVnb3J5OiBzdHJpbmcsXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LFxuICBvZmZzZXQ6IENvbXBhcmlzb25PZmZzZXQsXG4gIHRvZGF5OiBEYXRlIHwgbnVsbCxcbik6IHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfSB8IG51bGwge1xuICBjb25zdCBzdGFydCA9IHBhcnNlSVNPKGNhdGVnb3J5KTtcbiAgY29uc3QgdW5pdCA9IG9mZnNldC51bml0O1xuICBjb25zdCBjb3VudCA9IG9mZnNldC5jb3VudDtcblxuICBpZiAoIWlzVmFsaWQoc3RhcnQpIHx8ICF1bml0IHx8ICFjb3VudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgYmFjayA9IChkYXRlOiBEYXRlKSA9PiBhZGRQZXJpb2RzKGRhdGUsIHVuaXQsIC1jb3VudCk7XG4gIGNvbnN0IGZ1bGxFbmQgPSBhZGREYXlzKGJhY2soYWRkUGVyaW9kcyhzdGFydCwgZ3JhbnVsYXJpdHksIDEpKSwgLTEpO1xuICBjb25zdCBlbmQgPSB0b2RheSA/IGVhcmxpZXN0T2YoW2Z1bGxFbmQsIHByaW9yVG9EYXRlRW5kKHRvZGF5LCBzdGFydCwgYmFjaywgdW5pdCldKSA6IGZ1bGxFbmQ7XG5cbiAgcmV0dXJuIHsgc3RhcnQ6IGNhbGVuZGFyRGF5KGJhY2soc3RhcnQpKSwgZW5kOiBjYWxlbmRhckRheShsYXRlc3RPZihbZW5kLCBiYWNrKHN0YXJ0KV0pKSB9O1xufVxuXG4vLyBUb2RheSwga2VwdCBpbnNpZGUgdGhlIHBlcmlvZCwgbW92ZWQgYmFjayBieSB0aGUgb2Zmc2V0OyB3aGVuIHRvZGF5IGlzIHRoZVxuLy8gbGFzdCBkYXkgb2YgaXRzIG1vbnRoLCB0aGUgbGFzdCBkYXkgb2YgdGhlIG1vbnRoIGl0IGxhbmRzIGluICh0aGVcbi8vIHNlcnZlcidzIGVuZC1vZi1tb250aCBydWxlOiBTZXAgMzAgY29tcGFyZXMgd2l0aCBBdWcgMzEsIG5vdCBBdWcgMzApLlxuZnVuY3Rpb24gcHJpb3JUb0RhdGVFbmQoXG4gIHRvZGF5OiBEYXRlLFxuICBwZXJpb2RTdGFydDogRGF0ZSxcbiAgYmFjazogKGRhdGU6IERhdGUpID0+IERhdGUsXG4gIHVuaXQ6IENoYXJ0R3JhbnVsYXJpdHksXG4pOiBEYXRlIHtcbiAgY29uc3QgZGF5ID0gbGF0ZXN0T2YoW3N0YXJ0T2ZEYXkodG9kYXkpLCBwZXJpb2RTdGFydF0pO1xuICBjb25zdCBtb3ZlZCA9IGJhY2soZGF5KTtcblxuICByZXR1cm4gaXNMYXN0RGF5T2ZNb250aChkYXkpICYmIHVuaXQgIT09ICdkYXknICYmIHVuaXQgIT09ICd3ZWVrJyA/IGVuZE9mTW9udGgobW92ZWQpIDogbW92ZWQ7XG59XG5cbmZ1bmN0aW9uIGFkZFBlcmlvZHMoZGF0ZTogRGF0ZSwgdW5pdDogQ2hhcnRHcmFudWxhcml0eSwgY291bnQ6IG51bWJlcik6IERhdGUge1xuICBzd2l0Y2ggKHVuaXQpIHtcbiAgICBjYXNlICdkYXknOlxuICAgICAgcmV0dXJuIGFkZERheXMoZGF0ZSwgY291bnQpO1xuICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgcmV0dXJuIGFkZFdlZWtzKGRhdGUsIGNvdW50KTtcbiAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgIHJldHVybiBhZGRRdWFydGVycyhkYXRlLCBjb3VudCk7XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4gYWRkWWVhcnMoZGF0ZSwgY291bnQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIGNvdW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxlbmRhckRheShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZvcm1hdElTTyhkYXRlLCB7IHJlcHJlc2VudGF0aW9uOiAnZGF0ZScgfSk7XG59XG5cbi8vIFRvZGF5J3MgY2FsZW5kYXIgZGF5IGluIHRoZSByZXBvcnQncyB6b25lLCBhcyBsb2NhbCBtaWRuaWdodC4gVGhlIHNlcnZlclxuLy8gbWFya3Mgd2hpY2ggcGVyaW9kIGhvbGRzIHRvZGF5IChwYXJ0aWFsUGVyaW9kKSBidXQgbm90IHRoZSBkYXkgaXRzZWxmOyB0aGVcbi8vIHByaW9yIG9mIHRoYXQgcGVyaW9kIGlzIGNsaXBwZWQgYXQgdGhlIHNhbWUgZGF5LiBBbiB1bmtub3duIHpvbmUgcmVhZHMgdGhlXG4vLyBicm93c2VyJ3Mgb3duIGRheS5cbmZ1bmN0aW9uIHpvbmVUb2RheSh0aW1lem9uZTogc3RyaW5nKTogRGF0ZSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFydHMgPSBkYXRlRm9ybWF0KCdlbi1VUycsIHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ251bWVyaWMnLCBkYXk6ICdudW1lcmljJyB9LCB0aW1lem9uZSlcbiAgICAgIC5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKCkpO1xuICAgIGNvbnN0IHBhcnQgPSAodHlwZTogSW50bC5EYXRlVGltZUZvcm1hdFBhcnRUeXBlcykgPT4gTnVtYmVyKHBhcnRzLmZpbmQoKGZvdW5kKSA9PiBmb3VuZC50eXBlID09PSB0eXBlKT8udmFsdWUpO1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUocGFydCgneWVhcicpLCBwYXJ0KCdtb250aCcpIC0gMSwgcGFydCgnZGF5JykpO1xuXG4gICAgaWYgKGlzVmFsaWQodG9kYXkpKSB7XG4gICAgICByZXR1cm4gdG9kYXk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBBbiB1bmtub3duIHpvbmU6IHRoZSBicm93c2VyJ3MgZGF5IGJlbG93LlxuICB9XG5cbiAgcmV0dXJuIHN0YXJ0T2ZEYXkobmV3IERhdGUoKSk7XG59XG5cbi8vIEEgY29sb3JCeSBjaGFydCdzIHN0YXRpc3RpYyBsaW5lOiBvbmUgbGluZSBvdmVyIGV2ZXJ5IGJhciwgaHVuZyBvZmYgdGhlXG4vLyBmaXJzdCBzZXJpZXMgYW5kIGRyYXduIGluIHRoZSByZWZlcmVuY2Ugc2xhdGUsIGFzIG5vIG9uZSBjYXRlZ29yeSdzIGNvbG9yXG4vLyBzcGVha3MgZm9yIHRoZSBvdGhlcnMuXG5mdW5jdGlvbiBjb2xvckJ5U3RhdExpbmUoXG4gIGZpcnN0OiBTZXJpZXNPcHRpb24sXG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIHdyaXRlPzogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyxcbik6IFNlcmllc09wdGlvbiB7XG4gIGNvbnN0IG1lYXN1cmUgPSBleHRyYWN0ZWQuc2VyaWVzWzBdPy5tZWFzdXJlO1xuICBjb25zdCBzdGF0ID0gbWVhc3VyZU1hcmtTdGF0KG1lYXN1cmUpO1xuICBjb25zdCBtYXJrTGluZSA9IHN0YXQgJiYgc3RhdE1hcmtMaW5lKFxuICAgIGNvbG9yQnlWYWx1ZXMoZXh0cmFjdGVkKSxcbiAgICBzdGF0LFxuICAgIHdyaXRlID8/IG1lYXN1cmVXcml0ZXIobWVhc3VyZSwgY29udGV4dCksXG4gICAgYCMke1JFUE9SVF9SRUZFUkVOQ0VfQ09MT1J9YCxcbiAgKTtcblxuICByZXR1cm4gbWFya0xpbmUgPyB7IC4uLmZpcnN0LCBtYXJrTGluZSB9IGFzIFNlcmllc09wdGlvbiA6IGZpcnN0O1xufVxuXG4vLyBBIHNlcmllcycgc3RhdGlzdGljIGxpbmUgYWNyb3NzIHRoZSBwbG90LCBsYWJlbGVkIHdpdGggdGhlIHN0YXRpc3RpYyBhbmRcbi8vIGl0cyB2YWx1ZSAoJ0F2ZXJhZ2U6IDEsMjM0LjUnKSwgb3IgdW5kZWZpbmVkIHdoZW4gbm8gcG9pbnQgaGFzIGEgdmFsdWUuIEl0XG4vLyB0YWtlcyB0aGUgc2VyaWVzJyBjb2xvciB1bmxlc3MgaXQgaXMgZ2l2ZW4gb25lLlxuZnVuY3Rpb24gc3RhdE1hcmtMaW5lKFxuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLFxuICBzdGF0OiBSZXBvcnRDaGFydE1hcmtTdGF0LFxuICB3cml0ZTogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyxcbiAgY29sb3I/OiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgdmFsdWUgPSBzZXJpZXNTdGF0KHZhbHVlcywgc3RhdCk7XG5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBgJHtTVEFUX0xBQkVMW3N0YXRdfTogJHt3cml0ZSh2YWx1ZSl9YDtcblxuICByZXR1cm4ge1xuICAgIHNpbGVudDogdHJ1ZSxcbiAgICBzeW1ib2w6ICdub25lJyxcbiAgICBsaW5lU3R5bGU6IHsgdHlwZTogJ2Rhc2hlZCcgYXMgY29uc3QsIHdpZHRoOiAxLCAuLi4oY29sb3IgPyB7IGNvbG9yIH0gOiB7fSkgfSxcbiAgICBsYWJlbDogeyBmb3JtYXR0ZXI6ICgpID0+IHRleHQsIHBvc2l0aW9uOiAnaW5zaWRlRW5kVG9wJyBhcyBjb25zdCwgZm9udFNpemU6IFJFUE9SVF9EQVRBX0xBQkVMX0ZPTlRfU0laRSwgLi4uTUFSS19MQUJFTF9CT1ggfSxcbiAgICBkYXRhOiBbeyB5QXhpczogdmFsdWUgfV0sXG4gIH07XG59XG5cbi8vIEEgc3RhdGlzdGljJ3MgdmFsdWUgaW4gaXRzIG1lYXN1cmUncyBudW1iZXIgZm9ybWF0LCBpbiB0aGUgcmVwb3J0IGxvY2FsZS5cbmZ1bmN0aW9uIG1lYXN1cmVXcml0ZXIobWVhc3VyZTogQ2hhcnRNZWFzdXJlIHwgdW5kZWZpbmVkLCBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0KTogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyB7XG4gIHJldHVybiAodmFsdWUpID0+IGZvcm1hdE51bWJlcih2YWx1ZSwgbWVhc3VyZSwgY29udGV4dCk7XG59XG5cbi8vIEEgMTAwJSBzdGFja2VkIHNlcmllcycgc3RhdGlzdGljIGlzIGEgc2hhcmUsIHdyaXR0ZW4gYXMgaXRzIHRvb2x0aXAgd3JpdGVzXG4vLyBvbmUuXG5mdW5jdGlvbiBzaGFyZVdyaXRlcihjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0KTogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZyB7XG4gIGNvbnN0IHJhdGlvQ29udGV4dCA9IHsgLi4uY29udGV4dCwgcmF0aW9QZXJjZW50OiB0cnVlIH07XG5cbiAgcmV0dXJuICh2YWx1ZSkgPT4gZm9ybWF0TnVtYmVyKHZhbHVlLCBQRVJDRU5UX1NIQVJFX0ZPUk1BVCwgcmF0aW9Db250ZXh0KTtcbn1cblxuLy8gVGhlIHNlcmllcyB0aGF0IGNhcnJ5IGEgY2hhcnQncyByZWZlcmVuY2VzLCBvbmUgcGVyIHZhbHVlIGF4aXMgdGhhdCBoYXNcbi8vIGFueTogYW4gZW1wdHkgbGluZSAoZXZlcnkgcG9pbnQgbnVsbCwgc28gaXQgZHJhd3Mgbm90aGluZyBhbmQgc3RyZXRjaGVzIG5vXG4vLyBheGlzKSB3aG9zZSBtYXJrTGluZSBkcmF3cyB0aGUgcmVmZXJlbmNlIGxpbmVzIGFuZCB3aG9zZSBtYXJrQXJlYSBmaWxscyB0aGVcbi8vIGJhbmRzLiBJdCBpcyBzaWxlbnQsIGxlZnQgb3V0IG9mIHRoZSB0b29sdGlwIGFuZCwgYnkgcmVmZXJlbmNlTGVnZW5kLCBvdXQgb2Zcbi8vIHRoZSBsZWdlbmQuIEl0IGhhcyBubyBuYW1lLCBzbyBubyBtZWFzdXJlIHNlcmllcycgbGVnZW5kIGVudHJ5ICh3aGF0ZXZlciBpdHNcbi8vIG5hbWUsICcnIGluY2x1ZGVkKSB0b2dnbGVzIGl0LlxuLy9cbi8vIExhYmVscyBhcmUgZnVuY3Rpb25zLCBhcyBhIHN0cmluZyBmb3JtYXR0ZXIgaXMgYSB0ZW1wbGF0ZSB0aGF0IHdvdWxkIHJlYWRcbi8vICd7Yn0nIG9yICd7Y30nIGluIGEgbGFiZWwgYXMgYSBwbGFjZWhvbGRlci4gRUNoYXJ0cyBkcmF3cyBhIG1hcmtBcmVhIHVuZGVyXG4vLyB0aGUgYmFycyBhbmQgYSBtYXJrTGluZSBvdmVyIHRoZW0sIHNvIGEgYmFuZCdzIGxhYmVsIHJpZGVzIGFuIGludmlzaWJsZVxuLy8gbWFya0xpbmUgb24gaXRzIHVwcGVyIGVkZ2UsIGluc2lkZSBpdHMgdG9wIGxlZnQgY29ybmVyLCB3aGVyZSB0aGUgZmlyc3QgYmFyXG4vLyB3b3VsZCBvdGhlcndpc2UgY292ZXIgaXQuXG5mdW5jdGlvbiByZWZlcmVuY2VDYXJyaWVycyhyZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLCBjYXRlZ29yaWVzOiBzdHJpbmdbXSk6IFNlcmllc09wdGlvbltdIHtcbiAgY29uc3QgY29sb3IgPSBgIyR7UkVQT1JUX1JFRkVSRU5DRV9DT0xPUn1gO1xuXG4gIHJldHVybiAoWzAsIDFdIGFzIGNvbnN0KS5mbGF0TWFwKChheGlzSW5kZXgpOiBTZXJpZXNPcHRpb25bXSA9PiB7XG4gICAgY29uc3Qgb25BeGlzID0gcmVmZXJlbmNlcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmF4aXNJbmRleCA9PT0gYXhpc0luZGV4KTtcbiAgICBjb25zdCBsaW5lcyA9IG9uQXhpcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gIXJlZmVyZW5jZS5iYW5kKTtcbiAgICBjb25zdCBiYW5kcyA9IG9uQXhpcy5maWx0ZXIoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmJhbmQpO1xuXG4gICAgaWYgKCFvbkF4aXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIFt7XG4gICAgICB0eXBlOiAnbGluZScsXG4gICAgICBkYXRhOiBjYXRlZ29yaWVzLm1hcCgoKSA9PiBudWxsKSxcbiAgICAgIHlBeGlzSW5kZXg6IGF4aXNJbmRleCxcbiAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgIHRvb2x0aXA6IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgIG1hcmtMaW5lOiB7XG4gICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgc3ltYm9sOiAnbm9uZScsXG4gICAgICAgIGxpbmVTdHlsZTogeyBjb2xvciwgdHlwZTogJ2Rhc2hlZCcsIHdpZHRoOiAxIH0sXG4gICAgICAgIGxhYmVsOiB7IHBvc2l0aW9uOiAnaW5zaWRlRW5kVG9wJywgY29sb3IsIGZvbnRTaXplOiBSRVBPUlRfREFUQV9MQUJFTF9GT05UX1NJWkUsIC4uLk1BUktfTEFCRUxfQk9YIH0sXG4gICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAuLi5saW5lcy5tYXAoKHJlZmVyZW5jZSkgPT4gKHsgeUF4aXM6IHJlZmVyZW5jZS5sb3csIGxhYmVsOiB7IGZvcm1hdHRlcjogKCkgPT4gcmVmZXJlbmNlLmxhYmVsIH0gfSkpLFxuICAgICAgICAgIC4uLmJhbmRzLm1hcCgocmVmZXJlbmNlKSA9PiAoe1xuICAgICAgICAgICAgeUF4aXM6IHJlZmVyZW5jZS5oaWdoLFxuICAgICAgICAgICAgLy8gWmVybyB3aWR0aCwgbm90IHplcm8gb3BhY2l0eTogYSBtYXJrTGluZSdzIGxhYmVsIHRha2VzIHRoZVxuICAgICAgICAgICAgLy8gbGluZSdzIG9wYWNpdHkuXG4gICAgICAgICAgICBsaW5lU3R5bGU6IHsgd2lkdGg6IDAgfSxcbiAgICAgICAgICAgIGxhYmVsOiB7IHBvc2l0aW9uOiAnaW5zaWRlU3RhcnRCb3R0b20nLCBmb3JtYXR0ZXI6ICgpID0+IHJlZmVyZW5jZS5sYWJlbCB9LFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICAuLi4oYmFuZHMubGVuZ3RoID8ge1xuICAgICAgICBtYXJrQXJlYToge1xuICAgICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IFJFRkVSRU5DRV9CQU5EX0ZJTEwgfSxcbiAgICAgICAgICBkYXRhOiBiYW5kcy5tYXAoKHJlZmVyZW5jZSkgPT4gW3sgeUF4aXM6IHJlZmVyZW5jZS5sb3cgfSwgeyB5QXhpczogcmVmZXJlbmNlLmhpZ2ggfV0pLFxuICAgICAgICB9LFxuICAgICAgfSA6IHt9KSxcbiAgICB9IGFzIFNlcmllc09wdGlvbl07XG4gIH0pO1xufVxuXG4vLyBUaGUgbGFyZ2VzdCBtYWduaXR1ZGUgYSB2YWx1ZSBheGlzJ3MgcmVmZXJlbmNlcyByZWFjaCwgd2hpY2ggaXRzIG51bWJlclxuLy8gZm9ybWF0IGNvdW50cyB0b3dhcmQgaXRzIHBlYWssIGFzIHRoZSBheGlzIHN0cmV0Y2hlcyB0byB0aGVtOyAwIHdoZW4gaXRcbi8vIGhhcyBub25lLlxuZXhwb3J0IGZ1bmN0aW9uIHJlZmVyZW5jZVBlYWsocmVmZXJlbmNlczogRHJhd25SZWZlcmVuY2VbXSwgYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCk6IG51bWJlciB7XG4gIGNvbnN0IHJlYWNoID0gcmVmZXJlbmNlUmVhY2gocmVmZXJlbmNlcywgYXhpc0luZGV4KTtcblxuICByZXR1cm4gcmVhY2ggPyBNYXRoLm1heChNYXRoLmFicyhyZWFjaC5sb3cpLCBNYXRoLmFicyhyZWFjaC5oaWdoKSkgOiAwO1xufVxuXG4vLyBUaGUgbGVnZW5kIG9mIGEgY2hhcnQgd2l0aCByZWZlcmVuY2VzIG5hbWVzIGl0cyBtZWFzdXJlIHNlcmllcyBhbG9uZSwgc29cbi8vIGEgY2FycmllciBuZXZlciBzaG93cyBhcyBhIGJsYW5rIGVudHJ5LiBXaXRob3V0IHJlZmVyZW5jZXMgaXQgaXMgbGVmdCBhcyBpdFxuLy8gd2FzLlxuZnVuY3Rpb24gcmVmZXJlbmNlTGVnZW5kKFxuICBsZWdlbmQ6IExlZ2VuZENvbXBvbmVudE9wdGlvbixcbiAgc2VyaWVzOiBTZXJpZXNPcHRpb25bXSxcbiAgcmVmZXJlbmNlczogRHJhd25SZWZlcmVuY2VbXSxcbik6IExlZ2VuZENvbXBvbmVudE9wdGlvbiB7XG4gIHJldHVybiByZWZlcmVuY2VzLmxlbmd0aFxuICAgID8geyAuLi5sZWdlbmQsIGRhdGE6IHNlcmllcy5tYXAoKGl0ZW0pID0+IFN0cmluZyhpdGVtLm5hbWUgPz8gJycpKSB9XG4gICAgOiBsZWdlbmQ7XG59XG5cbi8vIFRoZSBzcGFuIG9mIHRoZSByZWZlcmVuY2VzIG9uIG9uZSB2YWx1ZSBheGlzLCBvciB1bmRlZmluZWQgd2hlbiBpdCBoYXNcbi8vIG5vbmUuXG5mdW5jdGlvbiByZWZlcmVuY2VSZWFjaChyZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLCBheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KTogUmVmZXJlbmNlUmVhY2ggfCB1bmRlZmluZWQge1xuICBjb25zdCBvbkF4aXMgPSByZWZlcmVuY2VzLmZpbHRlcigocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UuYXhpc0luZGV4ID09PSBheGlzSW5kZXgpO1xuXG4gIHJldHVybiBvbkF4aXMubGVuZ3RoXG4gICAgPyB7IGxvdzogTWF0aC5taW4oLi4ub25BeGlzLm1hcCgocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UubG93KSksIGhpZ2g6IE1hdGgubWF4KC4uLm9uQXhpcy5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLmhpZ2gpKSB9XG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbi8vIEVDaGFydHMgbGVhdmVzIGEgbWFya0xpbmUgb3IgbWFya0FyZWEgb3V0IG9mIGFuIGF4aXMncyBleHRlbnQsIHNvIGFcbi8vIHJlZmVyZW5jZSBiZXlvbmQgdGhlIGRhdGEgd291bGQgZmFsbCBvZmYgdGhlIHBsb3QuIEFuIGF4aXMgYm91bmQgdGhlIGNvbmZpZ1xuLy8gZG9lcyBub3QgcGluIHJlYWNoZXMgcGFzdCB0aGUgZnVydGhlc3QgcmVmZXJlbmNlLCB0byBhIHJvdW5kIG51bWJlciB3aXRoXG4vLyByb29tIGZvciBpdHMgbGFiZWwgKGJleW9uZFJlZmVyZW5jZSksIHdoZW4gdGhlIGRhdGEgKGFuZCB0aGUgemVybyBhIHZhbHVlXG4vLyBheGlzIGFsd2F5cyBzaG93cykgZmFsbHMgc2hvcnQgb2YgaXQsIGFuZCBpcyBsZWZ0IHRvIEVDaGFydHMgb3RoZXJ3aXNlOiBhXG4vLyBjYWxsYmFjayByZXR1cm5pbmcgdW5kZWZpbmVkIGtlZXBzIHRoZSBib3VuZCBhdXRvbWF0aWMuIFBhc3QgdGhlIGRhdGEgYW5kXG4vLyB6ZXJvLCBhIHJlZmVyZW5jZSBiZXlvbmQgdGhlIG1heCBpcyBhYm92ZSB6ZXJvIGFuZCBvbmUgYmV5b25kIHRoZSBtaW4gYmVsb3dcbi8vIGl0LlxuZnVuY3Rpb24gcmVhY2hNaW4ocmVhY2g6IFJlZmVyZW5jZVJlYWNoIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiByZWFjaFxuICAgID8gKGV4dGVudDogQXhpc0V4dGVudCkgPT4gKHJlYWNoLmxvdyA8IE1hdGgubWluKGV4dGVudC5taW4sIDApID8gLWJleW9uZFJlZmVyZW5jZSgtcmVhY2gubG93KSA6IHVuZGVmaW5lZClcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVhY2hNYXgocmVhY2g6IFJlZmVyZW5jZVJlYWNoIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiByZWFjaFxuICAgID8gKGV4dGVudDogQXhpc0V4dGVudCkgPT4gKHJlYWNoLmhpZ2ggPiBNYXRoLm1heChleHRlbnQubWF4LCAwKSA/IGJleW9uZFJlZmVyZW5jZShyZWFjaC5oaWdoKSA6IHVuZGVmaW5lZClcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuLy8gVGhlIGJvdW5kIGFuIGF4aXMgdGFrZXMgcGFzdCBhIHJlZmVyZW5jZSBvZiB0aGlzIChwb3NpdGl2ZSkgbWFnbml0dWRlOiB0aGVcbi8vIHNtYWxsZXN0IHJvdW5kIG51bWJlciBhdCBvciBhYm92ZSBpdCBwbHVzIFJFRkVSRU5DRV9IRUFEUk9PTS4gVGhlIHN0ZXBzIGFyZVxuLy8gZmluZXIgdGhhbiBFQ2hhcnRzJyB0aWNrIHN0ZXBzLCBzbyBhIHJlZmVyZW5jZSBqdXN0IHBhc3QgdGhlIGRhdGEgZG9lcyBub3Rcbi8vIGRvdWJsZSB0aGUgYXhpcyAoMTEwIGdpdmVzIDEyMCwgbm90IDIwMCkuIFRoZSB0b2xlcmFuY2Uga2VlcHMgYSBmbG9hdCBlcnJvclxuLy8gZnJvbSBza2lwcGluZyBhIHJvdW5kIG51bWJlciB0aGUgdmFsdWUgYWxyZWFkeSBpcy5cbmNvbnN0IE5JQ0VfU1RFUFMgPSBbMSwgMS4yLCAxLjUsIDIsIDIuNSwgMywgNCwgNSwgNiwgOCwgMTBdO1xuY29uc3QgTklDRV9UT0xFUkFOQ0UgPSAxZS05O1xuXG5mdW5jdGlvbiBiZXlvbmRSZWZlcmVuY2UobWFnbml0dWRlOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCB0YXJnZXQgPSBtYWduaXR1ZGUgKiBSRUZFUkVOQ0VfSEVBRFJPT007XG4gIGNvbnN0IHBvd2VyID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMCh0YXJnZXQpKSk7XG4gIGNvbnN0IHN0ZXAgPSBOSUNFX1NURVBTLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlICogcG93ZXIgPj0gdGFyZ2V0ICogKDEgLSBOSUNFX1RPTEVSQU5DRSkpID8/IDEwO1xuXG4gIC8vIFJvdW5kZWQgYmFjayB0byB0aGUgcG93ZXIncyBvd24gZGlnaXRzLCBzbyAxLjIgeCAwLjEgcmVhZHMgMC4xMiwgbm90XG4gIC8vIDAuMTIwMDAwMDAwMDAwMDAwMDEuXG4gIHJldHVybiBOdW1iZXIoKHN0ZXAgKiBwb3dlcikudG9QcmVjaXNpb24oMTIpKTtcbn1cblxuLy8gVGhlIGNhdGVnb3J5IGF4aXMgb2YgYW4gYXhpcyBjaGFydCBvciBhIHdhdGVyZmFsbDogdGhlIGNhdGVnb3JpZXMgaW4gcm93XG4vLyBvcmRlciwgbGFiZWxlZCBhcyBwZXJpb2RzIHdoZW4gdGhlIHJvd3Mgd2VyZSBidWNrZXRlZCBieSB0aW1lLlxuLy9cbi8vIEhvcml6b250YWwgYmFycyByZWFkIHRvcC1kb3duOiBFQ2hhcnRzIGRyYXdzIGNhdGVnb3J5IDAgYXQgdGhlIGJvdHRvbSwgc28gdGhlXG4vLyBheGlzIGlzIGludmVydGVkIHRvIHB1dCB0aGUgZmlyc3Qgcm93ICh0aGUgbGFyZ2VzdCBvZiBhIHRvcC1OLCBhIHdhdGVyZmFsbCdzXG4vLyBmaXJzdCBzdGVwKSBhdCB0aGUgdG9wLiBUaGUgcm90YXRlZCB0aXRsZSBzaXRzIGp1c3QgYmV5b25kIHRoZSBsb25nZXN0IGxhYmVsXG4vLyByYXRoZXIgdGhhbiBhdCBhIGZpeGVkIGdhcCB0aGF0IHdvdWxkIHB1dCBpdCBvbiB0b3Agb2YgdGhlIGxhYmVscy5cbi8vXG4vLyBBIGJ1Y2tldGVkIGF4aXMgYWxzbyBuYW1lcyBpdHMgcGVyaW9kIGluIHRoZSBheGlzIHRvb2x0aXAncyBoZWFkZXI6IEVDaGFydHNcbi8vIGhlYWRzIGl0IHdpdGggdGhlIHJhdyBjYXRlZ29yeSAoJzIwMjYtMDEtMDEnKSB1bmxlc3MgdGhlIGF4aXMgcG9pbnRlcidzIGxhYmVsXG4vLyBoYXMgYSBmb3JtYXR0ZXIsIHNvIGl0IHJlYWRzICdKYW51YXJ5IDIwMjYnIGluc3RlYWQsIGFsd2F5cyB3aXRoIGl0cyB5ZWFyLlxuLy8gVGhlIGF4aXMncyBkYXRlTGFiZWwgc3R5bGUgd3JpdGVzIGJvdGggaXRzIHRpY2sgbGFiZWxzIGFuZCB0aGF0IGhlYWRlci5cbmZ1bmN0aW9uIGNhdGVnb3J5QXhpc09wdGlvbihcbiAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gIGhvcml6b250YWw6IGJvb2xlYW4sXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKSB7XG4gIGNvbnN0IGdyYW51bGFyaXR5ID0gYnVja2V0R3JhbnVsYXJpdHkoZGF0YSk7XG4gIGNvbnN0IGRhdGVMYWJlbCA9IGNoYXJ0RGF0ZUxhYmVsKGNvbmZpZyk7XG4gIGNvbnN0IHBlcmlvZExhYmVsID0gcGVyaW9kQXhpc0xhYmVsKGdyYW51bGFyaXR5LCBjYXRlZ29yaWVzLCBsb2NhbGUsIGRhdGVMYWJlbCk7XG4gIGNvbnN0IGF4aXMgPSB7XG4gICAgdHlwZTogJ2NhdGVnb3J5JyBhcyBjb25zdCxcbiAgICBkYXRhOiBjYXRlZ29yaWVzLFxuICAgIGludmVyc2U6IGhvcml6b250YWwsXG4gICAgbmFtZTogY2F0ZWdvcnlBeGlzVGl0bGUoY29uZmlnLCBkYXRhKSxcbiAgICBuYW1lTG9jYXRpb246ICdtaWRkbGUnIGFzIGNvbnN0LFxuICAgIC4uLihncmFudWxhcml0eSA/IHtcbiAgICAgIGF4aXNQb2ludGVyOiB7XG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgZm9ybWF0dGVyOiAocGFyYW1zOiB7IHZhbHVlOiB1bmtub3duIH0pID0+IGZvcm1hdFBlcmlvZExhYmVsKFxuICAgICAgICAgICAgU3RyaW5nKHBhcmFtcy52YWx1ZSksXG4gICAgICAgICAgICBncmFudWxhcml0eSxcbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBkYXRlTGFiZWwsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSA6IHt9KSxcbiAgfTtcblxuICBpZiAoIWhvcml6b250YWwpIHtcbiAgICAvLyBUaGUgZ2FwIGNsZWFycyB0aGUgeWVhcidzIHNlY29uZCBsaW5lIHdoZW4gdGhlIGxhYmVscyBwcmludCBvbmUuXG4gICAgY29uc3Qgc2Vjb25kTGluZSA9IGdyYW51bGFyaXR5ICYmIGRhdGVMYWJlbCA9PT0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQgJiYgc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmF4aXMsXG4gICAgICBuYW1lR2FwOiBzZWNvbmRMaW5lID8gNDAgOiAyOCxcbiAgICAgIC4uLnBlcmlvZExhYmVsLFxuICAgIH07XG4gIH1cblxuICAvLyBQZXJpb2QgbGFiZWxzLCBzaG9ydCwgbG9uZyBvciBudW1lcmljICgnTWF5JywgJ1EyJywgJ01heSAyMDI2JyksIGFyZVxuICAvLyBib3VuZGVkIGluIGxlbmd0aCBhbmQgbmV2ZXIgY3V0OyBvbmx5IGEgcGxhaW4gY2F0ZWdvcnkgaXMgdHJ1bmNhdGVkLiBUaGUgbGFiZWxzIGFyZSBjdXQgaGVyZSByYXRoZXIgdGhhbiBieSBFQ2hhcnRzJyBvd25cbiAgLy8gdHJ1bmNhdGlvbiwgc28gdGhlIHRpdGxlJ3MgZ2FwIGlzIG1lYXN1cmVkIG9uIGV4YWN0bHkgdGhlIHRleHQgdGhlIGF4aXNcbiAgLy8gZHJhd3MuXG4gIGNvbnN0IHNob3duID0gZ3JhbnVsYXJpdHlcbiAgICA/IG51bGxcbiAgICA6IG5ldyBNYXAoY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBbY2F0ZWdvcnksIHRydW5jYXRlQXhpc0xhYmVsKGNhdGVnb3J5KV0pKTtcbiAgY29uc3QgbGFiZWxzID0gc2hvd24gPyBbLi4uc2hvd24udmFsdWVzKCldIDogZGlzcGxheWVkQ2F0ZWdvcnlMYWJlbHMoY2F0ZWdvcmllcywgZ3JhbnVsYXJpdHksIGxvY2FsZSwgZGF0ZUxhYmVsKTtcblxuICByZXR1cm4ge1xuICAgIC4uLmF4aXMsXG4gICAgbmFtZUdhcDogd2lkZXN0QXhpc0xhYmVsKGxhYmVscykgKyBBWElTX0xBQkVMX01BUkdJTiArIEFYSVNfTkFNRV9DTEVBUkFOQ0UsXG4gICAgLi4uKHNob3duID8geyBheGlzTGFiZWw6IHsgZm9ybWF0dGVyOiAodmFsdWU6IHN0cmluZykgPT4gc2hvd24uZ2V0KHZhbHVlKSA/PyB2YWx1ZSB9IH0gOiBwZXJpb2RMYWJlbCksXG4gIH07XG59XG5cbi8vIFRoZSBjYXRlZ29yeSBheGlzJ3MgdGl0bGU6IHRoZSBsZXZlbCBzaG93biB3aGlsZSB0aGUgY2hhcnQgaXMgZHJpbGxlZFxuLy8gYmVsb3cgaXRzIHRvcCAodGhlIHNlcnZlciBuYW1lcyBpdCwgJ01vbnRoJyksIGVsc2UgdGhlIGF1dGhvcmVkIHRpdGxlLlxuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5QXhpc1RpdGxlKGNvbmZpZzogQ2hhcnRDb25maWcsIGRhdGE6IENvbXBvbmVudERhdGEpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZGF0YS5kcmlsbD8ucGF0aD8ubGVuZ3RoID8gZGF0YS5kcmlsbC5sZXZlbExhYmVsIDogY29uZmlnLnhBeGlzPy5sYWJlbDtcbn1cblxuLy8gVGhlIGNhdGVnb3J5IGF4aXMncyB0aXRsZSBzaWRlLCBvciBudWxsIHdoZW4gdGhlIGF4aXMgaGFzIG5vIHRpdGxlIHRvIG1ha2Vcbi8vIHJvb20gZm9yLlxuZnVuY3Rpb24gY2F0ZWdvcnlUaXRsZVNpZGUoY29uZmlnOiBDaGFydENvbmZpZywgZGF0YTogQ29tcG9uZW50RGF0YSwgaG9yaXpvbnRhbDogYm9vbGVhbik6IEF4aXNUaXRsZVNpZGUgfCBudWxsIHtcbiAgaWYgKCFjYXRlZ29yeUF4aXNUaXRsZShjb25maWcsIGRhdGEpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gaG9yaXpvbnRhbCA/ICdsZWZ0JyA6ICdib3R0b20nO1xufVxuXG4vLyBUaGUgdmFsdWUgYXhlcycgdGl0bGUgc2lkZSwgb3IgbnVsbCB3aGVuIG5vbmUgb2YgdGhlbSBoYXMgYSB0aXRsZS4gQVxuLy8gdmVydGljYWwgY2hhcnQncyB0aXRsZXMgc2l0IGFib3ZlIHRoZSBwbG90LCBhdCB0aGUgdG9wIG9mIGVhY2ggYXhpcyBsaW5lLCBzb1xuLy8gcm9vbSBpcyBtYWRlIG9uY2UgZm9yIGJvdGg7IGEgaG9yaXpvbnRhbCBjaGFydCdzIHNpdHMgYmVsb3cuXG5mdW5jdGlvbiB2YWx1ZVRpdGxlU2lkZShheGVzOiAoQ2hhcnRWYWx1ZUF4aXMgfCB1bmRlZmluZWQpW10sIGhvcml6b250YWw6IGJvb2xlYW4pOiBBeGlzVGl0bGVTaWRlIHwgbnVsbCB7XG4gIGlmICghYXhlcy5zb21lKChheGlzKSA9PiBheGlzPy5sYWJlbCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBob3Jpem9udGFsID8gJ2JvdHRvbScgOiAndG9wJztcbn1cblxuLy8gVGhlIHRpY2sgbGFiZWxzIGFzIHRoZSBheGlzIHNob3dzIHRoZW06IGEgYnVja2V0J3MgcHJpbWFyeSBwZXJpb2QgbGFiZWxcbi8vICgnTWF5JywgJ1EyJywgJ01heSAyMDI2JyksIG90aGVyd2lzZSB0aGUgY2F0ZWdvcnkgaXRzZWxmLiBUaGUgeWVhciBhXG4vLyBtdWx0aS15ZWFyIGF4aXMgcHJpbnRzIHVuZGVyIGEgc2hvcnQgcGVyaW9kIGlzIGxlZnQgb3V0LCBhcyBpdCBpcyBuZXZlciB0aGVcbi8vIHdpZGVyIGxpbmUuXG5mdW5jdGlvbiBkaXNwbGF5ZWRDYXRlZ29yeUxhYmVscyhcbiAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCxcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4gIGRhdGVMYWJlbDogUmVwb3J0Q2hhcnREYXRlTGFiZWwsXG4pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBncmFudWxhcml0eVxuICAgID8gY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBwZXJpb2RMYWJlbFBhcnRzKGNhdGVnb3J5LCBncmFudWxhcml0eSwgbG9jYWxlLCBkYXRlTGFiZWwpPy5wcmltYXJ5ID8/IGNhdGVnb3J5KVxuICAgIDogY2F0ZWdvcmllcztcbn1cblxuLy8gVGhlIHBpeGVsIHdpZHRoIG9mIHRoZSB3aWRlc3QgbGFiZWwuIEEgbGFiZWwgdGhhdCBicmVha3Mgb3ZlciBzZXZlcmFsIGxpbmVzXG4vLyBpcyBhcyB3aWRlIGFzIGl0cyBsb25nZXN0IGxpbmUuXG5mdW5jdGlvbiB3aWRlc3RBeGlzTGFiZWwobGFiZWxzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gIHJldHVybiBsYWJlbHMucmVkdWNlKCh3aWRlc3QsIGxhYmVsKSA9PiBsYWJlbC5zcGxpdCgnXFxuJykucmVkdWNlKFxuICAgIChsaW5lV2lkZXN0LCBsaW5lKSA9PiBNYXRoLm1heChsaW5lV2lkZXN0LCBheGlzTGFiZWxXaWR0aChsaW5lKSksXG4gICAgd2lkZXN0LFxuICApLCAwKTtcbn1cblxuLy8gQSBjYXRlZ29yeSBsYWJlbCBjdXQgdG8gQ0FURUdPUllfTEFCRUxfTUFYX1dJRFRILCBsaW5lIGJ5IGxpbmU6IHRoZSBsb25nZXN0XG4vLyBzdGFydCBvZiBlYWNoIGxpbmUgdGhhdCBzdGlsbCBmaXRzIHdpdGggdGhlIGVsbGlwc2lzIGFmdGVyIGl0LlxuZnVuY3Rpb24gdHJ1bmNhdGVBeGlzTGFiZWwobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsYWJlbC5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiB7XG4gICAgaWYgKGF4aXNMYWJlbFdpZHRoKGxpbmUpIDw9IENBVEVHT1JZX0xBQkVMX01BWF9XSURUSCkge1xuICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBwb2ludHMsIHNvIGFuIGVtb2ppIG9yIG90aGVyIHN1cnJvZ2F0ZSBwYWlyIGlzIG5ldmVyIHNwbGl0LlxuICAgIGNvbnN0IGNoYXJhY3RlcnMgPSBBcnJheS5mcm9tKGxpbmUpO1xuICAgIGNvbnN0IGN1dCA9IChsZW5ndGg6IG51bWJlcikgPT4gYCR7Y2hhcmFjdGVycy5zbGljZSgwLCBsZW5ndGgpLmpvaW4oJycpLnRyaW1FbmQoKX0ke0xBQkVMX0VMTElQU0lTfWA7XG4gICAgbGV0IGZpdHMgPSAwO1xuICAgIGxldCB0b29Mb25nID0gY2hhcmFjdGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKHRvb0xvbmcgLSBmaXRzID4gMSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5mbG9vcigoZml0cyArIHRvb0xvbmcpIC8gMik7XG4gICAgICBpZiAoYXhpc0xhYmVsV2lkdGgoY3V0KGxlbmd0aCkpIDw9IENBVEVHT1JZX0xBQkVMX01BWF9XSURUSCkge1xuICAgICAgICBmaXRzID0gbGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9vTG9uZyA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3V0KGZpdHMpO1xuICB9KS5qb2luKCdcXG4nKTtcbn1cblxuLy8gT25lIGxpbmUncyB3aWR0aCBpbiB0aGUgYXhpcy1sYWJlbCBmb250LCBtZWFzdXJlZCBvbiBhIGNhbnZhcyB0aGUgd2F5XG4vLyBFQ2hhcnRzIG1lYXN1cmVzIGl0IGZvciBjb250YWluTGFiZWwuIE91dHNpZGUgYSBicm93c2VyIHRoZXJlIGlzIG5vIGNhbnZhc1xuLy8gdG8gbWVhc3VyZSB3aXRoLCBzbyB0aGUgbGluZSBjb3VudHMgYXMgemVybyB3aWR0aC5cbmxldCBheGlzTGFiZWxDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcblxuZnVuY3Rpb24gYXhpc0xhYmVsV2lkdGgobGluZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgaWYgKCFheGlzTGFiZWxDb250ZXh0ICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBheGlzTGFiZWxDb250ZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTtcbiAgfVxuXG4gIGlmICghYXhpc0xhYmVsQ29udGV4dCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgYXhpc0xhYmVsQ29udGV4dC5mb250ID0gQVhJU19MQUJFTF9GT05UO1xuXG4gIHJldHVybiBheGlzTGFiZWxDb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmUpLndpZHRoO1xufVxuXG5mdW5jdGlvbiBidWlsZFdhdGVyZmFsbE9wdGlvbihcbiAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3Qgd2F0ZXJmYWxsID0gZXh0cmFjdFdhdGVyZmFsbChjb21wb25lbnQsIGRhdGEpO1xuICBjb25zdCBob3Jpem9udGFsID0gY29uZmlnLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gIGNvbnN0IGNhdGVnb3JpZXMgPSB3YXRlcmZhbGwuc3RlcHMubWFwKChzdGVwKSA9PiBzdGVwLmNhdGVnb3J5KTtcbiAgY29uc3QgY2F0ZWdvcnlBeGlzID0gY2F0ZWdvcnlBeGlzT3B0aW9uKGNvbmZpZywgZGF0YSwgY2F0ZWdvcmllcywgaG9yaXpvbnRhbCwgY29udGV4dC5sb2NhbGUpO1xuICAvLyBUaGUgb25lIG1lYXN1cmUncyBmb3JtYXQgd3JpdGVzIHRoZSBheGlzIGFuZCB0aGUgdG9vbHRpcC4gVGhlIGF4aXMgaGFzIHRvXG4gIC8vIHJlYWNoIHRoZSBmdXJ0aGVzdCBwb2ludCB0aGUgcnVubmluZyB0b3RhbCBnZXRzIHRvLCBvbiBlaXRoZXIgc2lkZSBvZlxuICAvLyB6ZXJvLCBvciB0aGUgZnVydGhlc3QgcmVmZXJlbmNlLlxuICBjb25zdCBzcGVjID0gY29uZmlnLm1lYXN1cmVzPy5bMF07XG4gIGNvbnN0IHJlZmVyZW5jZXMgPSBjaGFydFJlZmVyZW5jZXMoY29uZmlnLCBmYWxzZSk7XG4gIGNvbnN0IHZhbHVlQXhpcyA9IHZhbHVlQXhpc09wdGlvbihjb25maWcudmFsdWVBeGlzLCBob3Jpem9udGFsLCB2YWx1ZUF4aXNMYWJlbChyZXNvbHZlVmFsdWVBeGlzRm9ybWF0KFxuICAgIHNwZWMgJiYgaGFzTnVtYmVyRm9ybWF0KHNwZWMpID8gc3BlYyA6IG51bGwsXG4gICAgKCkgPT4gTWF0aC5tYXgocmVmZXJlbmNlUGVhayhyZWZlcmVuY2VzLCAwKSwgLi4ud2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gTWF0aC5hYnMoc3RlcC5zdGFydCArIChzdGVwLmNoYW5nZSA/PyAwKSkpKSxcbiAgICBjb250ZXh0LFxuICApLCBjb250ZXh0KSwgeyByZWFjaDogcmVmZXJlbmNlUmVhY2gocmVmZXJlbmNlcywgMCkgfSk7XG4gIC8vIE9uZSB2aXNpYmxlIHNlcmllcywgc28gdGhlIGxlZ2VuZCBpcyBoaWRkZW4gdW5sZXNzIHRoZSBjb25maWcgcGlucyBpdC5cbiAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCAxKTtcbiAgY29uc3QgZ3JhbnVsYXJpdHkgPSBidWNrZXRHcmFudWxhcml0eShkYXRhKTtcblxuICByZXR1cm4ge1xuICAgIGdyaWQ6IGF4aXNHcmlkKFxuICAgICAgbGVnZW5kUG9zaXRpb24sXG4gICAgICBjYXRlZ29yeVRpdGxlU2lkZShjb25maWcsIGRhdGEsIGhvcml6b250YWwpLFxuICAgICAgdmFsdWVUaXRsZVNpZGUoW2NvbmZpZy52YWx1ZUF4aXNdLCBob3Jpem9udGFsKSxcbiAgICApLFxuICAgIGxlZ2VuZDogeyAuLi5sZWdlbmRPcHRpb24obGVnZW5kUG9zaXRpb24pLCBkYXRhOiBbd2F0ZXJmYWxsLm5hbWVdIH0sXG4gICAgLy8gUGVyIGJhcjogdGhlIGludmlzaWJsZSBiYXNlIGlzIHNpbGVudCwgc28gb25seSBhIHN0ZXAgYW5zd2VycyB0aGUgaG92ZXIuXG4gICAgdG9vbHRpcDoge1xuICAgICAgdHJpZ2dlcjogJ2l0ZW0nLFxuICAgICAgZm9ybWF0dGVyOiAocGFyYW1zOiBUb29sdGlwQ29tcG9uZW50Rm9ybWF0dGVyQ2FsbGJhY2tQYXJhbXMpID0+IHdhdGVyZmFsbFRvb2x0aXAoXG4gICAgICAgIHdhdGVyZmFsbCxcbiAgICAgICAgKEFycmF5LmlzQXJyYXkocGFyYW1zKSA/IHBhcmFtc1swXSA6IHBhcmFtcykuZGF0YUluZGV4LFxuICAgICAgICBncmFudWxhcml0eSxcbiAgICAgICAgY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICAgICAgc3BlYyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICksXG4gICAgfSxcbiAgICB4QXhpczogaG9yaXpvbnRhbCA/IHZhbHVlQXhpcyA6IGNhdGVnb3J5QXhpcyxcbiAgICB5QXhpczogaG9yaXpvbnRhbCA/IGNhdGVnb3J5QXhpcyA6IHZhbHVlQXhpcyxcbiAgICBzZXJpZXM6IFsuLi53YXRlcmZhbGxTZXJpZXMod2F0ZXJmYWxsKSwgLi4ucmVmZXJlbmNlQ2FycmllcnMocmVmZXJlbmNlcywgY2F0ZWdvcmllcyldLFxuICB9O1xufVxuXG4vLyBBbiBpbnZpc2libGUgYmFzZSBzZXJpZXMgbGlmdHMgZWFjaCB2aXNpYmxlIGJhciB0byB3aGVyZSBpdHMgc3RlcCBzdGFydHMuXG4vLyBCb3RoIHN0YWNrIHdpdGggdGhlICdhbGwnIHN0cmF0ZWd5LCB3aGljaCBhZGRzIHNpZ25lZCB2YWx1ZXMgaW4gc2VyaWVzIG9yZGVyLFxuLy8gc28gYSBmYWxsIGRyYXdzIERPV04gZnJvbSB0aGUgdG90YWwgYmVmb3JlIGl0LCBldmVuIGFjcm9zcyB6ZXJvLiBUaGUgZGVmYXVsdFxuLy8gc2FtZS1zaWduIHN0YWNraW5nIHdvdWxkIGhhbmcgYSBuZWdhdGl2ZSBiYXIgYmVsb3cgdGhlIGF4aXMgaW5zdGVhZC5cbmZ1bmN0aW9uIHdhdGVyZmFsbFNlcmllcyh3YXRlcmZhbGw6IEV4dHJhY3RlZFdhdGVyZmFsbCk6IFNlcmllc09wdGlvbltdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0eXBlOiAnYmFyJyxcbiAgICAgIHN0YWNrOiAnd2F0ZXJmYWxsJyxcbiAgICAgIHN0YWNrU3RyYXRlZ3k6ICdhbGwnLFxuICAgICAgZGF0YTogd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5zdGFydCksXG4gICAgICBiYXJNYXhXaWR0aDogNDgsXG4gICAgICBpdGVtU3R5bGU6IHsgY29sb3I6ICd0cmFuc3BhcmVudCcgfSxcbiAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IHdhdGVyZmFsbC5uYW1lLFxuICAgICAgdHlwZTogJ2JhcicsXG4gICAgICBzdGFjazogJ3dhdGVyZmFsbCcsXG4gICAgICBzdGFja1N0cmF0ZWd5OiAnYWxsJyxcbiAgICAgIGJhck1heFdpZHRoOiA0OCxcbiAgICAgIC8vIFRoZSBzZXJpZXMgY29sb3IgaXMgdGhlIHJpc2UgY29sb3Igc28gYSBwaW5uZWQgbGVnZW5kIHNob3dzIGl0OyBlYWNoXG4gICAgICAvLyBiYXIgaXMgdGhlbiBjb2xvcmVkIGJ5IHdoYXQgaXQgZG9lcyB0byB0aGUgdG90YWwuIEEgY2xpY2sgb24gdGhlXG4gICAgICAvLyBjbG9zaW5nIFRvdGFsIGRvZXMgbm90aGluZywgc28gaXQga2VlcHMgdGhlIGFycm93IGV2ZW4gd2hlbiB0aGVcbiAgICAgIC8vIHN0ZXBzIHNob3cgYSBoYW5kICh3aXRoQ2xpY2tBY3Rpb25zKSwgYW5kIGl0cyB0b29sdGlwIG5hbWVzIG5vIGFjdGlvbi5cbiAgICAgIGl0ZW1TdHlsZTogeyBjb2xvcjogYCMke1JFUE9SVF9XQVRFUkZBTExfQ09MT1JTLnJpc2V9YCB9LFxuICAgICAgZGF0YTogd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gKHtcbiAgICAgICAgdmFsdWU6IHN0ZXAuY2hhbmdlLFxuICAgICAgICBpdGVtU3R5bGU6IHsgY29sb3I6IGAjJHtSRVBPUlRfV0FURVJGQUxMX0NPTE9SU1tzdGVwLmtpbmRdfWAgfSxcbiAgICAgICAgLi4uKHN0ZXAua2luZCA9PT0gJ3RvdGFsJyA/IHsgY3Vyc29yOiAnZGVmYXVsdCcgfSA6IHt9KSxcbiAgICAgIH0pKSxcbiAgICB9LFxuICBdO1xufVxuXG4vLyBBIHN0ZXAncyB0b29sdGlwOiBpdHMgcGVyaW9kLCBob3cgZmFyIGl0IG1vdmVkIHRoZSBydW5uaW5nIHRvdGFsIGFuZCB3aGVyZVxuLy8gdGhhdCBsZWZ0IGl0LiBUaGUgY2xvc2luZyBUb3RhbCBzaG93cyB0aGUgdG90YWwgYWxvbmUuIFRoZSBjYXRlZ29yeSBhbmQgdGhlXG4vLyBtZWFzdXJlIG5hbWUgY29tZSBmcm9tIHRoZSBkYXRhIGFuZCB0aGUgY29uZmlnLCBhbmQgRUNoYXJ0cyBzZXRzIHRoZSB0b29sdGlwXG4vLyBhcyBIVE1MLCBzbyBib3RoIGFyZSBlc2NhcGVkLiBQZXJpb2RzIGFuZCBhbW91bnRzIGFyZSB3cml0dGVuIGluIHRoZSByZXBvcnQnc1xuLy8gbG9jYWxlLCBhbW91bnRzIGluIHRoZSBtZWFzdXJlJ3MgbnVtYmVyIGZvcm1hdCAoYSBwbGFpbiBudW1iZXIgd2l0aG91dCBvbmUpO1xuLy8gdGhlIHdvcmRzICgnUnVubmluZyB0b3RhbCcpIHN0YXkgRW5nbGlzaC5cbmZ1bmN0aW9uIHdhdGVyZmFsbFRvb2x0aXAoXG4gIHdhdGVyZmFsbDogRXh0cmFjdGVkV2F0ZXJmYWxsLFxuICBpbmRleDogbnVtYmVyLFxuICBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwsXG4gIGRhdGVMYWJlbDogUmVwb3J0Q2hhcnREYXRlTGFiZWwsXG4gIHNwZWM6IE51bWJlckZvcm1hdFNwZWMgfCB1bmRlZmluZWQsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBzdHJpbmcge1xuICBjb25zdCBzdGVwID0gd2F0ZXJmYWxsLnN0ZXBzW2luZGV4XTtcbiAgY29uc3QgY2F0ZWdvcnkgPSBlc2NhcGVIdG1sKGdyYW51bGFyaXR5XG4gICAgPyBmb3JtYXRQZXJpb2RMYWJlbChzdGVwLmNhdGVnb3J5LCBncmFudWxhcml0eSwgdHJ1ZSwgY29udGV4dC5sb2NhbGUsIGRhdGVMYWJlbClcbiAgICA6IHN0ZXAuY2F0ZWdvcnkpO1xuICBjb25zdCBuYW1lID0gZXNjYXBlSHRtbCh3YXRlcmZhbGwubmFtZSk7XG4gIGNvbnN0IGFtb3VudCA9ICh2YWx1ZTogbnVtYmVyIHwgbnVsbCkgPT4gZm9ybWF0TnVtYmVyKHZhbHVlLCBzcGVjID8/IHt9LCBjb250ZXh0KTtcblxuICBpZiAoc3RlcC5raW5kID09PSAndG90YWwnKSB7XG4gICAgcmV0dXJuIGAke2NhdGVnb3J5fTxici8+JHtuYW1lfTogJHthbW91bnQoc3RlcC5jaGFuZ2UpfWA7XG4gIH1cblxuICBjb25zdCBzaWduID0gKHN0ZXAuY2hhbmdlID8/IDApID4gMCA/ICcrJyA6ICcnO1xuXG4gIHJldHVybiBgJHtjYXRlZ29yeX08YnIvPiR7bmFtZX06ICR7c2lnbn0ke2Ftb3VudChzdGVwLmNoYW5nZSl9YFxuICAgICsgYDxici8+UnVubmluZyB0b3RhbDogJHthbW91bnQoc3RlcC5zdGFydCArIChzdGVwLmNoYW5nZSA/PyAwKSl9YDtcbn1cblxuLy8gRGVmYXVsdCBsZWdlbmQgcGxhY2VtZW50IHdoZW4gdGhlIGNvbmZpZyBkb2Vzbid0IHBpbiBvbmU6IHBpZSBjaGFydHMgcmVhZFxuLy8gYmVzdCB3aXRoIHRoZSBzbGljZSBrZXkgYmVzaWRlIHRoZW0gKHJpZ2h0KTsgYXhpcyBjaGFydHMgb25seSBuZWVkIGEgbGVnZW5kXG4vLyB0byB0ZWxsIG11bHRpcGxlIHNlcmllcyBhcGFydCwgc28gYSBzaW5nbGUtc2VyaWVzIGNoYXJ0IGhpZGVzIGl0LiBBbiBleHBsaWNpdFxuLy8gY29uZmlnLmxlZ2VuZCAoaW5jbHVkaW5nICdoaWRkZW4nKSBhbHdheXMgd2lucy4gU2hhcmVkIHdpdGggdGhlIFBvd2VyUG9pbnRcbi8vIGV4cG9ydCBzbyBib3RoIG1lZGlhIHBsYWNlIHRoZSBsZWdlbmQgaWRlbnRpY2FsbHkuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKGNvbmZpZzogQ2hhcnRDb25maWcsIHNlcmllc0NvdW50OiBudW1iZXIsIGNvbG9yQnkgPSBmYWxzZSk6IExlZ2VuZFBvc2l0aW9uIHtcbiAgaWYgKGNvbmZpZy5sZWdlbmQpIHtcbiAgICByZXR1cm4gY29uZmlnLmxlZ2VuZDtcbiAgfVxuXG4gIGNvbnN0IHBpZSA9IGNvbmZpZy5jaGFydFR5cGUgPT09ICdwaWUnIHx8IGNvbmZpZy5jaGFydFR5cGUgPT09ICdkb251dCc7XG5cbiAgLy8gY29sb3JCeSBtYXBzIGVhY2ggYmFyJ3MgY29sb3IgdG8gaXRzIGNhdGVnb3J5LCBzbyBpdCBuZWVkcyBhIGxlZ2VuZCBldmVuXG4gIC8vIHRob3VnaCBpdCdzIGEgc2luZ2xlIG1lYXN1cmUuXG4gIHJldHVybiBwaWUgfHwgY29sb3JCeSB8fCBzZXJpZXNDb3VudCA+IDEgPyAocGllID8gJ3JpZ2h0JyA6ICd0b3AnKSA6ICdoaWRkZW4nO1xufVxuXG4vLyBUaGUgdmlld2VyJ3MgbGVnZW5kIHBpY2tzIGNhcnJpZWQgaW50byBhbiBvcHRpb24gKGxlZ2VuZC5zZWxlY3RlZCk6IEVDaGFydHNcbi8vIHJlYWRzIHRoZW0gYnkgZW50cnkgbmFtZSwgYW4gZW50cnkgbm90IG5hbWVkIHN0YXlzIG9uLCBhbmQgYSBuYW1lIHRoZVxuLy8gY2hhcnQgbm8gbG9uZ2VyIGRyYXdzIGlzIGlnbm9yZWQuIEEgaGlkZGVuIGxlZ2VuZCB0YWtlcyBub25lLCBzbyBhIHNlcmllc1xuLy8gbmV2ZXIgc3RheXMgb2ZmIG9uY2UgaXRzIGxlZ2VuZCBpcyBnb25lIGFuZCBub3RoaW5nIGNhbiB0dXJuIGl0IGJhY2sgb24uXG5mdW5jdGlvbiBsZWdlbmRXaXRoU2VsZWN0ZWQob3B0aW9uOiBFQ2hhcnRzT3B0aW9uLCBzZWxlY3RlZDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KTogRUNoYXJ0c09wdGlvbiB7XG4gIGNvbnN0IGxlZ2VuZCA9IG9wdGlvbi5sZWdlbmQ7XG5cbiAgaWYgKCFPYmplY3Qua2V5cyhzZWxlY3RlZCkubGVuZ3RoIHx8ICFsZWdlbmQgfHwgQXJyYXkuaXNBcnJheShsZWdlbmQpIHx8IGxlZ2VuZC5zaG93ID09PSBmYWxzZSkge1xuICAgIHJldHVybiBvcHRpb247XG4gIH1cblxuICByZXR1cm4geyAuLi5vcHRpb24sIGxlZ2VuZDogeyAuLi5sZWdlbmQsIHNlbGVjdGVkOiB7IC4uLnNlbGVjdGVkIH0gfSB9O1xufVxuXG5mdW5jdGlvbiBsZWdlbmRPcHRpb24ocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uKTogTGVnZW5kQ29tcG9uZW50T3B0aW9uIHtcbiAgaWYgKHBvc2l0aW9uID09PSAnaGlkZGVuJykge1xuICAgIHJldHVybiB7IHNob3c6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBiYXNlOiBMZWdlbmRDb21wb25lbnRPcHRpb24gPSB7IHR5cGU6ICdzY3JvbGwnIH07XG5cbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IDAgfTtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIG9yaWVudDogJ3ZlcnRpY2FsJywgbGVmdDogMCwgdG9wOiAnbWlkZGxlJyB9O1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIG9yaWVudDogJ3ZlcnRpY2FsJywgcmlnaHQ6IDAsIHRvcDogJ21pZGRsZScgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiAwIH07XG4gIH1cbn1cblxuLy8gVGhlIHBsb3QncyBncmlkOiByb29tIG9uIHRoZSBsZWdlbmQncyBzaWRlIHNvIGl0IG5ldmVyIG92ZXJsYXBzIHRoZVxuLy8gYmFycy9saW5lcywgcGx1cyByb29tIGZvciB0aGUgY2F0ZWdvcnkgYW5kIHZhbHVlIGF4ZXMnIHRpdGxlcyBvbiB0aGVpclxuLy8gc2lkZXMsIHdoaWNoIGNvbnRhaW5MYWJlbCBkb2VzIG5vdCByZXNlcnZlIChpdCBjb3ZlcnMgdGhlIHRpY2sgbGFiZWxzIG9ubHkpLlxuZnVuY3Rpb24gYXhpc0dyaWQoXG4gIHBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbixcbiAgY2F0ZWdvcnlUaXRsZTogQXhpc1RpdGxlU2lkZSB8IG51bGwsXG4gIHZhbHVlVGl0bGU6IEF4aXNUaXRsZVNpZGUgfCBudWxsLFxuKTogRUNoYXJ0c09wdGlvblsnZ3JpZCddIHtcbiAgcmV0dXJuIFtjYXRlZ29yeVRpdGxlLCB2YWx1ZVRpdGxlXS5yZWR1Y2U8QXhpc0dyaWRSb29tPihcbiAgICAoZ3JpZCwgc2lkZSkgPT4gKHNpZGUgPyB7IC4uLmdyaWQsIFtzaWRlXTogZ3JpZFtzaWRlXSArIEFYSVNfTkFNRV9ST09NIH0gOiBncmlkKSxcbiAgICBsZWdlbmRHcmlkKHBvc2l0aW9uKSxcbiAgKTtcbn1cblxuLy8gUGxvdC1lZGdlIHJvb20gb24gd2hpY2hldmVyIHNpZGUgdGhlIGxlZ2VuZCBvY2N1cGllczsgY29udGFpbkxhYmVsIGtlZXBzIHRoZVxuLy8gdGljayBsYWJlbHMgaW5zaWRlIHdoYXQgaXMgbGVmdC5cbmZ1bmN0aW9uIGxlZ2VuZEdyaWQocG9zaXRpb246IExlZ2VuZFBvc2l0aW9uKTogQXhpc0dyaWRSb29tIHtcbiAgY29uc3QgYmFzZTogQXhpc0dyaWRSb29tID0geyBsZWZ0OiA4LCByaWdodDogMTYsIHRvcDogOCwgYm90dG9tOiA4LCBjb250YWluTGFiZWw6IHRydWUgfTtcblxuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogMzIgfTtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIGxlZnQ6IDk2IH07XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgcmlnaHQ6IDk2IH07XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IDMyIH07XG4gIH1cbn1cblxuLy8gVGhlIHN0YWNrIGEgc3RhY2tlZCBzZXJpZXMgam9pbnMuIE9uIGEgdHdvLWF4aXMgY2hhcnQgKGF4aXNJbmRleCBzZXQpIGVhY2hcbi8vIHR5cGUgc3RhY2tzIHBlciBheGlzOyBvdGhlcndpc2UgYSBjb21ibyBzdGFja3MgcGVyIHR5cGUgYW5kIGEgc2luZ2xlLXR5cGVcbi8vIGNoYXJ0IHN0YWNrcyBldmVyeXRoaW5nIHRvZ2V0aGVyLlxuZnVuY3Rpb24gc3RhY2tLZXkodHlwZTogQXhpc0NoYXJ0VHlwZSwgY29tYm86IGJvb2xlYW4sIGF4aXNJbmRleDogVmFsdWVBeGlzSW5kZXggfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoYXhpc0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYHRvdGFsLSR7dHlwZX0tJHtheGlzSW5kZXh9YDtcbiAgfVxuXG4gIHJldHVybiBjb21ibyA/IGB0b3RhbC0ke3R5cGV9YCA6ICd0b3RhbCc7XG59XG5cbi8vIEhvdyBidWlsZFNlcmllcyBkcmF3cyBvbmUgc2VyaWVzOiBpdHMgZHJhd24gdHlwZSwgdGhlIHN0YWNrIGl0IGpvaW5zLCB3aGV0aGVyXG4vLyBpdCBsYXlzIHRoZSBjb2xvckJ5IG92ZXJsYXAsIHdoZXRoZXIgdGhlIGNoYXJ0IGlzIGEgY29tYm8sIGl0cyB0b29sdGlwLCBpdHNcbi8vIHZhbHVlIGF4aXMgb24gYSB0d28tYXhpcyBjaGFydCwgaXRzIG93biBDU1MgY29sb3IgKHVuZGVmaW5lZCBsZWF2ZXMgaXQgdG9cbi8vIHRoZSB0aGVtZSdzIHBhbGV0dGUgYnkgcG9zaXRpb24pLCBhbmQgaXRzIGRhdGEgbGFiZWxzIChudWxsIHByaW50cyBub25lKS5cbmludGVyZmFjZSBTZXJpZXNMYXlvdXQge1xuICB0eXBlOiBBeGlzQ2hhcnRUeXBlO1xuICBzdGFjazogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvdmVybGFwOiBib29sZWFuO1xuICBjb21ibzogYm9vbGVhbjtcbiAgdG9vbHRpcDogU2VyaWVzVG9vbHRpcDtcbiAgYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCB8IHVuZGVmaW5lZDtcbiAgY29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGFiZWxzOiBTZXJpZXNEYXRhTGFiZWxzIHwgbnVsbDtcbn1cblxuLy8gT25lIHNlcmllcyBvZiBhbiBheGlzIGNoYXJ0LiBBIG1lYXN1cmUncyBkaXNwbGF5IGtleXMgb25seSBhZGQgd2hhdCB0aGV5XG4vLyBjaGFuZ2UsIHNvIGEgc2VyaWVzIHRoYXQgc2V0cyBub25lIGlzIGRyYXduIGJ5IHRoZSB0aGVtZSBhcyBiZWZvcmU6IGl0cyBvd25cbi8vIGNvbG9yICh0aGUgYmFyLCB0aGUgbGluZSwgdGhlIGFyZWEgdW5kZXIgaXQgYW5kIGl0cyBsZWdlbmQga2V5IGFsbCBmb2xsb3dcbi8vIGl0ZW1TdHlsZSksIGl0cyBsaW5lIHN0eWxlIGFuZCBpdHMgbWFya2Vycywgc2hvd24gb24gZXZlcnkgcG9pbnQgdW5sZXNzXG4vLyBtYXJrZXJzIGlzIGZhbHNlLiBEYXRhIGxhYmVscyBjb21lIGxhc3QsIG9uIHRoZSBzZXJpZXMgb3Igb24gaXRzIGxhdGVzdFxuLy8gcG9pbnQuXG5mdW5jdGlvbiBidWlsZFNlcmllcyhcbiAgc2VyaWVzOiBFeHRyYWN0ZWRDaGFydFNlcmllc0l0ZW0sXG4gIHZhbHVlczogKG51bWJlciB8IG51bGwgfCBTaGFyZURhdGFJdGVtKVtdLFxuICBsYXlvdXQ6IFNlcmllc0xheW91dCxcbik6IFNlcmllc09wdGlvbiB7XG4gIC8vIE9uIGEgdHdvLWF4aXMgY2hhcnQgZXZlcnkgc2VyaWVzIG5hbWVzIGl0cyB2YWx1ZSBheGlzLlxuICBjb25zdCBheGlzID0gbGF5b3V0LmF4aXNJbmRleCA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHlBeGlzSW5kZXg6IGxheW91dC5heGlzSW5kZXggfTtcbiAgY29uc3QgY29sb3IgPSBsYXlvdXQuY29sb3I7XG4gIGNvbnN0IGl0ZW1TdHlsZSA9IGNvbG9yID8geyBpdGVtU3R5bGU6IHsgY29sb3IgfSB9IDoge307XG5cbiAgaWYgKGxheW91dC50eXBlID09PSAnYmFyJykge1xuICAgIC8vICdvdXRzaWRlJyBmb2xsb3dzIGVhY2ggYmFyJ3Mgc2lnbjogcGFzdCBhIHBvc2l0aXZlIGJhcidzIGVuZCBhbmQgYmVsb3dcbiAgICAvLyAob3IgbGVmdCBvZikgYSBuZWdhdGl2ZSBvbmUncywgd2hlcmUgJ3RvcCcgd291bGQgc2l0IGF0IHRoZSB6ZXJvIGxpbmUuXG4gICAgY29uc3QgeyBzZXJpZXM6IGxhYmVscywgZGF0YSB9ID0gcGxhY2VEYXRhTGFiZWxzKGxheW91dC5sYWJlbHMsIGxheW91dC5zdGFjayA/ICdpbnNpZGUnIDogJ291dHNpZGUnLCB2YWx1ZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHNlcmllcy5uYW1lLFxuICAgICAgdHlwZTogJ2JhcicsXG4gICAgICBkYXRhLFxuICAgICAgc3RhY2s6IGxheW91dC5zdGFjayxcbiAgICAgIHRvb2x0aXA6IGxheW91dC50b29sdGlwLFxuICAgICAgLi4uYXhpcyxcbiAgICAgIC4uLml0ZW1TdHlsZSxcbiAgICAgIGJhck1heFdpZHRoOiA0OCxcbiAgICAgIC8vIGNvbG9yQnk6IG92ZXJsYXAgdGhlIHBlci1jYXRlZ29yeSBzZXJpZXMgc28gZWFjaCBiYXIgcmVuZGVycyBmdWxsLXdpZHRoLlxuICAgICAgLi4uKGxheW91dC5vdmVybGFwID8geyBiYXJHYXA6ICctMTAwJScsIGJhckNhdGVnb3J5R2FwOiAnMjAlJyB9IDoge30pLFxuICAgICAgLi4ubGFiZWxzLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBsaW5lVHlwZSA9IG1lYXN1cmVMaW5lU3R5bGUoc2VyaWVzLm1lYXN1cmUpO1xuICBjb25zdCBsaW5lU3R5bGUgPSBjb2xvciB8fCBsaW5lVHlwZVxuICAgID8geyBsaW5lU3R5bGU6IHsgLi4uKGNvbG9yID8geyBjb2xvciB9IDoge30pLCAuLi4obGluZVR5cGUgPyB7IHR5cGU6IGxpbmVUeXBlIH0gOiB7fSkgfSB9XG4gICAgOiB7fTtcbiAgY29uc3QgeyBzZXJpZXM6IGxhYmVscywgZGF0YSB9ID0gcGxhY2VEYXRhTGFiZWxzKGxheW91dC5sYWJlbHMsICd0b3AnLCB2YWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogc2VyaWVzLm5hbWUsXG4gICAgdHlwZTogJ2xpbmUnLFxuICAgIGRhdGEsXG4gICAgc3RhY2s6IGxheW91dC5zdGFjayxcbiAgICB0b29sdGlwOiBsYXlvdXQudG9vbHRpcCxcbiAgICAuLi5heGlzLFxuICAgIC4uLml0ZW1TdHlsZSxcbiAgICAuLi5saW5lU3R5bGUsXG4gICAgLi4uKHNlcmllcy5tZWFzdXJlLm1hcmtlcnMgPT09IGZhbHNlID8geyBzaG93U3ltYm9sOiBmYWxzZSB9IDoge30pLFxuICAgIHNtb290aDogdHJ1ZSxcbiAgICBzeW1ib2xTaXplOiA2LFxuICAgIGFyZWFTdHlsZTogbGF5b3V0LnR5cGUgPT09ICdhcmVhJyA/IHsgb3BhY2l0eTogMC4yNSB9IDogdW5kZWZpbmVkLFxuICAgIC8vIEluIGEgY29tYm8gdGhlIGxpbmUgaXMgZHJhd24gb3ZlciB0aGUgYmFycyB3aGF0ZXZlciBvcmRlciB0aGUgbWVhc3VyZXNcbiAgICAvLyBjb21lIGluOyBhdCB0aGUgc2FtZSB6IGEgbGF0ZXIgYmFyIHNlcmllcyB3b3VsZCBwYWludCBhY3Jvc3MgaXQuXG4gICAgLi4uKGxheW91dC5jb21ibyA/IHsgejogMyB9IDoge30pLFxuICAgIC4uLmxhYmVscyxcbiAgfTtcbn1cblxuLy8gQSAxMDAlIHN0YWNrZWQgc2VyaWVzJyBwb2ludHM6IGVhY2ggc2hhcmUsIHBsb3R0ZWQgYW5kIHN0YWNrZWQsIHdpdGggdGhlXG4vLyB2YWx1ZSBpdCBjYW1lIGZyb20uXG5mdW5jdGlvbiBzaGFyZURhdGEodmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSwgc2hhcmVzOiAobnVtYmVyIHwgbnVsbClbXSk6IFNoYXJlRGF0YUl0ZW1bXSB7XG4gIHJldHVybiB2YWx1ZXMubWFwKChyYXcsIGluZGV4KSA9PiAoeyB2YWx1ZTogc2hhcmVzW2luZGV4XSA/PyBudWxsLCByYXcgfSkpO1xufVxuXG4vLyBXaGF0IGEgc2VyaWVzIHByaW50cyBiZXNpZGUgaXRzIHBvaW50cyAoQTIgZGF0YSBsYWJlbHMpOiBldmVyeSBwb2ludFxuLy8gKCdhbGwnKSwgZXZlcnkgcG9pbnQgd2hvc2UgbGFiZWwgZml0cyB3aXRob3V0IG92ZXJsYXBwaW5nIGFub3RoZXIgKCdhdXRvJyxcbi8vIExhYmVsTGF5b3V0J3MgaGlkZU92ZXJsYXApLCBvciBvbmx5IGl0cyBsYXRlc3QgcG9pbnQgKCdsYXN0JykuIG5vbmUsIGFuXG4vLyBhYnNlbnQgbW9kZSBvciBvbmUgdGhlIHZpZXdlciBkb2VzIG5vdCBrbm93IHByaW50cyBub3RoaW5nLCBhbmQgdGhlIHNlcmllc1xuLy8gaXMgbGVmdCBhcyBpdCB3YXMuIEEgY29sb3JCeSBjaGFydCdzIHNlcmllcyBlYWNoIGhvbGQgb25lIGJhciwgc28gJ2xhc3QnXG4vLyBsYWJlbHMgZXZlcnkgYmFyIHRoZXJlLCBhcyAnYWxsJyBkb2VzLlxuLy9cbi8vIFdoZXJlIHRoZSBsYWJlbCBzaXRzIGRlcGVuZHMgb24gd2hhdCB0aGUgc2VyaWVzIGRyYXdzLCBzbyBidWlsZFNlcmllc1xuLy8gcGxhY2VzIGl0IChwbGFjZURhdGFMYWJlbHMpLlxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFMYWJlbE9wdGlvbihcbiAgbW9kZTogUmVwb3J0Q2hhcnREYXRhTGFiZWxzIHwgdW5kZWZpbmVkLFxuICBmb3JtYXR0ZXI6IERhdGFMYWJlbEZvcm1hdHRlcixcbik6IFNlcmllc0RhdGFMYWJlbHMgfCBudWxsIHtcbiAgY29uc3QgdGV4dCA9IHsgc2hvdzogdHJ1ZSBhcyBjb25zdCwgZm9udFNpemU6IFJFUE9SVF9EQVRBX0xBQkVMX0ZPTlRfU0laRSwgZm9ybWF0dGVyIH07XG5cbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSBSZXBvcnRDaGFydERhdGFMYWJlbHMuQWxsOlxuICAgICAgcmV0dXJuIHsgdGV4dCwgaGlkZU92ZXJsYXA6IGZhbHNlLCBsYXN0T25seTogZmFsc2UgfTtcbiAgICBjYXNlIFJlcG9ydENoYXJ0RGF0YUxhYmVscy5BdXRvOlxuICAgICAgcmV0dXJuIHsgdGV4dCwgaGlkZU92ZXJsYXA6IHRydWUsIGxhc3RPbmx5OiBmYWxzZSB9O1xuICAgIGNhc2UgUmVwb3J0Q2hhcnREYXRhTGFiZWxzLkxhc3Q6XG4gICAgICByZXR1cm4geyB0ZXh0LCBoaWRlT3ZlcmxhcDogZmFsc2UsIGxhc3RPbmx5OiB0cnVlIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vIEEgc2VyaWVzJyBkYXRhIGxhYmVscyBhdCBgcG9zaXRpb25gOiBvbiB0aGUgc2VyaWVzICgnYWxsJywgYW5kIHdpdGggdGhlXG4vLyBvdmVybGFwIGhpZGluZyAnYXV0bycpLCBvciBvbiBpdHMgbGF0ZXN0IG5vbi1lbXB0eSBwb2ludCBhbG9uZSAoJ2xhc3QnKS5cbi8vIE5vIGxhYmVscyBsZWF2ZSB0aGUgc2VyaWVzIGFuZCBpdHMgcG9pbnRzIGFzIHRoZXkgd2VyZS5cbmZ1bmN0aW9uIHBsYWNlRGF0YUxhYmVsczxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24+KFxuICBsYWJlbHM6IFNlcmllc0RhdGFMYWJlbHMgfCBudWxsLFxuICBwb3NpdGlvbjogUCxcbiAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbCB8IFNoYXJlRGF0YUl0ZW0pW10sXG4pOiBQbGFjZWREYXRhTGFiZWxzPFA+IHtcbiAgaWYgKCFsYWJlbHMpIHtcbiAgICByZXR1cm4geyBzZXJpZXM6IHt9LCBkYXRhOiB2YWx1ZXMgfTtcbiAgfVxuXG4gIGNvbnN0IGxhYmVsOiBEYXRhTGFiZWw8UD4gPSB7IC4uLmxhYmVscy50ZXh0LCBwb3NpdGlvbiB9O1xuXG4gIGlmIChsYWJlbHMubGFzdE9ubHkpIHtcbiAgICByZXR1cm4geyBzZXJpZXM6IHt9LCBkYXRhOiBsYWJlbExhc3RQb2ludCh2YWx1ZXMsIGxhYmVsKSB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXJpZXM6IHsgbGFiZWwsIC4uLihsYWJlbHMuaGlkZU92ZXJsYXAgPyB7IGxhYmVsTGF5b3V0OiB7IGhpZGVPdmVybGFwOiB0cnVlIH0gfSA6IHt9KSB9LFxuICAgIGRhdGE6IHZhbHVlcyxcbiAgfTtcbn1cblxuLy8gQSBzZXJpZXMnIHBvaW50cyB3aXRoIGl0cyBsYXRlc3Qgbm9uLWVtcHR5IHBvaW50IGNhcnJ5aW5nIHRoZSBsYWJlbC4gQVxuLy8gc2VyaWVzIHdpdGggbm8gdmFsdWUgYW55d2hlcmUgaXMgbGVmdCBhcyBpdCB3YXMuXG5mdW5jdGlvbiBsYWJlbExhc3RQb2ludDxQIGV4dGVuZHMgRGF0YUxhYmVsUG9zaXRpb24+KFxuICB2YWx1ZXM6IChudW1iZXIgfCBudWxsIHwgU2hhcmVEYXRhSXRlbSlbXSxcbiAgbGFiZWw6IERhdGFMYWJlbDxQPixcbik6IFNlcmllc0RhdGFJdGVtPFA+W10ge1xuICBjb25zdCBsYXN0ID0gdmFsdWVzLnJlZHVjZTxudW1iZXI+KChmb3VuZCwgaXRlbSwgaW5kZXgpID0+IChwb2ludFZhbHVlKGl0ZW0pID09PSBudWxsID8gZm91bmQgOiBpbmRleCksIC0xKTtcblxuICByZXR1cm4gdmFsdWVzLm1hcCgoaXRlbSwgaW5kZXgpOiBTZXJpZXNEYXRhSXRlbTxQPiA9PiB7XG4gICAgaWYgKGluZGV4ICE9PSBsYXN0KSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNTaGFyZURhdGFJdGVtKGl0ZW0pID8geyAuLi5pdGVtLCBsYWJlbCB9IDogeyB2YWx1ZTogaXRlbSwgbGFiZWwgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzU2hhcmVEYXRhSXRlbShpdGVtOiBudW1iZXIgfCBudWxsIHwgU2hhcmVEYXRhSXRlbSk6IGl0ZW0gaXMgU2hhcmVEYXRhSXRlbSB7XG4gIHJldHVybiBpdGVtICE9PSBudWxsICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jztcbn1cblxuLy8gSG93IGEgc2VyaWVzJyBkYXRhIGxhYmVscyB3cml0ZSBhIHZhbHVlLiBBIDEwMCUgc3RhY2tlZCBzZXJpZXMgcHJpbnRzIGl0c1xuLy8gc2hhcmUgYXMgYSB3aG9sZSBwZXJjZW50YWdlLCBhcyB0aGUgc2hhcmUgYXhpcydzIHRpY2tzIGRvLiBBIHNlcmllcyBvbiBhblxuLy8gYXhpcyB3aXRoIGEgbnVtYmVyIGZvcm1hdCBwcmludHMgaXRzIHZhbHVlIGluIGl0cyBtZWFzdXJlJ3MgZm9ybWF0LCBhdCB0aGVcbi8vIHVuaXRzIGFuZCBkZWNpbWFscyB0aGUgYXhpcyBkZWNpZGVkLCBzbyBhIGxhYmVsIHJlYWRzIGxpa2UgdGhlIHRpY2tzIGJlc2lkZVxuLy8gaXQuIEFueSBvdGhlciBwcmludHMgdGhlIHBsYWluIGxvY2FsZS1ncm91cGVkIG51bWJlciBpdHMgdG9vbHRpcCBzaG93cy4gQVxuLy8gc2hhcmUgcG9pbnQncyByYXcgdmFsdWUgaXMgd2hhdCBhIGxhYmVsIHJlYWRzIHdoZW4gaXQgY2FycmllcyBvbmUuXG5mdW5jdGlvbiBkYXRhTGFiZWxGb3JtYXR0ZXIoXG4gIG1lYXN1cmU6IENoYXJ0TWVhc3VyZSxcbiAgYXhpc0Zvcm1hdDogVmFsdWVBeGlzRm9ybWF0IHwgbnVsbCxcbiAgc2hhcmU6IGJvb2xlYW4sXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBEYXRhTGFiZWxGb3JtYXR0ZXIge1xuICBpZiAoc2hhcmUpIHtcbiAgICBjb25zdCBwZXJjZW50ID0gd2hvbGVQZXJjZW50Rm9ybWF0dGVyKGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIChwYXJhbXMpID0+IHBlcmNlbnQocGFyYW1zLnZhbHVlKTtcbiAgfVxuXG4gIGlmIChheGlzRm9ybWF0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgdW5pdHM6IGF4aXNGb3JtYXQuY2hhcnQudW5pdHMsIGRlY2ltYWxzOiBheGlzRm9ybWF0LmNoYXJ0LmRlY2ltYWxzIH07XG5cbiAgICByZXR1cm4gKHBhcmFtcykgPT4gZm9ybWF0TnVtYmVyKGRhdGFMYWJlbFZhbHVlKHBhcmFtcyksIG1lYXN1cmUsIGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIChwYXJhbXMpID0+IGZvcm1hdFBsYWluTnVtYmVyKGRhdGFMYWJlbFZhbHVlKHBhcmFtcyksIGNvbnRleHQubG9jYWxlKTtcbn1cblxuLy8gVGhlIHZhbHVlIGEgZGF0YSBsYWJlbCB3cml0ZXM6IHRoZSByYXcgdmFsdWUgaXRzIHBvaW50IGNhcnJpZXMsIGVsc2UgdGhlXG4vLyBwbG90dGVkIG9uZS5cbmZ1bmN0aW9uIGRhdGFMYWJlbFZhbHVlKHBhcmFtczogRGF0YUxhYmVsUGFyYW1zKTogdW5rbm93biB7XG4gIGNvbnN0IGRhdGEgPSBwYXJhbXMuZGF0YTtcbiAgY29uc3QgcmF3ID0gZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyAoZGF0YSBhcyB7IHJhdz86IHVua25vd24gfSkucmF3IDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiByYXcgPz8gcGFyYW1zLnZhbHVlO1xufVxuXG4vLyBBIDEwMCUgc3RhY2tlZCBjaGFydCdzIHRvb2x0aXA6IHRoZSBjYXRlZ29yeSwgdGhlbiBlYWNoIHNlcmllcyBvbiBpdHMgb3duXG4vLyBsaW5lLCBhIHNoYXJlIGFzIGl0cyBwZXJjZW50YWdlIHRvIG9uZSBkZWNpbWFsIGZvbGxvd2VkIGJ5IHRoZSB2YWx1ZSBpdCBjYW1lXG4vLyBmcm9tIGluIGl0cyBtZWFzdXJlJ3MgZm9ybWF0ICgnMjUuMCUgKDEpJyksIGFuZCBhbnkgb3RoZXIgc2VyaWVzIGJ5IGl0cyBvd25cbi8vIHZhbHVlLiBUaGUgY2F0ZWdvcnkgYW5kIHRoZSBzZXJpZXMgbmFtZXMgY29tZSBmcm9tIHRoZSBkYXRhIGFuZCB0aGUgY29uZmlnLFxuLy8gYW5kIEVDaGFydHMgc2V0cyB0aGUgdG9vbHRpcCBhcyBIVE1MLCBzbyBib3RoIGFyZSBlc2NhcGVkLlxuZnVuY3Rpb24gcGVyY2VudFRvb2x0aXAoXG4gIHBhcmFtczogVG9vbHRpcENvbXBvbmVudEZvcm1hdHRlckNhbGxiYWNrUGFyYW1zLFxuICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMsXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCxcbiAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbiAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zIDogW3BhcmFtc107XG4gIGNvbnN0IGRhdGFJbmRleCA9IGl0ZW1zWzBdPy5kYXRhSW5kZXggPz8gMDtcbiAgY29uc3QgY2F0ZWdvcnkgPSBleHRyYWN0ZWQuY2F0ZWdvcmllc1tkYXRhSW5kZXhdID8/ICcnO1xuICBjb25zdCBoZWFkaW5nID0gZXNjYXBlSHRtbChncmFudWxhcml0eVxuICAgID8gZm9ybWF0UGVyaW9kTGFiZWwoY2F0ZWdvcnksIGdyYW51bGFyaXR5LCB0cnVlLCBjb250ZXh0LmxvY2FsZSwgZGF0ZUxhYmVsKVxuICAgIDogY2F0ZWdvcnkpO1xuICBjb25zdCByYXRpb0NvbnRleHQgPSB7IC4uLmNvbnRleHQsIHJhdGlvUGVyY2VudDogdHJ1ZSB9O1xuXG4gIGNvbnN0IGxpbmVzID0gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgY29uc3Qgc2VyaWVzID0gZXh0cmFjdGVkLnNlcmllc1tpdGVtLnNlcmllc0luZGV4ID8/IC0xXTtcbiAgICBjb25zdCBtYXJrZXIgPSB0eXBlb2YgaXRlbS5tYXJrZXIgPT09ICdzdHJpbmcnID8gaXRlbS5tYXJrZXIgOiAnJztcbiAgICBjb25zdCBsYWJlbCA9IGAke21hcmtlcn0gJHtlc2NhcGVIdG1sKGl0ZW0uc2VyaWVzTmFtZSA/PyBzZXJpZXM/Lm5hbWUgPz8gJycpfWA7XG4gICAgY29uc3QgdmFsdWUgPSBzZXJpZXNUb29sdGlwKHNlcmllcz8ubWVhc3VyZSwgY29udGV4dCkudmFsdWVGb3JtYXR0ZXIoc2VyaWVzPy52YWx1ZXNbaXRlbS5kYXRhSW5kZXhdID8/IG51bGwpO1xuICAgIGNvbnN0IHNoYXJlID0gc2hhcmVzLmdldChpdGVtLnNlcmllc0luZGV4ID8/IC0xKT8uW2l0ZW0uZGF0YUluZGV4XSA/PyBudWxsO1xuXG4gICAgcmV0dXJuIHNoYXJlID09PSBudWxsXG4gICAgICA/IGAke2xhYmVsfTogJHt2YWx1ZX1gXG4gICAgICA6IGAke2xhYmVsfTogJHtmb3JtYXROdW1iZXIoc2hhcmUsIFBFUkNFTlRfU0hBUkVfRk9STUFULCByYXRpb0NvbnRleHQpfSAoJHt2YWx1ZX0pYDtcbiAgfSk7XG5cbiAgcmV0dXJuIFtoZWFkaW5nLCAuLi5saW5lc10uam9pbignPGJyLz4nKTtcbn1cblxuLy8gQSB2YWx1ZSBheGlzOiBpdHMgdGl0bGUgYW5kIHJhbmdlIGZyb20gdGhlIGNvbmZpZywgaXRzIHRpY2sgbGFiZWxzIGZyb21cbi8vIHZhbHVlQXhpc0xhYmVsLiBBIHZlcnRpY2FsIGNoYXJ0J3MgdGl0bGUgc2l0cyBhYm92ZSB0aGUgYXhpcyBsaW5lLCByZWFkaW5nXG4vLyBhd2F5IGZyb20gdGhlIHBsb3QncyBlZGdlOyBhIGhvcml6b250YWwgY2hhcnQncyBpcyBjZW50ZXJlZCBiZWxvdyB0aGUgdGlja3MuXG4vLyBBIGJvdW5kIG9yIGludGVydmFsIHRoYXQgaXMgbm90IGEgdXNhYmxlIG51bWJlciBpcyBsZWZ0IHRvIEVDaGFydHMuIEEgMTAwJVxuLy8gc3RhY2tlZCBjaGFydCdzIHNoYXJlIGF4aXMgKGV4dHJhcy5wZXJjZW50TWluKSBoYXMgaXRzIG93biBmaXhlZCByYW5nZS5cbmZ1bmN0aW9uIHZhbHVlQXhpc09wdGlvbihcbiAgYXhpczogQ2hhcnRWYWx1ZUF4aXMgfCB1bmRlZmluZWQsXG4gIGhvcml6b250YWw6IGJvb2xlYW4sXG4gIGF4aXNMYWJlbDogVmFsdWVBeGlzTGFiZWwsXG4gIGV4dHJhczogVmFsdWVBeGlzRXh0cmFzID0ge30sXG4pIHtcbiAgY29uc3QgcmFuZ2UgPSBleHRyYXMucGVyY2VudE1pbiA9PT0gdW5kZWZpbmVkXG4gICAgPyB2YWx1ZUF4aXNSYW5nZShheGlzKVxuICAgIDogeyBtaW46IGV4dHJhcy5wZXJjZW50TWluLCBtYXg6IFBFUkNFTlRfQVhJU19NQVgsIGludGVydmFsOiBQRVJDRU5UX0FYSVNfSU5URVJWQUwgfTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICd2YWx1ZScgYXMgY29uc3QsXG4gICAgbmFtZTogYXhpcz8ubGFiZWwgfHwgdW5kZWZpbmVkLFxuICAgIG5hbWVMb2NhdGlvbjogaG9yaXpvbnRhbCA/ICdtaWRkbGUnIGFzIGNvbnN0IDogJ2VuZCcgYXMgY29uc3QsXG4gICAgbmFtZUdhcDogaG9yaXpvbnRhbCA/IDI4IDogMTAsXG4gICAgbmFtZVRleHRTdHlsZTogaG9yaXpvbnRhbCA/IHVuZGVmaW5lZCA6IHsgYWxpZ246IGV4dHJhcy5pbmRleCA9PT0gMSA/ICdyaWdodCcgYXMgY29uc3QgOiAnbGVmdCcgYXMgY29uc3QgfSxcbiAgICAvLyBBIHBpbm5lZCBib3VuZCB3aW5zOyBvbmUgbGVmdCBvcGVuIHJlYWNoZXMgdGhlIHJlZmVyZW5jZXMgKHJlYWNoTWluKSxcbiAgICAvLyBvciBvbiBhIHJhbmsgYXhpcyBzdGFydHMgYXQgcmFuayAxLlxuICAgIG1pbjogcmFuZ2UubWluID8/IChleHRyYXMucmFuayA/IFJBTktfQVhJU19NSU4gOiByZWFjaE1pbihleHRyYXMucmVhY2gpKSxcbiAgICBtYXg6IHJhbmdlLm1heCA/PyByZWFjaE1heChleHRyYXMucmVhY2gpLFxuICAgIGludGVydmFsOiByYW5nZS5pbnRlcnZhbCxcbiAgICBheGlzTGFiZWwsXG4gICAgLi4uKGV4dHJhcy5yYW5rID8geyBpbnZlcnNlOiB0cnVlLCBtaW5JbnRlcnZhbDogMSB9IDoge30pLFxuICB9O1xufVxuXG4vLyBUaGUgcGFydCBvZiBhIHZhbHVlIGF4aXMncyByYW5nZSB0aGUgY29uZmlnIHBpbnMuIEEgYm91bmQgdGhhdCBpcyBub3QgYVxuLy8gZmluaXRlIG51bWJlciwgb3IgYW4gaW50ZXJ2YWwgdGhhdCBpcyBub3QgYSBwb3NpdGl2ZSBvbmUsIGlzIGxlZnQgb3V0LCBhbmRcbi8vIHRoZSBjaGFydCBwaWNrcyBpdCBmcm9tIHRoZSBkYXRhLiBTaGFyZWQgd2l0aCB0aGUgUG93ZXJQb2ludCBleHBvcnQgc28gYm90aFxuLy8gbWVkaWEgZHJhdyB0aGUgc2FtZSByYW5nZS5cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUF4aXNSYW5nZShheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCk6IHsgbWluPzogbnVtYmVyOyBtYXg/OiBudW1iZXI7IGludGVydmFsPzogbnVtYmVyIH0ge1xuICBjb25zdCBpbnRlcnZhbCA9IGF4aXNOdW1iZXIoYXhpcz8uaW50ZXJ2YWwpO1xuXG4gIHJldHVybiB7XG4gICAgbWluOiBheGlzTnVtYmVyKGF4aXM/Lm1pbiksXG4gICAgbWF4OiBheGlzTnVtYmVyKGF4aXM/Lm1heCksXG4gICAgaW50ZXJ2YWw6IGludGVydmFsICE9PSB1bmRlZmluZWQgJiYgaW50ZXJ2YWwgPiAwID8gaW50ZXJ2YWwgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8vIEEgdHdvLWF4aXMgY2hhcnQncyB2YWx1ZSBheGVzOiB0aGUgcHJpbWFyeSBvbiB0aGUgbGVmdCwgdGhlIHNlY29uZCBvbiB0aGVcbi8vIHJpZ2h0IHdpdGhvdXQgZ3JpZGxpbmVzIG9mIGl0cyBvd24uIEVhY2ggYXhpcydzIHRpY2tzIHRha2UgdGhlIGZvcm1hdCBvZiB0aGVcbi8vIG1lYXN1cmVzIHBsb3R0ZWQgYWdhaW5zdCBpdCAoYXhpc0xhYmVscykuIFdpdGhvdXQgYSByYW5nZSBvbiBlaXRoZXIgYXhpcyB0aGVcbi8vIHNlY29uZCBheGlzIGFsaWducyBpdHMgdGlja3MgdG8gdGhlIHByaW1hcnkncyBncmlkbGluZXMuXG4vL1xuLy8gT24gYSAxMDAlIHN0YWNrZWQgY2hhcnQgKHBlcmNlbnRNaW4gc2V0KSB0aGUgcHJpbWFyeSBheGlzIGlzIHRoZSBzaGFyZSBheGlzLFxuLy8gd2hvc2UgcmFuZ2UgaXMgZml4ZWQsIGFuZCB0aGUgc2Vjb25kIGF4aXMncyBzZXJpZXMgYXJlIG5vdCBzdGFja2VkLiBBbiBheGlzXG4vLyBvZiByYW5rcyBhbG9uZSAocmFua0F4ZXMpIGlzIGludmVydGVkLCBhbmQgdGhlIGF4ZXMgdGhlbiBrZWVwIHRoZWlyIG93blxuLy8gdGlja3MsIHNvIGEgcmFuayBheGlzIHN0ZXBzIGJ5IHdob2xlIHJhbmtzLlxuZnVuY3Rpb24gdHdvVmFsdWVBeGVzT3B0aW9uKFxuICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICBheGlzTGFiZWxzOiBWYWx1ZUF4aXNMYWJlbFtdLFxuICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICBwZXJjZW50TWluOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIHJlZmVyZW5jZXM6IERyYXduUmVmZXJlbmNlW10sXG4gIHJhbmtBeGVzOiBib29sZWFuW10sXG4pIHtcbiAgY29uc3QgcGVyY2VudCA9IHBlcmNlbnRNaW4gIT09IHVuZGVmaW5lZDtcbiAgY29uc3QgbGFiZWwgPSAoYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCkgPT4gYXhpc0xhYmVsc1theGlzSW5kZXhdO1xuXG4gIHJldHVybiBbXG4gICAgdmFsdWVBeGlzT3B0aW9uKGNvbmZpZy52YWx1ZUF4aXMsIGZhbHNlLCBwZXJjZW50ID8gcGVyY2VudEF4aXNMYWJlbChjb250ZXh0KSA6IGxhYmVsKDApLCB7XG4gICAgICBpbmRleDogMCxcbiAgICAgIHBlcmNlbnRNaW4sXG4gICAgICByZWFjaDogcmVmZXJlbmNlUmVhY2gocmVmZXJlbmNlcywgMCksXG4gICAgICByYW5rOiByYW5rQXhlc1swXSxcbiAgICB9KSxcbiAgICB7XG4gICAgICAuLi52YWx1ZUF4aXNPcHRpb24oY29uZmlnLnNlY29uZGFyeUF4aXMsIGZhbHNlLCBsYWJlbCgxKSwge1xuICAgICAgICBpbmRleDogMSxcbiAgICAgICAgcmVhY2g6IHJlZmVyZW5jZVJlYWNoKHJlZmVyZW5jZXMsIDEpLFxuICAgICAgICByYW5rOiByYW5rQXhlc1sxXSxcbiAgICAgIH0pLFxuICAgICAgcG9zaXRpb246ICdyaWdodCcgYXMgY29uc3QsXG4gICAgICBzcGxpdExpbmU6IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgIGFsaWduVGlja3M6ICFwZXJjZW50ICYmICFyYW5rQXhlc1swXSAmJiAhcmFua0F4ZXNbMV1cbiAgICAgICAgJiYgIWhhc0F4aXNSYW5nZShjb25maWcudmFsdWVBeGlzKSAmJiAhaGFzQXhpc1JhbmdlKGNvbmZpZy5zZWNvbmRhcnlBeGlzKSxcbiAgICB9LFxuICBdO1xufVxuXG4vLyBXaGV0aGVyIHRoZSBjb25maWcgcGlucyBhbnkgb2YgYW4gYXhpcydzIHJhbmdlOiBhIGJvdW5kIG9yIGEgdGljayBpbnRlcnZhbC5cbmZ1bmN0aW9uIGhhc0F4aXNSYW5nZShheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyh2YWx1ZUF4aXNSYW5nZShheGlzKSkuc29tZSgodmFsdWUpID0+IHZhbHVlICE9PSB1bmRlZmluZWQpO1xufVxuXG4vLyBBIGNvbmZpZ3VyZWQgYm91bmQgb3IgaW50ZXJ2YWwgd2hlbiBpdCBpcyBhIGZpbml0ZSBudW1iZXIsIGVsc2UgdW5kZWZpbmVkLlxuZnVuY3Rpb24gYXhpc051bWJlcih2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuLy8gQSB2YWx1ZSBheGlzJ3MgdGljayBsYWJlbHMuXG5pbnRlcmZhY2UgVmFsdWVBeGlzTGFiZWwge1xuICBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiBzdHJpbmc7XG59XG5cbi8vIFRpY2sgbGFiZWxzIHdyaXR0ZW4gaW4gdGhlIGxvY2FsZS4gRUNoYXJ0cycgb3duIHRpY2tzIGFyZSBncm91cGVkIGVuLVVTXG4vLyB3aGF0ZXZlciB0aGUgcGFnZSdzIGxhbmd1YWdlLlxuLy9cbi8vIFdpdGggYSBudW1iZXIgZm9ybWF0LCB0aGUgdW5pdHMgYW5kIGRlY2ltYWxzIGRlY2lkZWQgb25jZSBmb3IgdGhlIHdob2xlXG4vLyBheGlzIChyZXNvbHZlVmFsdWVBeGlzRm9ybWF0KSB3cml0ZSBldmVyeSB0aWNrIGFsaWtlICgnMS41SycsICcyLjBLJywgbmV2ZXJcbi8vICcySycpLiBXaXRob3V0IG9uZSwgb3Igd2hlbiBpdCBsZWF2ZXMgdGhlIHRpY2tzIGFuIHVuc2NhbGVkIG51bWJlciB3aXRoIG5vXG4vLyBwaW5uZWQgZGVjaW1hbHMgKGZvcm1hdCAnbnVtYmVyJywgb3IgcHJlY2lzaW9uLWxlc3MgdW5pdHMgbm9uZSksIGVhY2ggdGlja1xuLy8gaXMgYSBwbGFpbiBsb2NhbGUtZ3JvdXBlZCBudW1iZXIga2VlcGluZyBpdHMgb3duIGRlY2ltYWxzLCBzbyBhIDAuMDAwMiB0aWNrXG4vLyBuZXZlciByb3VuZHMgdG8gJzAnLlxuZnVuY3Rpb24gdmFsdWVBeGlzTGFiZWwoZm9ybWF0OiBWYWx1ZUF4aXNGb3JtYXQgfCBudWxsLCBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0KTogVmFsdWVBeGlzTGFiZWwge1xuICBpZiAoIWZvcm1hdCB8fCAoZm9ybWF0LmNoYXJ0LnVuaXRzID09PSBSZXBvcnROdW1iZXJVbml0cy5Ob25lICYmIGZvcm1hdC5jaGFydC5kZWNpbWFscyA9PT0gbnVsbCkpIHtcbiAgICByZXR1cm4geyBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiBmb3JtYXRQbGFpbk51bWJlcih2YWx1ZSwgY29udGV4dC5sb2NhbGUpIH07XG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyB1bml0czogZm9ybWF0LmNoYXJ0LnVuaXRzLCBkZWNpbWFsczogZm9ybWF0LmNoYXJ0LmRlY2ltYWxzIH07XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXR0ZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiBmb3JtYXROdW1iZXIodmFsdWUsIGZvcm1hdC5zcGVjLCBmb3JtYXQuY29udGV4dCwgb3B0aW9ucyksXG4gIH07XG59XG5cbi8vIEFuIGF4aXMncyBmb3JtYXQgZnJvbSB0aGUgc3BlYyBpdHMgbWVhc3VyZXMgYWdyZWUgb24sIHdpdGggdGhlIHVuaXRzIGFuZFxuLy8gZGVjaW1hbHMgZGVjaWRlZCBmcm9tIGl0cyBwZWFrLiBXaXRob3V0IGEgc3BlYyB0aGUgYXhpcyBpcyBwbGFpbiwgYW5kIHRoZVxuLy8gcGVhayBpcyBuZXZlciBjb21wdXRlZC5cbmZ1bmN0aW9uIHJlc29sdmVWYWx1ZUF4aXNGb3JtYXQoXG4gIHNwZWM6IE51bWJlckZvcm1hdFNwZWMgfCBudWxsLFxuICBwZWFrOiAoKSA9PiBudW1iZXIsXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBWYWx1ZUF4aXNGb3JtYXQgfCBudWxsIHtcbiAgcmV0dXJuIHNwZWMgPyB7IHNwZWMsIGNoYXJ0OiByZXNvbHZlQ2hhcnROdW1iZXJGb3JtYXQoc3BlYywgcGVhaygpLCBjb250ZXh0KSwgY29udGV4dCB9IDogbnVsbDtcbn1cblxuLy8gRWFjaCB2YWx1ZSBheGlzJ3MgZm9ybWF0LCBieSBheGlzIGluZGV4LiBBIGNoYXJ0IHdpdGggb25lIHZhbHVlIGF4aXMgdGFrZXNcbi8vIHRoZSBmb3JtYXQgdGhlIHBsb3R0ZWQgc2VyaWVzJyBtZWFzdXJlcyBhZ3JlZSBvbiAoYSBzcGxpdEJ5IG9yIGNvbG9yQnkgY2hhcnRcbi8vIHBsb3RzIG9ubHkgaXRzIGZpcnN0IG1lYXN1cmUpLCBmcm9tIHRoZSBwZWFrIG9mIGFsbCBpdHMgc2VyaWVzLiBPbiBhIHR3by1heGlzIGNoYXJ0IGVhY2ggYXhpcyB0YWtlcyB0aGUgZm9ybWF0IG9mIHRoZSBtZWFzdXJlc1xuLy8gcGxvdHRlZCBhZ2FpbnN0IGl0LCBmcm9tIHRoZSBwZWFrIG9mIGl0cyBvd24gc2VyaWVzLCB3aGljaCBhcmUgbmV2ZXJcbi8vIHN0YWNrZWQgd2l0aCBhIDEwMCUgc3RhY2tlZCBjaGFydCdzIHNoYXJlcy4gQSByZWZlcmVuY2UgcGFzdCB0aGUgZGF0YVxuLy8gc3RyZXRjaGVzIGl0cyBheGlzLCBzbyBpdCBjb3VudHMgdG93YXJkIHRoZSBwZWFrIChyZWZlcmVuY2VQZWFrKTsgYSAxMDAlXG4vLyBzdGFja2VkIGNoYXJ0J3MgcmVmZXJlbmNlcyBhcmUgc2hhcmVzLCB3aGljaCB0aGUgcmF3IHZhbHVlcycgcGVhayBsZWF2ZXNcbi8vIG91dC4gY29udGV4dHMgaG9sZHMgZWFjaCBheGlzJ3MgY29udGV4dCAoYW5ub3RhdGVkQXhpc0NvbnRleHRzKS5cbmZ1bmN0aW9uIHZhbHVlQXhpc0Zvcm1hdHMoXG4gIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICBjb250ZXh0czogUmVwb3J0Rm9ybWF0Q29udGV4dFtdLFxuICBwZXJjZW50OiBib29sZWFuLFxuICByZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLFxuKTogKFZhbHVlQXhpc0Zvcm1hdCB8IG51bGwpW10ge1xuICBjb25zdCByZWFjaCA9IChheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KSA9PiAocGVyY2VudCAmJiBheGlzSW5kZXggPT09IDAgPyAwIDogcmVmZXJlbmNlUGVhayhyZWZlcmVuY2VzLCBheGlzSW5kZXgpKTtcblxuICBpZiAoIWF4aXNJbmRleGVzLmluY2x1ZGVzKDEpKSB7XG4gICAgcmV0dXJuIFtyZXNvbHZlVmFsdWVBeGlzRm9ybWF0KFxuICAgICAgYXhpc051bWJlckZvcm1hdChleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMubWVhc3VyZSkpLFxuICAgICAgKCkgPT4gTWF0aC5tYXgoY2hhcnRWYWx1ZVBlYWsoZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyksICEhY29uZmlnLnN0YWNrZWQpLCByZWFjaCgwKSksXG4gICAgICBjb250ZXh0c1swXSxcbiAgICApXTtcbiAgfVxuXG4gIHJldHVybiAoWzAsIDFdIGFzIGNvbnN0KS5tYXAoKGF4aXNJbmRleCkgPT4ge1xuICAgIGNvbnN0IG9uQXhpcyA9IGV4dHJhY3RlZC5zZXJpZXMuZmlsdGVyKChfLCBpbmRleCkgPT4gYXhpc0luZGV4ZXNbaW5kZXhdID09PSBheGlzSW5kZXgpO1xuXG4gICAgcmV0dXJuIHJlc29sdmVWYWx1ZUF4aXNGb3JtYXQoXG4gICAgICBheGlzTnVtYmVyRm9ybWF0KG9uQXhpcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLm1lYXN1cmUpKSxcbiAgICAgICgpID0+IE1hdGgubWF4KGNoYXJ0VmFsdWVQZWFrKG9uQXhpcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyksICEhY29uZmlnLnN0YWNrZWQgJiYgIXBlcmNlbnQpLCByZWFjaChheGlzSW5kZXgpKSxcbiAgICAgIGNvbnRleHRzW2F4aXNJbmRleF0sXG4gICAgKTtcbiAgfSk7XG59XG5cbi8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpcyB0aWNrczogd2hvbGUgcGVyY2VudGFnZXMgaW4gdGhlIGxvY2FsZVxuLy8gKCcyNSUnLCAnMjUgJScgaW4gZnItQ0EpLiBUaGUgc2hhcmVzIGFyZSByYXRpb3Mgd2hhdGV2ZXIgdGhlIHJlcG9ydCdzXG4vLyBwZXJjZW50Rm9ybWF0IHNheXMgb2YgaXRzIHN0b3JlZCB2YWx1ZXMuXG5mdW5jdGlvbiBwZXJjZW50QXhpc0xhYmVsKGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQpOiBWYWx1ZUF4aXNMYWJlbCB7XG4gIHJldHVybiB7IGZvcm1hdHRlcjogd2hvbGVQZXJjZW50Rm9ybWF0dGVyKGNvbnRleHQpIH07XG59XG5cbi8vIEEgc2hhcmUgYXMgYSB3aG9sZSBwZXJjZW50YWdlIGluIHRoZSBsb2NhbGUsIGZvciB0aGUgc2hhcmUgYXhpcydzIHRpY2tzIGFuZFxuLy8gaXRzIHNlcmllcycgZGF0YSBsYWJlbHMuXG5mdW5jdGlvbiB3aG9sZVBlcmNlbnRGb3JtYXR0ZXIoY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCk6ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nIHtcbiAgY29uc3QgcmF0aW9Db250ZXh0ID0geyAuLi5jb250ZXh0LCByYXRpb1BlcmNlbnQ6IHRydWUgfTtcblxuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiBmb3JtYXROdW1iZXIodmFsdWUsIFBFUkNFTlRfQVhJU19GT1JNQVQsIHJhdGlvQ29udGV4dCk7XG59XG5cbi8vIFdoYXQgYSBzZXJpZXMnIHRvb2x0aXAgd3JpdGVzIGJlc2lkZSBpdHMgbmFtZS5cbmludGVyZmFjZSBTZXJpZXNUb29sdGlwIHtcbiAgdmFsdWVGb3JtYXR0ZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nO1xufVxuXG4vLyBBIHNlcmllcycgdG9vbHRpcCB2YWx1ZSBpbiBpdHMgbWVhc3VyZSdzIG51bWJlciBmb3JtYXQsIHBlciB2YWx1ZSAoJ+KAlCcgd2hlblxuLy8gZW1wdHkpLiBBIG1lYXN1cmUgd2l0aG91dCBvbmUgd3JpdGVzIGl0IGFzIHRoZSBwbGFpbiB2YWx1ZSBheGlzIGRvZXMuIEFcbi8vIHZhbHVlIGNhbiBhcnJpdmUgYXMgYW4gYXJyYXkgKGEgW3ZhbHVlLCAuLi5dIGRhdGEgaXRlbSksIHdob3NlIGZpcnN0IGVudHJ5XG4vLyBpcyB0aGUgdmFsdWUuXG5mdW5jdGlvbiBzZXJpZXNUb29sdGlwKG1lYXN1cmU6IENoYXJ0TWVhc3VyZSB8IHVuZGVmaW5lZCwgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCk6IFNlcmllc1Rvb2x0aXAge1xuICBpZiAoIWhhc051bWJlckZvcm1hdChtZWFzdXJlKSkge1xuICAgIHJldHVybiB7IHZhbHVlRm9ybWF0dGVyOiAodmFsdWU6IHVua25vd24pID0+IGZvcm1hdFBsYWluTnVtYmVyKHZhbHVlLCBjb250ZXh0LmxvY2FsZSkgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWVGb3JtYXR0ZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gZm9ybWF0TnVtYmVyKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZSwgbWVhc3VyZSwgY29udGV4dCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUGllT3B0aW9uKFxuICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgZG9udXQ6IGJvb2xlYW4sXG4gIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4pOiBFQ2hhcnRzT3B0aW9uIHtcbiAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG4gIGNvbnN0IHZhbHVlcyA9IGV4dHJhY3RlZC5zZXJpZXNbMF0/LnZhbHVlcyA/PyBbXTtcbiAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCBleHRyYWN0ZWQuc2VyaWVzLmxlbmd0aCk7XG5cbiAgcmV0dXJuIHtcbiAgICB0b29sdGlwOiB7IHRyaWdnZXI6ICdpdGVtJyB9LFxuICAgIGxlZ2VuZDogbGVnZW5kT3B0aW9uKGxlZ2VuZFBvc2l0aW9uKSxcbiAgICBzZXJpZXM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3BpZScsXG4gICAgICAgIHJhZGl1czogZG9udXQgPyBbJzQ1JScsICc3MiUnXSA6ICc3MiUnLFxuICAgICAgICBjZW50ZXI6IHBpZUNlbnRlcihsZWdlbmRQb3NpdGlvbiksXG4gICAgICAgIHRvb2x0aXA6IHNlcmllc1Rvb2x0aXAoZXh0cmFjdGVkLnNlcmllc1swXT8ubWVhc3VyZSwgY29udGV4dCksXG4gICAgICAgIGxhYmVsOiB7IHNob3c6IGZhbHNlIH0sXG4gICAgICAgIGRhdGE6IGV4dHJhY3RlZC5jYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnksIGluZGV4KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGNhdGVnb3J5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaW5kZXhdID8/IDAsXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuLy8gTnVkZ2UgdGhlIHBpZSBvZmYtY2VudGVyIHRvd2FyZCB0aGUgb3Bwb3NpdGUgZWRnZSBmcm9tIGl0cyBsZWdlbmQgc28gdGhlIHR3b1xuLy8gZG9uJ3QgY29sbGlkZTsgY2VudGVyZWQgd2hlbiB0aGUgbGVnZW5kIGlzIGhpZGRlbi5cbmZ1bmN0aW9uIHBpZUNlbnRlcihwb3NpdGlvbjogTGVnZW5kUG9zaXRpb24pOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgcmV0dXJuIFsnNjAlJywgJzUwJSddO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBbJzQwJScsICc1MCUnXTtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgcmV0dXJuIFsnNTAlJywgJzU4JSddO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4gWyc1MCUnLCAnNDYlJ107XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbJzUwJScsICc1MCUnXTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmlxdWVWYWx1ZXMocm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgY29sdW1uOiBzdHJpbmcpOiB1bmtub3duW10ge1xuICBjb25zdCBzZWVuID0gbmV3IFNldDx1bmtub3duPigpO1xuICBjb25zdCB2YWx1ZXM6IHVua25vd25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uXTtcbiAgICBpZiAoIXNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmZ1bmN0aW9uIG51bWVyaWModmFsdWU6IHVua25vd24pOiBudW1iZXIgfCBudWxsIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpO1xuXG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGw7XG59XG5cbi8vIFRoZSBlZmZlY3RpdmUgdGltZSBidWNrZXQgdGhlIHJvd3Mgd2VyZSBncm91cGVkIGludG8gKGZyb20gdGhlIGRhdGEgZW5kcG9pbnQpLFxuLy8gb3IgbnVsbCB3aGVuIHRoZSB4LWF4aXMgaXNuJ3QgYSB0aW1lIGF4aXMg4oCUIGdhdGVzIHRoZSBjb21wYWN0IHBlcmlvZCBsYWJlbHMuXG5mdW5jdGlvbiBidWNrZXRHcmFudWxhcml0eShkYXRhOiBDb21wb25lbnREYXRhKTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwge1xuICByZXR1cm4gZGF0YS5ncmFudWxhcml0eSAmJiBHUkFOVUxBUklUWV9PUFRJT05TLnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBkYXRhLmdyYW51bGFyaXR5KVxuICAgID8gZGF0YS5ncmFudWxhcml0eVxuICAgIDogbnVsbDtcbn1cblxuLy8gV2hldGhlciB0aGUgcGVyaW9kLXN0YXJ0IGNhdGVnb3JpZXMgY3Jvc3MgYSB5ZWFyIGJvdW5kYXJ5LiBXaGVuIHRoZXkgZG9uJ3QsXG4vLyB0aGUgeWVhciBpcyBwdXJlIG5vaXNlIG9uIGV2ZXJ5IGxhYmVsLCBzbyBpdCdzIGRyb3BwZWQgZW50aXJlbHkuXG5leHBvcnQgZnVuY3Rpb24gc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGNvbnN0IHllYXJzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykge1xuICAgIGNvbnN0IGRhdGUgPSBwYXJzZUlTTyhjYXRlZ29yeSk7XG4gICAgaWYgKGlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgIHllYXJzLmFkZChkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB5ZWFycy5zaXplID4gMTtcbn1cblxuLy8gQSB0aW1lIGF4aXMncyBkYXRlIGxhYmVsIHN0eWxlIHdoZW4gaXRzIGNvbmZpZyBuYW1lcyBvbmUgdGhlIHZpZXdlciBrbm93cyxcbi8vIGVsc2Ugc2hvcnQuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnREYXRlTGFiZWwoY29uZmlnOiBDaGFydENvbmZpZyB8IHVuZGVmaW5lZCk6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoUmVwb3J0Q2hhcnREYXRlTGFiZWwpLmZpbmQoKHN0eWxlKSA9PiBzdHlsZSA9PT0gY29uZmlnPy54QXhpcz8uZGF0ZUxhYmVsKVxuICAgID8/IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLlNob3J0O1xufVxuXG4vLyBBIGJ1Y2tldCdzIHBlcmlvZC1zdGFydCBzcGxpdCBpbnRvIGl0cyBwcmltYXJ5IGxhYmVsIGFuZCBpdHMgeWVhci4gQSB5ZWFyXG4vLyByZWFkcyBcIjIwMjVcIiBpbiBldmVyeSBzdHlsZS4gU2hvcnQsIGluIHRoZSBsb2NhbGU6IGRheS93ZWVrIHJlYWQgXCJNYXkgMVwiXG4vLyAoJzEgbWFpJyBpbiBmci1DQSksIG1vbnRoIFwiTWF5XCIgKCdtYWknKSwgcXVhcnRlciBcIlEyXCIgKCdUMicgaW4gRnJlbmNoKS5cbi8vIExvbmcgY2FycmllcyBpdHMgeWVhciwgaW4gdGhlIGxvY2FsZTogXCJNYXkgMSwgMjAyNlwiLCBcIk1heSAyMDI2XCIgKCdtYWlcbi8vIDIwMjYnKSwgXCJRMiAyMDI2XCIuIE51bWVyaWMgaXMgdGhlIHNhbWUgaW4gZXZlcnkgbG9jYWxlOiBcIjIwMjYtMDUtMDFcIixcbi8vIFwiMjAyNi0wNVwiLCBcIjIwMjYtUTJcIi4gUmV0dXJucyBudWxsIGZvciBhIHZhbHVlIHRoYXQgaXNuJ3QgYSBwYXJzZWFibGUgZGF0ZVxuLy8gKGxlZnQgYXMtaXMgYnkgY2FsbGVycykuXG5mdW5jdGlvbiBwZXJpb2RMYWJlbFBhcnRzKFxuICB2YWx1ZTogc3RyaW5nLFxuICBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSxcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4gIGRhdGVMYWJlbDogUmVwb3J0Q2hhcnREYXRlTGFiZWwgPSBSZXBvcnRDaGFydERhdGVMYWJlbC5TaG9ydCxcbik6IHsgcHJpbWFyeTogc3RyaW5nOyB5ZWFyOiBzdHJpbmcgfSB8IG51bGwge1xuICBjb25zdCBkYXRlID0gcGFyc2VJU08odmFsdWUpO1xuICBpZiAoIWlzVmFsaWQoZGF0ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHllYXIgPSBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgaWYgKGdyYW51bGFyaXR5ID09PSAneWVhcicpIHtcbiAgICByZXR1cm4geyBwcmltYXJ5OiB5ZWFyLCB5ZWFyIH07XG4gIH1cblxuICByZXR1cm4geyBwcmltYXJ5OiBwZXJpb2RQcmltYXJ5TGFiZWwoZGF0ZSwgZ3JhbnVsYXJpdHksIGxvY2FsZSwgZGF0ZUxhYmVsKSwgeWVhciB9O1xufVxuXG4vLyBBIHBlcmlvZCdzIGxhYmVsIGluIHRoZSBzdHlsZSBhc2tlZCBmb3IsIHRoZSB5ZWFyIGFzaWRlIChzZWVcbi8vIHBlcmlvZExhYmVsUGFydHMpLlxuZnVuY3Rpb24gcGVyaW9kUHJpbWFyeUxhYmVsKFxuICBkYXRlOiBEYXRlLFxuICBncmFudWxhcml0eTogRXhjbHVkZTxDaGFydEdyYW51bGFyaXR5LCAneWVhcic+LFxuICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyxcbiAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHllYXIgPSBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgY29uc3QgcXVhcnRlciA9IE1hdGguZmxvb3IoZGF0ZS5nZXRNb250aCgpIC8gMykgKyAxO1xuXG4gIGlmIChkYXRlTGFiZWwgPT09IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLk51bWVyaWMpIHtcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7XG4gICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LVEke3F1YXJ0ZXJ9YDtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9YDtcbiAgICAgIGRlZmF1bHQ6IC8vIGRheSwgd2VlayDigJQgdGhlIGJ1Y2tldCBzdGFydFxuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBsb25nID0gZGF0ZUxhYmVsID09PSBSZXBvcnRDaGFydERhdGVMYWJlbC5Mb25nO1xuICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7XG4gICAgY2FzZSAncXVhcnRlcic6XG4gICAgICByZXR1cm4gbG9uZ1xuICAgICAgICA/IGAke3F1YXJ0ZXJQcmVmaXgobG9jYWxlKX0ke3F1YXJ0ZXJ9ICR7eWVhcn1gXG4gICAgICAgIDogYCR7cXVhcnRlclByZWZpeChsb2NhbGUpfSR7cXVhcnRlcn1gO1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb2NhbERhdGUoZGF0ZSwgbG9jYWxlLCBsb25nID8gTU9OVEhfWUVBUiA6IE1PTlRIX0xPTkcpO1xuICAgIGRlZmF1bHQ6IC8vIGRheSwgd2VlayDigJQgdGhlIGJ1Y2tldCBzdGFydCBhcyBhIG1vbnRoIGFuZCBkYXlcbiAgICAgIHJldHVybiBmb3JtYXRMb2NhbERhdGUoZGF0ZSwgbG9jYWxlLCBsb25nID8gREFZX1NIT1JUIDogTU9OVEhfREFZKTtcbiAgfVxufVxuXG4vLyBXaGV0aGVyIGEgcGVyaW9kIGxhYmVsIGxlYXZlcyBpdHMgeWVhciB0byBiZSBhZGRlZCBhcGFydDogb25seSBhIHNob3J0IG9uZVxuLy8gZG9lcywgYSBsb25nIG9yIG51bWVyaWMgbGFiZWwgYWxyZWFkeSBjYXJyaWVzIGl0LlxuZnVuY3Rpb24gcGVyaW9kWWVhckFwYXJ0KGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LCBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsKTogYm9vbGVhbiB7XG4gIHJldHVybiBncmFudWxhcml0eSAhPT0gJ3llYXInICYmIGRhdGVMYWJlbCA9PT0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQ7XG59XG5cbmZ1bmN0aW9uIHF1YXJ0ZXJQcmVmaXgobG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcpOiBzdHJpbmcge1xuICByZXR1cm4gUVVBUlRFUl9QUkVGSVhFUy5nZXQobG9jYWxlLnNwbGl0KCctJylbMF0udG9Mb3dlckNhc2UoKSkgPz8gUVVBUlRFUl9QUkVGSVg7XG59XG5cbi8vIEEgY29tcGFjdCBzaW5nbGUtbGluZSBwZXJpb2QgbGFiZWwg4oCUIGZvciBtZWRpYSB0aGF0IGNhbid0IGRvIGEgc3R5bGVkXG4vLyBzZWNvbmQgbGluZSwgZS5nLiBQb3dlclBvaW50LiBBIHNob3J0IGxhYmVsIGhhcyBpdHMgeWVhciBhcHBlbmRlZCBvbmx5IHdoZW5cbi8vIHRoZSBkYXRhIHNwYW5zIHllYXJzOyBhIGxvbmcgb3IgbnVtZXJpYyBvbmUgYWx3YXlzIGNhcnJpZXMgaXQuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGVyaW9kTGFiZWwoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5LFxuICBtdWx0aVllYXI6IGJvb2xlYW4sXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsID0gUmVwb3J0Q2hhcnREYXRlTGFiZWwuU2hvcnQsXG4pOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IHBlcmlvZExhYmVsUGFydHModmFsdWUsIGdyYW51bGFyaXR5LCBsb2NhbGUsIGRhdGVMYWJlbCk7XG4gIGlmICghcGFydHMpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gbXVsdGlZZWFyICYmIHBlcmlvZFllYXJBcGFydChncmFudWxhcml0eSwgZGF0ZUxhYmVsKSA/IGAke3BhcnRzLnByaW1hcnl9ICR7cGFydHMueWVhcn1gIDogcGFydHMucHJpbWFyeTtcbn1cblxuLy8gQSBjcm9zcy10YWIncyBjb2x1bW4gaGVhZGluZ3MsIHRoZSBvbmUgcnVsZSB0aGUgZ3JpZCBhbmQgdGhlIFBERi9Qb3dlclBvaW50XG4vLyBleHBvcnRzIHNoYXJlLiBUaGUgZmlyc3QgaXMgdGhlIHJvdyBrZXkgYW5kIGtlZXBzIGl0cyBhdXRob3JlZCBsYWJlbDsgdGhlXG4vLyByZXN0IGFyZSBwaXZvdCBWQUxVRVMuIFdoZW4gdGhlIHBpdm90IGF4aXMgaXMgYSB0aW1lIGRpbWVuc2lvbiB0aGUgc2VydmVyXG4vLyBzZW5kcyB0aGUgZ3JhaW4gaXQgYnVja2V0ZWQgYXQsIHNvIGEgcGVyaW9kLXN0YXJ0IGxpa2UgXCIyMDI2LTAxLTAxXCIgcmVhZHNcbi8vIFwiSmFudWFyeSAyMDI2XCIgKCdqYW52aWVyIDIwMjYnIGluIGZyLUNBKSwgYXMgdGhlIGNoYXJ0J3MgeC1heGlzIGxhYmVscyBpdC5cbmV4cG9ydCBmdW5jdGlvbiBwaXZvdEhlYWRpbmdzKFxuICBjb25maWc6IExpc3RDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBjb2x1bW5zID0gZGF0YS5jb2x1bW5zID8/IFtdO1xuICBjb25zdCBtdWx0aVllYXIgPSBzcGFuc011bHRpcGxlWWVhcnMoY29sdW1ucyk7XG5cbiAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gY29uZmlnLnJvd0J5Py5sYWJlbCB8fCBjb2x1bW47XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEuZ3JhbnVsYXJpdHkgPyBmb3JtYXRQZXJpb2RMYWJlbChjb2x1bW4sIGRhdGEuZ3JhbnVsYXJpdHksIG11bHRpWWVhciwgbG9jYWxlKSA6IGNvbHVtbjtcbiAgfSk7XG59XG5cbi8vIEEgY3Jvc3MtdGFiJ3MgY29sdW1ucyBhcyB0aGUgZ3JpZCBhbmQgdGhlIGV4cG9ydHMgZHJhdyB0aGVtOiBlYWNoIGhlYWRlZCBieVxuLy8gcGl2b3RIZWFkaW5ncygpLCBhbmQgZXZlcnkgcGl2b3QtdmFsdWUgY29sdW1uIGZvcm1hdHRlZCBieSB0aGUgb25lXG4vLyBjb25maWcuY2VsbEZvcm1hdC4gVGhlIHJvdyBrZXkgY29sdW1uIHN0YXlzIGFzIGl0IGNhbWUuIGBudW1lcmljYCBtYXJrcyB0aGVcbi8vIGNvbHVtbnMgd2hvc2UgY2VsbHMgYXJlIGZvcm1hdHRlZCBudW1iZXJzLCB3aGljaCBhcmUgcmlnaHQtYWxpZ25lZC5cbmV4cG9ydCBmdW5jdGlvbiBwaXZvdENvbHVtblNwZWNzKFxuICBjb25maWc6IExpc3RDb25maWcsXG4gIGRhdGE6IENvbXBvbmVudERhdGEsXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuKTogKExpc3RDb2x1bW4gJiB7IG51bWVyaWM6IGJvb2xlYW4gfSlbXSB7XG4gIGNvbnN0IGhlYWRpbmdzID0gcGl2b3RIZWFkaW5ncyhjb25maWcsIGRhdGEsIGxvY2FsZSk7XG4gIGNvbnN0IGNlbGxGb3JtYXQgPSBjb25maWcuY2VsbEZvcm1hdDtcbiAgY29uc3QgbnVtZXJpYyA9IGhhc051bWJlckZvcm1hdChjZWxsRm9ybWF0KTtcbiAgY29uc3QgY2VsbHM6IFBpY2s8TGlzdENvbHVtbiwgJ2Zvcm1hdCcgfCAncHJlY2lzaW9uJyB8ICd1bml0cyc+ID0gbnVtZXJpYyAmJiBjZWxsRm9ybWF0XG4gICAgPyB7IGZvcm1hdDogbGlzdENvbHVtbkZvcm1hdChjZWxsRm9ybWF0LmZvcm1hdCksIHByZWNpc2lvbjogY2VsbEZvcm1hdC5wcmVjaXNpb24sIHVuaXRzOiBjZWxsRm9ybWF0LnVuaXRzIH1cbiAgICA6IHt9O1xuXG4gIHJldHVybiAoZGF0YS5jb2x1bW5zID8/IFtdKS5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IGluZGV4ID09PSAwXG4gICAgPyB7IGNvbHVtbiwgbGFiZWw6IGhlYWRpbmdzW2luZGV4XSwgbnVtZXJpYzogZmFsc2UgfVxuICAgIDogeyBjb2x1bW4sIGxhYmVsOiBoZWFkaW5nc1tpbmRleF0sIC4uLmNlbGxzLCBudW1lcmljIH0pO1xufVxuXG4vLyBBIG51bWJlciBmb3JtYXQncyBzdHlsZSBhcyBhIGxpc3QgY29sdW1uJ3MgZm9ybWF0OiB0aGUgdHdvIGVudW1zIHNoYXJlXG4vLyB0aGVpciBudW1iZXIgdmFsdWVzLlxuZnVuY3Rpb24gbGlzdENvbHVtbkZvcm1hdChmb3JtYXQ6IE51bWJlckZvcm1hdFNwZWNbJ2Zvcm1hdCddKTogUmVwb3J0TGlzdENvbHVtbkZvcm1hdCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQpLmZpbmQoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gZm9ybWF0KTtcbn1cblxuLy8gRUNoYXJ0cyBjYXRlZ29yeS1heGlzIGxhYmVsIGNvbmZpZyBmb3IgYSB0aW1lIGJ1Y2tldDogdGhlIHByaW1hcnkgbGFiZWwgb25cbi8vIGxpbmUgb25lLCBhbmQg4oCUIG9ubHkgd2hlbiB0aGUgZGF0YSBzcGFucyBtdWx0aXBsZSB5ZWFycyDigJQgdGhlIHllYXIgb24gYSBzbWFsbFxuLy8gZ3JheSBzZWNvbmQgbGluZSwgY2VudGVyZWQgdW5kZXIgdGhlIHRpY2sgKHllYXIgZ3JhbnVsYXJpdHkgbmVlZHMgbm8gc2Vjb25kXG4vLyBsaW5lLCBpdCBhbHJlYWR5IGlzIHRoZSB5ZWFyLCBhbmQgbmVpdGhlciBkb2VzIGEgbG9uZyBvciBudW1lcmljIGxhYmVsLFxuLy8gd2hpY2ggY2FycmllcyBpdHMgeWVhcikuIEVtcHR5IGZvciBhIG5vbi10aW1lIGF4aXMgKGxhYmVscyBhcy1pcykuXG5mdW5jdGlvbiBwZXJpb2RBeGlzTGFiZWwoXG4gIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCxcbiAgY2F0ZWdvcmllczogc3RyaW5nW10sXG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnLFxuICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLFxuKTogeyBheGlzTGFiZWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgaWYgKCFncmFudWxhcml0eSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IG11bHRpWWVhciA9IHNwYW5zTXVsdGlwbGVZZWFycyhjYXRlZ29yaWVzKTtcblxuICByZXR1cm4ge1xuICAgIGF4aXNMYWJlbDoge1xuICAgICAgZm9ybWF0dGVyOiAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBlcmlvZExhYmVsUGFydHModmFsdWUsIGdyYW51bGFyaXR5LCBsb2NhbGUsIGRhdGVMYWJlbCk7XG4gICAgICAgIGlmICghcGFydHMpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbXVsdGlZZWFyICYmIHBlcmlvZFllYXJBcGFydChncmFudWxhcml0eSwgZGF0ZUxhYmVsKVxuICAgICAgICAgID8gYCR7cGFydHMucHJpbWFyeX1cXG57eXJ8JHtwYXJ0cy55ZWFyfX1gXG4gICAgICAgICAgOiBwYXJ0cy5wcmltYXJ5O1xuICAgICAgfSxcbiAgICAgIHJpY2g6IHsgeXI6IHsgZm9udFNpemU6IDEwLCBjb2xvcjogJyM5YWEwYTYnLCBsaW5lSGVpZ2h0OiAxNCB9IH0sXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|