@firestitch/report 18.6.0 → 18.7.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-chart/component-chart.component.d.ts +6 -7
- package/app/reports/components/component-kpi/component-kpi.component.d.ts +8 -8
- package/app/reports/components/component-list/component-list.component.d.ts +33 -11
- package/app/reports/components/report-component/report-component.component.d.ts +3 -0
- package/app/reports/data/report.data.d.ts +2 -1
- package/app/reports/dialogs/list-columns/list-columns.component.d.ts +23 -0
- package/app/reports/dialogs/report-settings/report-locale-patch.d.ts +5 -0
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +20 -1
- package/app/reports/enums/report-chart-color.enum.d.ts +12 -0
- package/app/reports/enums/report-chart-data-labels.enum.d.ts +6 -0
- package/app/reports/enums/report-chart-date-label.enum.d.ts +5 -0
- package/app/reports/enums/report-chart-line-style.enum.d.ts +5 -0
- package/app/reports/enums/report-chart-mark-stat.enum.d.ts +6 -0
- package/app/reports/enums/report-list-column-format.enum.d.ts +6 -0
- package/app/reports/enums/report-number-units.enum.d.ts +6 -0
- package/app/reports/enums/report-value-format.enum.d.ts +5 -0
- package/app/reports/export/offscreen-chart.d.ts +2 -2
- package/app/reports/export/report-export-collector.service.d.ts +12 -9
- package/app/reports/export/report-pdf.service.d.ts +1 -0
- package/app/reports/export/report-pptx.service.d.ts +17 -0
- package/app/reports/format.d.ts +39 -4
- package/app/reports/interfaces/report.interface.d.ts +82 -10
- package/app/reports/list-config.d.ts +9 -0
- package/app/reports/option-builder.d.ts +69 -8
- package/app/reports/pipes/report-date.pipe.d.ts +2 -1
- package/app/reports/pipes/report-number.pipe.d.ts +8 -0
- package/app/reports/report-filter-items.d.ts +5 -2
- package/app/reports/report-url-state.d.ts +5 -0
- package/app/reports/services/report-filter-state.service.d.ts +29 -2
- package/app/reports/theme/palette.d.ts +3 -0
- package/app/reports/theme/typography.d.ts +1 -0
- package/esm2022/app/reports/components/component-chart/component-chart.component.mjs +19 -20
- package/esm2022/app/reports/components/component-kpi/component-kpi.component.mjs +23 -26
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +157 -53
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +81 -19
- package/esm2022/app/reports/data/report.data.mjs +17 -4
- package/esm2022/app/reports/dialogs/global-settings/global-settings.component.mjs +2 -2
- package/esm2022/app/reports/dialogs/list-columns/list-columns.component.mjs +56 -0
- package/esm2022/app/reports/dialogs/report-settings/report-locale-patch.mjs +13 -0
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +137 -15
- package/esm2022/app/reports/enums/report-chart-color.enum.mjs +19 -0
- package/esm2022/app/reports/enums/report-chart-data-labels.enum.mjs +13 -0
- package/esm2022/app/reports/enums/report-chart-date-label.enum.mjs +13 -0
- package/esm2022/app/reports/enums/report-chart-line-style.enum.mjs +12 -0
- package/esm2022/app/reports/enums/report-chart-mark-stat.enum.mjs +12 -0
- package/esm2022/app/reports/enums/report-list-column-format.enum.mjs +14 -0
- package/esm2022/app/reports/enums/report-number-units.enum.mjs +14 -0
- package/esm2022/app/reports/enums/report-value-format.enum.mjs +13 -0
- package/esm2022/app/reports/export/offscreen-chart.mjs +5 -4
- package/esm2022/app/reports/export/report-export-collector.service.mjs +96 -39
- package/esm2022/app/reports/export/report-pdf.service.mjs +94 -37
- package/esm2022/app/reports/export/report-pptx.service.mjs +482 -85
- package/esm2022/app/reports/format.mjs +502 -57
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/list-config.mjs +74 -0
- package/esm2022/app/reports/option-builder.mjs +880 -95
- package/esm2022/app/reports/pipes/report-date.pipe.mjs +7 -6
- package/esm2022/app/reports/pipes/report-number.pipe.mjs +25 -0
- package/esm2022/app/reports/report-filter-items.mjs +28 -3
- package/esm2022/app/reports/report-url-state.mjs +60 -15
- package/esm2022/app/reports/services/report-filter-state.service.mjs +275 -29
- package/esm2022/app/reports/theme/echarts.mjs +8 -2
- package/esm2022/app/reports/theme/palette.mjs +19 -1
- package/esm2022/app/reports/theme/typography.mjs +4 -1
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +11 -4
- package/esm2022/app/reports/views/report/report.component.mjs +6 -2
- package/esm2022/public_api.mjs +9 -1
- package/fesm2022/{firestitch-report-echarts-B9nl9XKM.mjs → firestitch-report-echarts-u5ImuZT5.mjs} +9 -3
- package/fesm2022/firestitch-report-echarts-u5ImuZT5.mjs.map +1 -0
- package/fesm2022/{firestitch-report-firestitch-report-Bb65HEYB.mjs → firestitch-report-firestitch-report-Cz-kA_id.mjs} +3213 -613
- package/fesm2022/firestitch-report-firestitch-report-Cz-kA_id.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +8 -0
- package/fesm2022/firestitch-report-echarts-B9nl9XKM.mjs.map +0 -1
- package/fesm2022/firestitch-report-firestitch-report-Bb65HEYB.mjs.map +0 -1
|
@@ -27,4 +27,4 @@ export var ReportState;
|
|
|
27
27
|
ReportState["Active"] = "active";
|
|
28
28
|
ReportState["Deleted"] = "deleted";
|
|
29
29
|
})(ReportState || (ReportState = {}));
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQWlMbkMsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdEO0lBQzlFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUEyUUYsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUF1QkQsZ0ZBQWdGO0FBQ2hGLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBTixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsZ0NBQWlCLENBQUE7SUFDakIsa0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIGFzc2VtYmxlZCByZXBvcnQgc3RydWN0dXJlIHJldHVybmVkIGJ5IEdFVCAvYXBpL3JlcG9ydHMvOmlkIOKAlCBjb21wb3NlZFxuLy8gc2VydmVyLXNpZGUgZnJvbSB0aGUgbm9ybWFsaXplZCB0YWJsZXMgKHJlcG9ydHMg4oaSIHJlcG9ydF9wYWdlcyDihpJcbi8vIHJlcG9ydF9jb21wb25lbnRzICsgcmVwb3J0X2ZpbHRlcnMsIHBsdXMgcmVwb3J0X2ZpbHRlcl9ncm91cHMpLiBBbGwga2V5cyBhcmVcbi8vIGNhbWVsQ2FzZTsgY29tcG9uZW50IGBjb25maWdgIGlzIHRoZSBzdGFuZGFyZCBmb3JtYXQgdGhlIHJlbmRlcmVyIG1hcHMgdG9cbi8vIEVDaGFydHMgb3B0aW9ucyAvIEZzTGlzdCBjb25maWcuXG5cbi8vIExheW91dCBtb2RlczogRnJlZWZvcm0gPSBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgY29tcG9uZW50cyAoZHJhZyBhbnl3aGVyZSk7XG4vLyBGbG93ID0gY29tcG9uZW50cyBmbG93IGxpa2Ugcm93cywgZWFjaCB0YWtpbmcgZmxvd1dpZHRoICUgb2YgdGhlIHBhZ2Ugd2lkdGguXG5leHBvcnQgdHlwZSBSZXBvcnRMYXlvdXQgPSAnZnJlZWZvcm0nIHwgJ2Zsb3cnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydCB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgbGF5b3V0OiBSZXBvcnRMYXlvdXQ7XG4gIC8vIFRoZSByZXBvcnQncyBvd24gc3RvcmVkIElBTkEgem9uZSAoZS5nLiBBbWVyaWNhL05ld19Zb3JrKS4gbnVsbCA9IHRoZVxuICAvLyByZXBvcnQgZm9sbG93cyB0aGUgYXBwbGljYXRpb24ncyBkZWZhdWx0IHJlcG9ydGluZyB6b25lLlxuICB0aW1lem9uZTogc3RyaW5nIHwgbnVsbDtcbiAgLy8gVGhlIHpvbmUgZXZlcnkgZGF0ZSBmaWx0ZXIsIHRpbWUgYnVja2V0IGFuZCBkYXRlIGNlbGwgb2YgdGhpcyByZXBvcnQgdXNlcy5cbiAgLy8gUmVzb2x2ZWQgc2VydmVyLXNpZGU7IHRoZSBzYW1lIGZvciBldmVyeSB2aWV3ZXIsIGV4cG9ydCBhbmQgdGhlIGFzc2lzdGFudC5cbiAgLy8gT3B0aW9uYWwgb25seSBiZWNhdXNlIG9sZGVyIHNlcnZlcnMgb21pdCBpdDogcmVhZCBpdCB0aHJvdWdoXG4gIC8vIHJlc29sdmVSZXBvcnRUaW1lem9uZSgpIChmb3JtYXQudHMpLCBuZXZlciBkaXJlY3RseS5cbiAgZWZmZWN0aXZlVGltZXpvbmU/OiBzdHJpbmc7XG4gIC8vIFJlcG9ydC1sZXZlbCBjb25maWc6IHR5cG9ncmFwaGljIHN0eWxlcywgZXRjLiAoY2FtZWxDYXNlIEpTT04gY29sdW1uKS5cbiAgY29uZmlnOiBSZXBvcnRDb25maWc7XG4gIC8vIFRoZSBwYWdlIGluIElOQ0hFUyAodGhlIHJlcG9ydCdzIG5hdGl2ZSB1bml0IOKAlCBQREZzIGFuZCBQb3dlclBvaW50IGFyZVxuICAvLyBpbmNoLWJhc2VkLCBzbyBleHBvcnRzIGFyZSBkaW1lbnNpb25hbGx5IGV4YWN0KS4gT3JpZW50YXRpb24gaXMgbm90IGEgZmllbGRcbiAgLy8gb2YgaXRzIG93bjogYSBwYWdlIHdpZGVyIHRoYW4gaXQgaXMgdGFsbCBJUyBsYW5kc2NhcGUuXG4gIHBhZ2VXaWR0aDogbnVtYmVyO1xuICBwYWdlSGVpZ2h0OiBudW1iZXI7XG4gIHBhZ2VzOiBSZXBvcnRQYWdlW107XG4gIC8vIFRoZSBoZWFkZXIgYW5kIGZvb3RlcjogdGhlIHJlcG9ydCdzIG1hc3RlciBwYWdlLCB3aG9zZSBjb21wb25lbnRzIGRyYXdcbiAgLy8gdW5kZXIgZXZlcnkgcGFnZSB0aGF0IGRvZXMgbm90IGhpZGUgdGhlbSAoUG93ZXJQb2ludCdzIHNsaWRlIG1hc3RlcikuIE51bGxcbiAgLy8gdW50aWwgYW55dGhpbmcgaGFzIGJlZW4gcGxhY2VkIGluIHRoZW0uXG4gIG1hc3RlcjogUmVwb3J0TWFzdGVyIHwgbnVsbDtcbiAgZmlsdGVyR3JvdXBzOiBSZXBvcnRGaWx0ZXJHcm91cFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydE1hc3RlciB7XG4gIGlkOiBudW1iZXI7XG4gIGNvbXBvbmVudHM6IFJlcG9ydENvbXBvbmVudFtdO1xufVxuXG4vLyBUaGUgZGVwdGggb2YgdGhlIGhlYWRlciBiYW5kICh0b3Agb2YgZXZlcnkgcGFnZSkgYW5kIHRoZSBmb290ZXIgYmFuZCAoYm90dG9tXG4vLyBvZiBldmVyeSBwYWdlKSwgaW4gSU5DSEVTLiBUaGUgYmFuZHMgaG9sZCBubyBjb250ZW50IG9mIHRoZWlyIG93biDigJQgdGhlXG4vLyBtYXN0ZXIncyBjb21wb25lbnRzIHNpdCBpbiB0aGVtIOKAlCB0aGV5IGFyZSB0aGUgcmVzZXJ2ZWQgbWFyZ2lucyB0aGUgZWRpdG9yXG4vLyBkcmF3cyBhcyBndWlkZXMgYW5kIHNuYXBzIHRvLiBBbHdheXMgYXJyaXZlcyByZXNvbHZlZCAoMCA9IG5vIGJhbmQpLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRIZWFkZXJGb290ZXIge1xuICBoZWFkZXJIZWlnaHQ6IG51bWJlcjtcbiAgZm9vdGVySGVpZ2h0OiBudW1iZXI7XG59XG5cbi8vIFJlcG9ydC1sZXZlbCBzdHlsaW5nLiBTaXplcyBhcmUgaW4gUE9JTlRTICgxLzcyXCIpIOKAlCB0aGUgcmVwb3J0J3MgdHlwb2dyYXBoeVxuLy8gbWFwcyAxOjEgdG8gUERGICg3MnB0L2luKSBhbmQgUG93ZXJQb2ludCAocG9pbnQgZm9udCBzaXplcyksIHNvIGEgcG9pbnRcbi8vIHZhbHVlIGlzIGRpbWVuc2lvbmFsbHkgZXhhY3Qgb24gc2NyZWVuIGFuZCBpbiBldmVyeSBleHBvcnQuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbmZpZyB7XG4gIHN0eWxlcz86IFJlcG9ydFN0eWxlcztcbiAgLy8gVGhlIHJlcG9ydCdzIGdyb3VwLWJ5IGNvbnRyb2wuIE9wdGlvbmFsIG9uIHRoZSB0eXBlIGJlY2F1c2UgYSBSZXBvcnRDb25maWdcbiAgLy8gbGl0ZXJhbCBuZWVkIG5vdCBjYXJyeSBpdDsgdGhlIEFQSSBhbHdheXMgc2VuZHMgaXQsIHJlc29sdmVkLlxuICBncm91cEJ5PzogUmVwb3J0R3JvdXBCeTtcbiAgLy8gUmVzb2x2ZWQgYnkgdGhlIEFQSSBsaWtlIGdyb3VwQnkuXG4gIGhlYWRlckZvb3Rlcj86IFJlcG9ydEhlYWRlckZvb3Rlcjtcbn1cblxuLy8gVGhlIHJlcG9ydCdzIGdyb3VwLWJ5IGNvbnRyb2wg4oCUIHRoZSBvbmUgc3dpdGNoIHRoYXQgcmUtYnVja2V0cyBldmVyeVxuLy8gdGltZS1zZXJpZXMgY2hhcnQgb24gdGhlIHJlcG9ydCBiZXR3ZWVuIGRheSwgd2VlaywgbW9udGgsIHF1YXJ0ZXIgYW5kIHllYXIuXG4vL1xuLy8gSXQgaXMgTk9UIGEgZmlsdGVyOiBhIGZpbHRlciBuYXJyb3dzIHdoaWNoIHJvd3MgYXJlIGNvdW50ZWQsIHRoaXMgY2hhbmdlcyBob3dcbi8vIHRoZSBzdXJ2aXZpbmcgcm93cyBhcmUgYnVja2V0ZWQuIEl0IHNoYXJlcyB0aGUgcmVwb3J0J3MgZmlsdGVyIGJhciBiZWNhdXNlXG4vLyB0aGF0IGlzIHRoZSBvbmUgcm93IG9mIGNvbnRyb2xzIGEgdmlld2VyIHJlYWRzIGEgcmVwb3J0IHRocm91Z2gg4oCUIHRoZVxuLy8gc2VwYXJhdGlvbiB0aGF0IG1hdHRlcnMgaXMgaW4gdGhlIG1vZGVsLCBub3QgaW4gd2hlcmUgdGhlIGNvbnRyb2wgaXMgcGFpbnRlZC5cbi8vXG4vLyBBbHdheXMgYXJyaXZlcyBSRVNPTFZFRCAodGhlIGJhY2tlbmQgZmlsbHMgYW4gYWJzZW50IG9yIHBhcnRpYWwgc3RvcmVkIGJsb2NrXG4vLyBpbiBmcm9tIGl0cyBvd24gZGVmYXVsdHMpLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRlZmF1bHQgaGVyZSDigJQgcmVuZGVyIHdoYXRcbi8vIHlvdSBhcmUgZ2l2ZW4uXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyb3VwQnkge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBsYWJlbDogc3RyaW5nO1xuICBncmFudWxhcml0aWVzOiBDaGFydEdyYW51bGFyaXR5W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U3R5bGVzIHtcbiAgaGVhZGluZz86IHsgc2l6ZT86IG51bWJlciB9O1xufVxuXG4vLyBDb250ZW50IHBhZGRpbmcgYXJvdW5kIGEgY29tcG9uZW50J3MgYm9keSwgaW4gSU5DSEVTICh0aGUgZ2VvbWV0cnkgdW5pdCkuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFBhZGRpbmcge1xuICB0b3A/OiBudW1iZXI7XG4gIHJpZ2h0PzogbnVtYmVyO1xuICBib3R0b20/OiBudW1iZXI7XG4gIGxlZnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0UGFnZSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG9yZGVyOiBudW1iZXI7XG4gIC8vIFRoZSBwYWdlIG9wdHMgb3V0IG9mIHRoZSByZXBvcnQncyBoZWFkZXIgYW5kIGZvb3RlciAoYSB0aXRsZSBwYWdlKS5cbiAgbWFzdGVySGlkZGVuOiBib29sZWFuO1xuICBjb21wb25lbnRzOiBSZXBvcnRDb21wb25lbnRbXTtcbn1cblxuLy8gJ3RleHQnIGlzIGF1dGhvcmVkIHJpY2ggdGV4dCB3aXRoIG5vIHF1ZXJ5IGJlaGluZCBpdCDigJQgaXQgbmV2ZXIgZmV0Y2hlcyBkYXRhLlxuZXhwb3J0IHR5cGUgUmVwb3J0Q29tcG9uZW50VHlwZSA9ICdjaGFydCcgfCAnbGlzdCcgfCAna3BpJyB8ICd0ZXh0JztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb21wb25lbnQge1xuICBpZDogbnVtYmVyO1xuICB0eXBlOiBSZXBvcnRDb21wb25lbnRUeXBlO1xuICB0aXRsZTogc3RyaW5nIHwgbnVsbDtcbiAgLy8gR2VvbWV0cnkgaW4gSU5DSEVTLiBGcmVlZm9ybTogYWJzb2x1dGUgcG9zaXRpb24gb24gdGhlIHBhZ2UgY2FudmFzLlxuICAvLyBGbG93OiBvbmx5IGZsb3dXaWR0aC9vcmRlciBhcHBseTsgeC95IGFyZSByZW1lbWJlcmVkIGZvciBhIHN3aXRjaCBiYWNrIHRvXG4gIC8vIGZyZWVmb3JtLlxuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgdzogbnVtYmVyO1xuICBoOiBudW1iZXI7XG4gIC8vIEhlaWdodCBtb2RlLCBERVJJVkVEIGZyb20gdHlwZSBzZXJ2ZXItc2lkZSAobm90IHN0b3JlZCwgcmVhZC1vbmx5KTogbGlzdHNcbiAgLy8gYW5kIEtQSSB0aWxlcyBhcmUgYXV0byAodGhlIGJveCBzaXplcyB0byBpdHMgY29udGVudCwgYGhgIGlnbm9yZWQpOyBjaGFydHNcbiAgLy8gYXJlIGFsd2F5cyBmaXhlZCAodXNlIGBoYCkgc28gdGhleSBmaXQgdGhlIGJveCBhbmQgbmV2ZXIgb3ZlcmZsb3cuXG4gIGF1dG9IZWlnaHQ6IGJvb2xlYW47XG4gIC8vIEZsb3cgbGF5b3V0OiAlIG9mIHRoZSBwYWdlIGNvbnRlbnQgd2lkdGggdGhpcyBjb21wb25lbnQgdGFrZXMuXG4gIGZsb3dXaWR0aDogbnVtYmVyO1xuICAvLyBGbG93IGxheW91dCBvcmRlcmluZy5cbiAgb3JkZXI6IG51bWJlcjtcbiAgLy8gVGhlIHN0b3JlZCBTUUwgb2YgYSBsZWdhY3kgc3FsLW1vZGUgY29tcG9uZW50LiBOVUxMIGZvciBhIGRlcml2ZWQgb25lLFxuICAvLyB3aG9zZSBzdGF0ZW1lbnQgZG9lcyBub3QgZXhpc3QgdW50aWwgaXRzIGRvY3VtZW50IGlzIGNvbXBpbGVkIOKAlCB0aGUgU1FMIHRhYlxuICAvLyBmZXRjaGVzIHRoYXQgc2VwYXJhdGVseSAoc2VlIFJlcG9ydENvbXBvbmVudFNxbCkuXG4gIHNxbDogc3RyaW5nIHwgbnVsbDtcbiAgY29uZmlnOiBDaGFydENvbmZpZyAmIExpc3RDb25maWcgJiBLcGlDb25maWcgJiBUZXh0Q29uZmlnICYgQ29tcG9uZW50TGF5b3V0Q29uZmlnICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZpbHRlcnM6IFJlcG9ydEZpbHRlcltdO1xufVxuXG4vLyBXaGF0IHRoZSBTUUwgdGFiIGZldGNoZXM6IHRoZSBzdGF0ZW1lbnQgYSBjb21wb25lbnQgcnVucy5cbi8vXG4vLyBGb3IgYSBkZXJpdmVkIGNvbXBvbmVudCBgYmFzZWxpbmVgIGlzIHRydWUgYW5kIGBzcWxgIGlzIHdoYXQgaXRzIGRvY3VtZW50XG4vLyBjb21waWxlcyB0byB3aXRoIE5PIHZpZXdlciBzdGF0ZSDigJQgbm8gZmlsdGVycywgdGhlIGF1dGhvcmVkIGdyYWluLiBUaGVcbi8vIG51bWJlcnMgb24gc2NyZWVuIGNvbWUgZnJvbSB0aGF0IHN0YXRlbWVudCBwbHVzIHdoYXRldmVyIHRoZSB2aWV3ZXIgcGlja2VkLFxuLy8gc28gdGhlIHR3byBjYW4gbGVnaXRpbWF0ZWx5IGRpZmZlciBhbmQgdGhlIHRhYiBzYXlzIHNvIHJhdGhlciB0aGFuIGltcGx5aW5nXG4vLyB0aGV5IG1hdGNoLlxuLy9cbi8vIGB0aW1lem9uZWAgaXMgdGhlIElBTkEgem9uZSB0aGUgc3RhdGVtZW50IHdhcyBjb21waWxlZCBpbjogdGhlIHJlcG9ydCdzXG4vLyBlZmZlY3RpdmUgem9uZS4gT3B0aW9uYWwgYmVjYXVzZSBvbGRlciBzZXJ2ZXJzIG9taXQgaXQ7IHRoZXkgY29tcGlsZWQgaW4gVVRDLlxuLy9cbi8vIGBlcnJvcmAgaXMgbm90IGEgZmFpbHVyZSBvZiB0aGUgcmVxdWVzdDogYSBkb2N1bWVudCB0aGF0IG5vIGxvbmdlciBjb21waWxlc1xuLy8gaXMgcHJlY2lzZWx5IHdoYXQgc29tZW9uZSBvcGVucyB0aGlzIHRhYiB0byBkaXNjb3Zlciwgc28gaXQgYXJyaXZlcyBhcyBhXG4vLyBtZXNzYWdlIHRvIHJlbmRlciB3aXRoIGBlcnJvclR5cGVgIG5hbWluZyB3aGljaCBraW5kICgnc3RhbGUtcXVlcnknIG9yXG4vLyAnc2Vuc2l0aXZlLWNvbHVtbicpLCBhbmQgYHNxbGAgbnVsbC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q29tcG9uZW50U3FsIHtcbiAgc3FsOiBzdHJpbmcgfCBudWxsO1xuICBvcmlnaW46ICdzcWwnIHwgJ2RicScgfCAnZGVyaXZlZCc7XG4gIGJhc2VsaW5lOiBib29sZWFuO1xuICB0aW1lem9uZT86IHN0cmluZztcbiAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gIGVycm9yVHlwZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gQSB0ZXh0IGJsb2NrJ3MgY29udGVudDogYW4gaHRtbCBmcmFnbWVudCB0aGUgc2VydmVyIGhhcyBhbHJlYWR5IHJlYnVpbHQgZnJvbVxuLy8gYW4gYWxsb3dsaXN0LCB3aGljaCBtYXkgY2Fycnkge3twYWdlLm51bWJlcn19LCB7e3BhZ2UubmFtZX19IGFuZFxuLy8ge3tyZXBvcnQubmFtZX19IHRva2VucyAoc2VlIHRleHQudHMpLlxuZXhwb3J0IGludGVyZmFjZSBUZXh0Q29uZmlnIHtcbiAgaHRtbD86IHN0cmluZztcbn1cblxuLy8gQ3Jvc3MtdHlwZSBsYXlvdXQvc3R5bGUga2V5cyBjYXJyaWVkIGluIGEgY29tcG9uZW50J3MgY29uZmlnIChhbG9uZ3NpZGUgdGhlXG4vLyB0eXBlLXNwZWNpZmljIGNoYXJ0L2xpc3Qva3BpIGtleXMpLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRMYXlvdXRDb25maWcge1xuICBwYWRkaW5nPzogQ29tcG9uZW50UGFkZGluZztcbn1cblxuLy8gVGhlIHByZXNlbnRhdGlvbiBzZXR0aW5ncyBhIGNvbXBvbmVudCdzIHNldHRpbmdzIGRpYWxvZyBlZGl0cy4gTmVpdGhlciBmaWVsZFxuLy8gaXMgcGFydCBvZiB3aGF0IHRoZSBjb21wb25lbnQgcXVlcmllcywgc28gYSBjaGFuZ2UgdG8gdGhlbSByZXBhaW50cyB3aXRob3V0XG4vLyByZS1ydW5uaW5nIGFueXRoaW5nLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRTZXR0aW5ncyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHBhZGRpbmc6IENvbXBvbmVudFBhZGRpbmc7XG59XG5cbi8vIFdoZXJlIGEgY2hhcnQncyBsZWdlbmQgc2l0cyByZWxhdGl2ZSB0byB0aGUgcGxvdCwgb3IgJ2hpZGRlbicgdG8gZHJvcCBpdC5cbmV4cG9ydCB0eXBlIExlZ2VuZFBvc2l0aW9uID0gJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnaGlkZGVuJztcblxuZXhwb3J0IHR5cGUgQ2hhcnRHcmFudWxhcml0eSA9ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICdxdWFydGVyJyB8ICd5ZWFyJztcblxuLy8gSG93IGVhY2ggZ3JhbnVsYXJpdHkgcmVhZHMgaW4gdGhlIGdyb3VwLWJ5IGNvbnRyb2wgYW5kIG9uIGFuIGV4cG9ydCBjb3ZlclxuLy8gc2hlZXQuIFdISUNIIG9mIHRoZW0gYSBnaXZlbiByZXBvcnQgb2ZmZXJzIGNvbWVzIGZyb20gaXRzIFJlcG9ydEdyb3VwQnk7XG4vLyB0aGlzIGlzIG9ubHkgdGhlIG5hbWluZy4gJ3llYXInIHJlYWRzIGFzIFwiQW5udWFsbHlcIi5cbmV4cG9ydCBjb25zdCBHUkFOVUxBUklUWV9PUFRJT05TOiB7IHZhbHVlOiBDaGFydEdyYW51bGFyaXR5OyBuYW1lOiBzdHJpbmcgfVtdID0gW1xuICB7IHZhbHVlOiAnZGF5JywgbmFtZTogJ0RheScgfSxcbiAgeyB2YWx1ZTogJ3dlZWsnLCBuYW1lOiAnV2VlaycgfSxcbiAgeyB2YWx1ZTogJ21vbnRoJywgbmFtZTogJ01vbnRoJyB9LFxuICB7IHZhbHVlOiAncXVhcnRlcicsIG5hbWU6ICdRdWFydGVyJyB9LFxuICB7IHZhbHVlOiAneWVhcicsIG5hbWU6ICdBbm51YWxseScgfSxcbl07XG5cbi8vIFRoZSBjaGFydCB0eXBlcyB0aGF0IHBsb3Qgc2VyaWVzIGFnYWluc3QgYSBjYXRlZ29yeSBhbmQgYSB2YWx1ZSBheGlzLCBhbmQgc29cbi8vIHRoZSB0eXBlcyBhIG1lYXN1cmUncyBvd24gc2VyaWVzIGNhbiBiZSBkcmF3biBhcy4gQSB3YXRlcmZhbGwgaGFzIHRoZSBzYW1lXG4vLyBheGVzIGJ1dCBpcyBub3Qgb25lIG9mIHRoZW06IGl0IGRyYXdzIGl0cyBvbmUgbWVhc3VyZSBhcyBmbG9hdGluZyBzdGVwcy5cbmV4cG9ydCB0eXBlIEF4aXNDaGFydFR5cGUgPSAnYmFyJyB8ICdsaW5lJyB8ICdhcmVhJztcblxuLy8gV2hhdCBvbmUgYmFyIG9mIGEgd2F0ZXJmYWxsIGRvZXMgdG8gdGhlIHJ1bm5pbmcgdG90YWwg4oCUIGVhY2ggaXMgZHJhd24gaW4gaXRzXG4vLyBvd24gY29sb3IuIFRoZSBjbG9zaW5nIHRvdGFsIGlzIHRoZSBsYXN0IGJhciwgc3RhbmRpbmcgb24gemVyby5cbmV4cG9ydCB0eXBlIFdhdGVyZmFsbFN0ZXBLaW5kID0gJ3Jpc2UnIHwgJ2ZhbGwnIHwgJ3RvdGFsJztcblxuZXhwb3J0IGludGVyZmFjZSBDaGFydENvbmZpZyB7XG4gIC8vIEEgd2F0ZXJmYWxsIHRha2VzIE9ORSBtZWFzdXJlIHdob3NlIHZhbHVlIHBlciBjYXRlZ29yeSBpcyBob3cgZmFyIHRoZVxuICAvLyBydW5uaW5nIHRvdGFsIG1vdmVzIHRoZXJlOiBlYWNoIGJhciBzdGFydHMgd2hlcmUgdGhlIG9uZSBiZWZvcmUgaXQgZW5kZWQsXG4gIC8vIGFuZCBhIGNsb3NpbmcgVG90YWwgYmFyIHNob3dzIHRoZSBzdW0uXG4gIGNoYXJ0VHlwZT86IEF4aXNDaGFydFR5cGUgfCAnd2F0ZXJmYWxsJyB8ICdwaWUnIHwgJ2RvbnV0JztcbiAgLy8gRm9yIGtpbmQgJ3RpbWUnLCB0aGUgc2VydmVyIGJ1Y2tldHMgdGhlIHJhdyBkYXRldGltZSBjb2x1bW4gdG8gYGdyYW51bGFyaXR5YFxuICAvLyBpbiB0aGUgcmVwb3J0J3MgdGltZXpvbmUgKHRoZSBTUUwgZXhwb3NlcyB0aGUgcmF3IGNvbHVtbiwgdW5idWNrZXRlZCkuXG4gIHhBeGlzPzogeyBjb2x1bW46IHN0cmluZzsga2luZD86ICdjYXRlZ29yeScgfCAndGltZSc7IGdyYW51bGFyaXR5PzogQ2hhcnRHcmFudWxhcml0eTsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgbWVhc3VyZXM/OiBDaGFydE1lYXN1cmVbXTtcbiAgLy8gRWFjaCB2YWx1ZSBvZiB0aGlzIGNvbHVtbiBiZWNvbWVzIGl0cyBvd24gc2VyaWVzLiBJdCBjYXJyaWVzIG5vIGxhYmVsOiB0aGVcbiAgLy8gbGVnZW5kIG5hbWVzIHRoZSB2YWx1ZXMgdGhlbXNlbHZlcy5cbiAgc3BsaXRCeT86IHsgY29sdW1uOiBzdHJpbmcgfTtcbiAgLy8gU2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzIG9ubHk6IGNvbG9yIGVhY2ggYmFyIGJ5IGl0cyBvd24gY2F0ZWdvcnkgYW5kXG4gIC8vIHNob3cgYSBsZWdlbmQsIFdJVEhPVVQgc3BsaXR0aW5nIGludG8gbXVsdGlwbGUgc2VyaWVzICh3aGljaCBzbGl2ZXJzIHRoZVxuICAvLyBiYXJzKS4gdjEgZXhwZWN0cyBjb2xvckJ5LmNvbHVtbiA9PT0geEF4aXMuY29sdW1uLiBJZ25vcmVkIHdoZW4gc3BsaXRCeSBpc1xuICAvLyBzZXQgb3IgdGhlIGNoYXJ0IGlzbid0IGEgYmFyIGNoYXJ0LlxuICBjb2xvckJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgb3JpZW50YXRpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnO1xuICBzdGFja2VkPzogYm9vbGVhbjtcbiAgbGVnZW5kPzogTGVnZW5kUG9zaXRpb247XG4gIHNvcnQ/OiBSZXBvcnRTb3J0O1xuICBsaW1pdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFydE1lYXN1cmUge1xuICBjb2x1bW46IHN0cmluZztcbiAgYWdncmVnYXRpb24/OiAnc3VtJyB8ICdjb3VudCcgfCAnYXZnJyB8ICdtaW4nIHwgJ21heCc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICAvLyBEcmF3cyB0aGlzIG1lYXN1cmUncyBzZXJpZXMgYXMgYSBkaWZmZXJlbnQgdHlwZSBmcm9tIHRoZSBjaGFydCdzIG93blxuICAvLyBjaGFydFR5cGUg4oCUIGNvdW50cyBhcyBiYXJzIHdpdGggYSByYXRlIGFzIGEgbGluZSBvdmVyIHRoZW0gaXMgYSBjb21ib1xuICAvLyBjaGFydC4gT21pdHRlZCwgdGhlIHNlcmllcyB0YWtlcyB0aGUgY2hhcnQncyB0eXBlLiBBeGlzIGNoYXJ0cyBvbmx5IChhIHBpZVxuICAvLyBpZ25vcmVzIGl0KSwgYW5kIGV2ZXJ5IHNlcmllcyBzaGFyZXMgdGhlIGNoYXJ0J3Mgb25lIHZhbHVlIGF4aXMuXG4gIHR5cGU/OiBBeGlzQ2hhcnRUeXBlO1xuICAvLyBBcHBsaWVkIHRvIGEgS1BJJ3Mgc2luZ2xlIHZhbHVlIG9ubHkg4oCUIGl0IGlzIGFnZ3JlZ2F0ZWQgc2VydmVyLXNpZGUgYWZ0ZXJcbiAgLy8gdGhlIFNRTCBydW5zLCBzbyB0aGUgU1FMIGNhbm5vdCBmb3JtYXQgaXQuIENoYXJ0IG1lYXN1cmVzIHN0YXkgbnVtZXJpYy5cbiAgLy8gcGVyY2VudCBleHBlY3RzIGEgMC0xIHJhdGlvOiAwLjMgcmVuZGVycyBhcyAzMCUuXG4gIGZvcm1hdD86ICdudW1iZXInIHwgJ3BlcmNlbnQnIHwgJ2N1cnJlbmN5JztcbiAgLy8gSG93IG1hbnkgZGVjaW1hbCBwbGFjZXMgdGhlIHZhbHVlIGlzIHNob3duIHRvLiBGaXhlZCByYXRoZXIgdGhhbiBtYXhpbXVtOlxuICAvLyBhIGNvbHVtbiBvZiByYXRlcyBpcyB1bnJlYWRhYmxlIHdoZW4gZWFjaCBvbmUgc2hvd3MgYSBkaWZmZXJlbnQgbnVtYmVyIG9mXG4gIC8vIGRlY2ltYWxzLiBGb3IgcGVyY2VudCBpdCBjb3VudHMgdGhlIGRlY2ltYWxzIG9mIHRoZSBwZXJjZW50YWdlIChwcmVjaXNpb25cbiAgLy8gMSBzaG93cyAwLjMgYXMgMzAuMCUpLiBPbWl0dGVkIGxlYXZlcyB0aGUgZm9ybWF0J3Mgb3duIGRlZmF1bHQ6IGF0IG1vc3RcbiAgLy8gb25lIGRlY2ltYWwgZm9yIHBlcmNlbnQsIHRoZSBsb2NhbGUncyBkZWZhdWx0IG90aGVyd2lzZS5cbiAgLy9cbiAgLy8gSXQgY2Fubm90IGJlIGFwcGxpZWQgaW4gdGhlIFNRTDogdGhlIHZhbHVlIGlzIGFnZ3JlZ2F0ZWQgYWZ0ZXIgdGhlIHJlcG9ydCdzXG4gIC8vIGZpbHRlcnMgcnVuLCBzbyBwcmUtcm91bmRpbmcgd291bGQgYnJlYWsgbGl2ZSByZS1maWx0ZXJpbmcgYnkgZGF0ZSByYW5nZSBvclxuICAvLyBwYXJ0bmVyLlxuICBwcmVjaXNpb24/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdENvbmZpZyB7XG4gIC8vIEEgbGlzdCBjZWxsIHJlbmRlcnMgdGhlIHZhbHVlIHZlcmJhdGltOiBwZXJjZW50IHNpZ25zLCBjdXJyZW5jeSBzeW1ib2xzLFxuICAvLyB0aG91c2FuZHMgc2VwYXJhdG9ycyBhbmQgZGVjaW1hbCBwbGFjZXMgYXJlIHByb2R1Y2VkIGJ5IHRoZSBjb21wb25lbnQnc1xuICAvLyBTUUwgKHRoZSBiYWNrZW5kIHJlamVjdHMgYW55IG90aGVyIGBmb3JtYXRgIGhlcmUpLiBgZGF0ZWAgaXMgdGhlIGV4Y2VwdGlvblxuICAvLyDigJQgYSBkYXRlIGNvbHVtbiBzdGF5cyBhIFJBVyB0aW1lc3RhbXAgc28gdGhlIHJlcG9ydCB0aW1lem9uZSBhbmQgaXRzXG4gIC8vIGRhdGVSYW5nZSBmaWx0ZXJzIGtlZXAgd29ya2luZywgYW5kIHRoZSB2aWV3ZXIgbG9jYWxpc2VzIGl0IGF0IHJlbmRlci5cbiAgLy8gQSBTUUwtZm9ybWF0dGVkIGNvbHVtbiBpcyB0ZXh0LCBzbyBpdCBuYW1lcyBgc29ydENvbHVtbmA6IHRoZSByYXcgbnVtZXJpY1xuICAvLyBhbGlhcyB0aGUgcXVlcnkgYWxzbyBvdXRwdXRzLCB3aGljaCB0aGUgc2VydmVyIG9yZGVycyBieSBpbnN0ZWFkLlxuICBjb2x1bW5zPzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IGZvcm1hdD86ICdkYXRlJzsgc29ydENvbHVtbj86IHN0cmluZyB9W107XG4gIC8vIEEgY3Jvc3MtdGFiOiBgcm93QnlgIHN0YXlzIGRvd24gdGhlIHNpZGUgYW5kIGV2ZXJ5IHZhbHVlIG9mIGBwaXZvdEJ5YFxuICAvLyBiZWNvbWVzIGEgY29sdW1uLiBUaGUgdHdvIGFyZSBzZXQgdG9nZXRoZXIsIGBjb2x1bW5zYCBpcyBvbWl0dGVkICh0aGVcbiAgLy8gYmFja2VuZCByZWplY3RzIGF1dGhvcmluZyBib3RoKSwgYW5kIHRoZSBjb2x1bW4gc2V0IGFycml2ZXMgd2l0aCB0aGUgcm93c1xuICAvLyBpbiBDb21wb25lbnREYXRhLmNvbHVtbnMgYmVjYXVzZSBvbmx5IHRoZSByZXN1bHQga25vd3MgdGhlIHBpdm90IHZhbHVlcy5cbiAgLy8gcm93QnkubGFiZWwgaGVhZHMgdGhlIHNpZGUgY29sdW1uIG9uIHNjcmVlbiBhbmQgaW4gZXZlcnkgZXhwb3J0LCBhbmRcbiAgLy8gZGVmYXVsdHMgdG8gdGhlIGNvbHVtbiBuYW1lLiBwaXZvdEJ5IGNhcnJpZXMgbm8gbGFiZWw6IGl0cyB2YWx1ZXMgYXJlIHRoZVxuICAvLyBoZWFkaW5ncy5cbiAgcm93Qnk/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9O1xuICBwaXZvdEJ5PzogeyBjb2x1bW46IHN0cmluZyB9O1xuICBzb3J0PzogUmVwb3J0U29ydDtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS3BpQ29uZmlnIHtcbiAgbWVhc3VyZT86IENoYXJ0TWVhc3VyZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRTb3J0IHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIGRpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xufVxuXG5leHBvcnQgdHlwZSBSZXBvcnRGaWx0ZXJUeXBlID0gJ2RhdGVSYW5nZScgfCAnc2VsZWN0JyB8ICdrZXl3b3JkJztcblxuLy8gV2hlcmUgYSBmaWx0ZXIgZ3JvdXAncyBjb250cm9sIGlzIGV4cG9zZWQuIEEgZ3JvdXAgY2FuIGJlIHNob3duIG9uIGl0c1xuLy8gY29tcG9uZW50cywgaW4gdGhlIHJlcG9ydCBiYXIsIG9yIEJPVEggYXQgb25jZSAodGhlIHR3byBhcmUgaW5kZXBlbmRlbnRcbi8vIHRvZ2dsZXMgaW4gdGhlIFVJKTsgYSBjb2x1bW4gd2l0aCBuZWl0aGVyIGV4cG9zZWQgc2ltcGx5IGhhcyBubyBmaWx0ZXIuXG5leHBvcnQgdHlwZSBSZXBvcnRGaWx0ZXJMZXZlbCA9ICdjb21wb25lbnQnIHwgJ3JlcG9ydCcgfCAnYm90aCc7XG5cbi8vIE9uZSBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW4gb2YgYSBjb21wb25lbnQncyBTUUwsIHdpdGggdGhlIGZpbHRlciBpbnRlcmZhY2Vcbi8vIElORkVSUkVEIGZyb20gaXRzIGRhdGEgKHRoZSBodW1hbiBuZXZlciBwaWNrcyB0aGUgaW50ZXJmYWNlIOKAlCBpdCBmb2xsb3dzIHRoZVxuLy8gY29sdW1uJ3MgdHlwZSkuIERyaXZlcyB0aGUgRmlsdGVycyB0YWIgbGlzdGluZy5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyYWJsZUNvbHVtbiB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICB0eXBlOiBSZXBvcnRGaWx0ZXJUeXBlO1xufVxuXG4vLyBHcm91bmQgdHJ1dGg6IG9uZSBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW4gT04gb25lIGNvbXBvbmVudCdzIFNRTC4gQWx3YXlzIGFcbi8vIG1lbWJlciBvZiBhIGZpbHRlciBncm91cCDigJQgdGhlIHVuaXQgdGhhdCBsaW5rcyBlcXVpdmFsZW50IGZpbHRlcnMgYWNyb3NzXG4vLyBjb21wb25lbnRzIGFuZCBkZWNpZGVzIHdoZXJlIHRoZSBjb250cm9sIHJlbmRlcnMgKGNvbXBvbmVudCB2cyByZXBvcnQgYmFyKS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgY29tcG9uZW50SWQ6IG51bWJlcjtcbiAgZmlsdGVyR3JvdXBJZDogbnVtYmVyO1xuICBmaWx0ZXJDb2x1bW46IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGhhc09wdGlvbnM6IGJvb2xlYW47XG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIE9uZSBjaG9pY2UgaW4gYSBzZWxlY3QgZmlsdGVyJ3Mgb3B0aW9uIGxpc3QuIFRoZSB2YWx1ZSBpcyB3aGF0IHRoZSBmaWx0ZXJcbi8vIG1hdGNoZXMgb24gYW5kIGdldHMgc3RvcmVkIGluIGEgc2F2ZWQgZGVmYXVsdCDigJQgZm9yIGFuIGVudGl0eSB0aGF0IGlzIGl0c1xuLy8gc3RhYmxlIGlkLCBuZXZlciBpdHMgbmFtZSwgc28gcmVuYW1pbmcgdGhlIGVudGl0eSBtb3ZlcyB0aGUgbGFiZWwgd2l0aG91dFxuLy8gYnJlYWtpbmcgdGhlIGRlZmF1bHQuIFRoZSBsYWJlbCBpcyBvbmx5IGV2ZXIgd2hhdCB0aGUgdmlld2VyIHJlYWRzLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJPcHRpb24ge1xuICB2YWx1ZTogdW5rbm93bjtcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJHcm91cCB7XG4gIGlkOiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xuICB0eXBlOiBSZXBvcnRGaWx0ZXJUeXBlO1xuICBsZXZlbDogUmVwb3J0RmlsdGVyTGV2ZWw7XG4gIG9yZGVyOiBudW1iZXI7XG4gIGNvbmZpZzogeyBkZWZhdWx0PzogRmlsdGVyR3JvdXBEZWZhdWx0IH0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZmlsdGVyczogUmVwb3J0RmlsdGVyW107XG59XG5cbi8vIEEgZmlsdGVyIGdyb3VwJ3MgYXV0aG9yZWQgZGVmYXVsdCDigJQgdGhlIHZhbHVlIHRoYXQgc2VlZHMgdGhlIHJlcG9ydCBiYXIgb25cbi8vIGV2ZXJ5IG9wZW4uIFNoYXBlIGZvbGxvd3MgdGhlIGdyb3VwJ3MgdHlwZTogZGF0ZVJhbmdlIHVzZXMgc3RhcnQvZW5kIChhIGZpeGVkXG4vLyBjYWxlbmRhci1kYXkgcmFuZ2UpIG9yIGEgcmVsYXRpdmUgcHJlc2V0OyBzZWxlY3QgdXNlcyB2YWx1ZXM7IGtleXdvcmQgdXNlc1xuLy8gdmFsdWUuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwRGVmYXVsdCB7XG4gIC8vIGRhdGVSYW5nZSByZWxhdGl2ZSBwcmVzZXQsIHJlc29sdmVkIG9uIGV2ZXJ5IG9wZW4gYWdhaW5zdCB0b2RheSBpbiB0aGVcbiAgLy8gcmVwb3J0J3MgZWZmZWN0aXZlIHpvbmUgKFJlcG9ydC5lZmZlY3RpdmVUaW1lem9uZSkuIE9uZSBvZjogdGhpc1dlZWssXG4gIC8vIGxhc3RXZWVrLCBsYXN0N0RheXMsIGxhc3QzMERheXMsIGxhc3QzTW9udGhzLCBsYXN0Nk1vbnRocywgbGFzdDEyTW9udGhzLFxuICAvLyB0aGlzTW9udGgsIHRoaXNRdWFydGVyLCB0aGlzWWVhci95ZWFyVG9EYXRlLiBXZWVrcyBydW4gTW9uZGF5IHRvIFN1bmRheSxcbiAgLy8gdGhlIHNhbWUgd2Vla3MgdGhlIHNlcnZlcidzIHdlZWtseSB0aW1lIGJ1Y2tldHMgdXNlLlxuICByZWxhdGl2ZT86IHN0cmluZztcbiAgc3RhcnQ/OiBzdHJpbmc7IC8vIGRhdGVSYW5nZSBmaXhlZCBzdGFydCAoeXl5eS1NTS1kZClcbiAgZW5kPzogc3RyaW5nOyAvLyBkYXRlUmFuZ2UgZml4ZWQgZW5kICh5eXl5LU1NLWRkKVxuICB2YWx1ZXM/OiB1bmtub3duW107IC8vIHNlbGVjdCBkZWZhdWx0IHBpY2tlZCB2YWx1ZXNcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmQgZGVmYXVsdCB0ZXh0XG59XG5cbi8vIFRoZSBzZXNzaW9uIHZhbHVlIG9mIGEgZmlsdGVyIGdyb3VwOiBzaGFwZSBkZXBlbmRzIG9uIHRoZSBncm91cCdzIHR5cGUuIE5vdFxuLy8gc3RvcmVkIG9uIHRoZSBzZXJ2ZXI7IHRoZSB2aWV3ZXIncyBVUkwgY2FycmllcyB0aGUgdmFsdWVzIHRoYXQgZGlmZmVyIGZyb21cbi8vIHRoZSBkZWZhdWx0cyAocmVwb3J0LXVybC1zdGF0ZS50cykuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwVmFsdWUge1xuICBzdGFydD86IERhdGUgfCBzdHJpbmcgfCBudWxsOyAvLyBkYXRlUmFuZ2VcbiAgZW5kPzogRGF0ZSB8IHN0cmluZyB8IG51bGw7IC8vIGRhdGVSYW5nZVxuICB2YWx1ZXM/OiB1bmtub3duW107IC8vIHNlbGVjdFxuICB2YWx1ZT86IHN0cmluZzsgLy8ga2V5d29yZFxuICAvLyBkYXRlUmFuZ2Ugb25seTogdGhlIHJlbGF0aXZlIHByZXNldCBuYW1lIHRoZXNlIGRhdGVzIHdlcmUgcmVzb2x2ZWQgZnJvbVxuICAvLyAoYSBGaWx0ZXJHcm91cERlZmF1bHQucmVsYXRpdmUgbmFtZSkuIFNldCBvbmx5IHdoZW4gdGhlIHZhbHVlIHdhcyBzZWVkZWRcbiAgLy8gZnJvbSB0aGUgZ3JvdXAncyByZWxhdGl2ZSBkZWZhdWx0IG9yIHJlYWQgZnJvbSBhIHByZXNldCBuYW1lIGluIHRoZSBVUkwsXG4gIC8vIHNvIHRoZSBVUkwga2VlcHMgdGhlIHJhbmdlIHJvbGxpbmcgKCdsYXN0MzBEYXlzJykgaW5zdGVhZCBvZiBmcmVlemluZyB0d29cbiAgLy8gZGF0ZXMuIEFueSBkYXRlIHBpY2tlZCBieSB0aGUgdmlld2VyLCBhIHBpY2tlciBzaG9ydGN1dCBpbmNsdWRlZCwgaXNcbiAgLy8gc3RvcmVkIHdpdGhvdXQgaXQuXG4gIHByZXNldD86IHN0cmluZztcbn1cblxuLy8gVGhlIHZpZXdlci1zdGF0ZSBxdWVyeSBwYXJhbXMgb2YgYSByZXBvcnQgVVJMLCBhcyByYXcgc3RyaW5ncywgYmVmb3JlIHRoZXlcbi8vIGFyZSBjaGVja2VkIGFnYWluc3QgdGhlIHJlcG9ydCAocmVwb3J0LXVybC1zdGF0ZS50cyByZWFkUmVwb3J0VXJsUGFyYW1zKS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0VXJsUGFyYW1zIHtcbiAgLy8gZzxncm91cElkPiAtPiB0aGUgZW5jb2RlZCBncm91cCB2YWx1ZSAoJycgPSB0aGUgdmlld2VyIGNsZWFyZWQgaXQpLlxuICBncm91cHM6IE1hcDxudW1iZXIsIHN0cmluZz47XG4gIC8vIHM8Y29tcG9uZW50SWQ+IC0+IHRoZSBlbmNvZGVkIGxpc3Qgc29ydCAoJy1jb2x1bW4nID0gZGVzY2VuZGluZykuXG4gIGxpc3RTb3J0czogTWFwPG51bWJlciwgc3RyaW5nPjtcbiAgLy8gVGhlIGdyb3VwLWJ5IGdyYWluLCBvciBudWxsIHdoZW4gdGhlIFVSTCBoYXMgbm9uZS5cbiAgZ3JvdXBCeTogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gVGhlIHZpZXdlciBzdGF0ZSB0aGUgVVJMIHNob3VsZCBjYXJyeTogb25seSB3aGF0IGRpZmZlcnMgZnJvbSB0aGUgcmVwb3J0J3Ncbi8vIGF1dGhvcmVkIGRlZmF1bHRzIChSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UudXJsU25hcHNob3QpLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRVcmxTbmFwc2hvdCB7XG4gIC8vIEEgZ3JvdXAncyB2YWx1ZSwgb3IgbnVsbCB3aGVuIHRoZSB2aWV3ZXIgY2xlYXJlZCBhIGdyb3VwIHRoYXQgaGFzIGEgZGVmYXVsdC5cbiAgZ3JvdXBzOiBNYXA8bnVtYmVyLCBGaWx0ZXJHcm91cFZhbHVlIHwgbnVsbD47XG4gIC8vIEEgbGlzdCdzIHNvcnQsIGJ5IGNvbXBvbmVudCBpZCwgd2hlbiBpdCBkaWZmZXJzIGZyb20gdGhlIGF1dGhvcmVkIHNvcnQuXG4gIGxpc3RTb3J0czogTWFwPG51bWJlciwgUmVwb3J0U29ydD47XG4gIGZyZXF1ZW5jeTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGw7XG59XG5cbi8vIE9uZSByZXNvbHZlZCBmaWx0ZXIgc2VudCB3aXRoIGEgY29tcG9uZW50J3MgZGF0YSByZXF1ZXN0LlxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZEZpbHRlclZhbHVlIHtcbiAgZmlsdGVySWQ6IG51bWJlcjtcbiAgc3RhcnQ/OiBzdHJpbmc7XG4gIGVuZD86IHN0cmluZztcbiAgdmFsdWVzPzogdW5rbm93bltdO1xuICB2YWx1ZT86IHN0cmluZztcbn1cblxuLy8gUGVyLWNvbXBvbmVudCBpbnRlcmFjdGlvbiBzdGF0ZSBzZW50IHdpdGggdGhlIGRhdGEgcmVxdWVzdDogbGlzdHMgc2VuZFxuLy8gc29ydC9wYWdpbmc7IHRpbWUtc2VyaWVzIGNoYXJ0cyBzZW5kIHRoZSBncmFpbiBwaWNrZWQgb24gdGhlIHJlcG9ydCdzIGdyb3VwLWJ5XG4vLyBjb250cm9sLCB3aGljaCBvdmVycmlkZXMgdGhlIGF1dGhvcmVkIGdyYW51bGFyaXR5IGZvciB0aGF0IHJlcXVlc3Qgb25seS4gVGhlXG4vLyB3aXJlIGtleSBzdGF5cyBgZnJlcXVlbmN5YCDigJQgaXQgaXMgdGhlIGJ1Y2tldGluZyBmcmVxdWVuY3kgdGhlIHNlcnZlciBhcHBsaWVzLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREYXRhU3RhdGUge1xuICBzb3J0PzogUmVwb3J0U29ydDtcbiAgcGFnZT86IG51bWJlcjtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIGZyZXF1ZW5jeT86IENoYXJ0R3JhbnVsYXJpdHk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGF0YSB7XG4gIGNvbHVtbnM6IHN0cmluZ1tdO1xuICByb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICBwYWdpbmc/OiB7IHRvdGFsOiBudW1iZXI7IHBhZ2U6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9O1xuICB0cnVuY2F0ZWQ6IGJvb2xlYW47XG4gIC8vIFRoZSBlZmZlY3RpdmUgdGltZSBidWNrZXQgdGhlIHJvd3Mgd2VyZSBncm91cGVkIGludG8gKGFmdGVyIGFueSBncm91cC1ieVxuICAvLyBvdmVycmlkZSksIG9yIG51bGwgZm9yIGEgbm9uLXRpbWUgYXhpcy4gRHJpdmVzIHRoZSBjb21wYWN0IHgtYXhpcyBsYWJlbHMuXG4gIGdyYW51bGFyaXR5PzogQ2hhcnRHcmFudWxhcml0eSB8IG51bGw7XG59XG5cbi8vIEEgY29tcG9uZW50J3MgQ1NWIGV4cG9ydDogdGhlIHByZXNpZ25lZCBkb3dubG9hZCBVUkwsIHBsdXMgb25lIHNlbnRlbmNlIHBlclxuLy8gd2F5IHRoZSBmaWxlIGZhbGxzIHNob3J0IG9mIHRoZSBmdWxsIHJlc3VsdCAoY3V0IGF0IHRoZSBleHBvcnQgY2VpbGluZywgb3Jcbi8vIGN1dCBhcyB0aGUgY2hhcnQgaXRzZWxmIGlzKS4gRW1wdHkgd2hlbiB0aGUgZmlsZSBpcyBjb21wbGV0ZS4gT3B0aW9uYWxcbi8vIGJlY2F1c2UgYSBzZXJ2ZXIgb24gYW4gb2xkZXIgZnJhbWV3b3JrIGFuc3dlcnMgd2l0aCB0aGUgdXJsIGFsb25lLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRFeHBvcnRSZXNwb25zZSB7XG4gIHVybDogc3RyaW5nO1xuICBub3Rlcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydExpc3RJdGVtIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBtb2RpZnlEYXRlOiBzdHJpbmc7XG4gIHN0YXRlPzogUmVwb3J0U3RhdGU7XG4gIC8vIFRoZSBmb2xkZXIgdGhlIHJlcG9ydCBpcyBmaWxlZCB1bmRlci4gbnVsbCBpcyBhIHJlYWwsIGNvbW1vbiB2YWx1ZSDigJQgdGhlXG4gIC8vIHJlcG9ydCBzaXRzIGF0IHRoZSByb290IG9mIHRoZSBsaXN0aW5nIHRyZWUgYWxvbmdzaWRlIHRoZSBmb2xkZXJzLlxuICAvL1xuICAvLyBPcHRpb25hbCBsaWtlIGBzdGF0ZWAgYmVzaWRlIGl0OiB0aGUgYmFja2VuZCBhbHdheXMgc2VuZHMgaXQsIGJ1dCBtYWtpbmcgaXRcbiAgLy8gcmVxdWlyZWQgaXMgYSBicmVha2luZyB0eXBlIGNoYW5nZSBmb3IgZXZlcnkgY29uc3VtZXIgaG9sZGluZyBhXG4gIC8vIFJlcG9ydExpc3RJdGVtIGxpdGVyYWwgKGZpeHR1cmVzLCBtb2NrcykgYW5kIGJ1eXMgbm90aGluZyDigJQgdGhlIGxpc3RpbmdcbiAgLy8gcmVhZHMgaXQgYXMgYD8/IG51bGxgIGVpdGhlciB3YXkuXG4gIHJlcG9ydEZvbGRlcklkPzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gT25lIGZvbGRlciBpbiB0aGUgbGlzdGluZyB0cmVlIOKAlCBhbiBhdWRpZW5jZSBidWNrZXQgKFwiTWFuYWdlbWVudFwiLFxuLy8gXCJPcGVyYXRpb25zXCIpIHJlcG9ydHMgYXJlIGZpbGVkIGludG8uIEZvbGRlcnMgbmVzdCB2aWEgcGFyZW50UmVwb3J0Rm9sZGVySWQ7XG4vLyByZXBvcnRzIG5ldmVyIGRvLCBzbyB0aGUgdHJlZSdzIG9ubHkgYnJhbmNoIG5vZGVzIGFyZSBmb2xkZXJzLlxuLy9cbi8vIGBzdGF0ZWAgaXMgdGhlIGZvbGRlcidzIE9XTiBzdGF0ZS4gRGVsZXRpbmcgYSBmb2xkZXIgd3JpdGVzIG9ubHkgdGhhdCwgYW5kXG4vLyBldmVyeXRoaW5nIGJlbG93IGl0IGNvdW50cyBhcyBkZWxldGVkIGJ5IHBvc2l0aW9uIOKAlCBzZWUgUmVwb3J0Tm9kZS5kZWxldGVkLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGb2xkZXIge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHBhcmVudFJlcG9ydEZvbGRlcklkOiBudW1iZXIgfCBudWxsO1xuICBzdGF0ZT86IFJlcG9ydFN0YXRlO1xufVxuXG4vLyBHRVQgL2FwaS9yZXBvcnRzIHJldHVybnMgYm90aCBoYWx2ZXMgZmxhdDsgdGhlIGxpc3RpbmcgbmVzdHMgdGhlbSBpdHNlbGYuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFRyZWUge1xuICByZXBvcnRzOiBSZXBvcnRMaXN0SXRlbVtdO1xuICBmb2xkZXJzOiBSZXBvcnRGb2xkZXJbXTtcbn1cblxuZXhwb3J0IGVudW0gUmVwb3J0Tm9kZVR5cGUge1xuICBGb2xkZXIgPSAnZm9sZGVyJyxcbiAgUmVwb3J0ID0gJ3JlcG9ydCcsXG59XG5cbi8vIE9uZSBub2RlIGFzIGZzLXRyZWUgc2VlcyBpdC4gRm9sZGVycyBhbmQgcmVwb3J0cyBzaGFyZSBvbmUgaWQgc3BhY2UgaW4gdGhlXG4vLyB2aWV3LCBzbyB0aGUgaWRzIGFyZSBwcmVmaXhlZCAoJ2Y6MTInIC8gJ3I6MzQnKSDigJQgYGlkYCBpcyB0aGUgb3JpZ2luYWwsXG4vLyBwZXItdGFibGUgaWQgdGhhdCB0aGUgQVBJIGVuZHBvaW50cyB0YWtlLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnROb2RlIHtcbiAga2V5OiBzdHJpbmc7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogUmVwb3J0Tm9kZVR5cGU7XG4gIC8vIE9ubHkgZXZlciBwb3B1bGF0ZWQgb24gYSBmb2xkZXI7IGEgcmVwb3J0IGlzIGFsd2F5cyBhIGxlYWYuXG4gIGNoaWxkcmVuOiBSZXBvcnROb2RlW107XG4gIC8vIFByZXNlbnQgb24gcmVwb3J0IG5vZGVzIG9ubHkuXG4gIHJlcG9ydD86IFJlcG9ydExpc3RJdGVtO1xuICAvLyBUaGUgbm9kZSdzIG93biByb3cgaXMgZGVsZXRlZC4gV2hhdCBlYXJucyB0aGUgXCJEZWxldGVkXCIgY2hpcCDigJQgdGhpcyBpc1xuICAvLyB3aGF0IHNvbWVib2R5IGFjdHVhbGx5IGRlbGV0ZWQuXG4gIHN0YXRlRGVsZXRlZDogYm9vbGVhbjtcbiAgLy8gRGVsZXRlZCBpdHNlbGYgT1IgYW55d2hlcmUgYmVsb3cgYSBkZWxldGVkIGZvbGRlci4gT25seSBldmVyIHRydWUgaW4gU2hvd1xuICAvLyBEZWxldGVkIG1vZGUgKHRoZSBkZWZhdWx0IGxpc3RpbmcgbmV2ZXIgcmV0dXJucyBzdWNoIGEgbm9kZSksIGFuZCBpdCBpcyB3aGF0XG4gIC8vIHN3YXBzIHRoZSByb3cncyBhY3Rpb25zIGZvciBSZXN0b3JlLlxuICBkZWxldGVkOiBib29sZWFuO1xufVxuXG4vLyBSZXBvcnRzIGFuZCBmb2xkZXJzIGFyZSBib3RoIHNvZnQtZGVsZXRhYmxlLiBBIGRlbGV0ZWQgcmVwb3J0IGtlZXBzIGl0cyBwYWdlc1xuLy8gYW5kIGNvbXBvbmVudHM7IGEgZGVsZXRlZCBmb2xkZXIga2VlcHMgZXZlcnl0aGluZyBmaWxlZCB1bmRlciBpdCwgd2hpY2ggbGVhdmVzXG4vLyB0aGUgbGlzdGluZyB3aXRoIGl0IGFuZCBjb21lcyBiYWNrIHdpdGggaXQuIFwiU2hvdyBEZWxldGVkXCIgc2hvd3MgdGhlIHdob2xlXG4vLyB0cmVlLCBsaXZlIGFuZCBkZWxldGVkIHRvZ2V0aGVyLCBzbyBhbnkgb2YgaXQgY2FuIGJlIHJlc3RvcmVkIGluIHBsYWNlLlxuZXhwb3J0IGVudW0gUmVwb3J0U3RhdGUge1xuICBBY3RpdmUgPSAnYWN0aXZlJyxcbiAgRGVsZXRlZCA9ICdkZWxldGVkJyxcbn1cblxuLy8gVGhlIGNoYXQgdHVybiBmbGFncyB0aGlzIGNvbnRleHQncyBiYWNrZW5kIGFkZHMgKFJlcG9ydHNcXEFpVmlldykuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENoYXRSZXNwb25zZSB7XG4gIHJlcG9ydENoYW5nZWQ/OiBib29sZWFuO1xuICByZXBvcnRSZW5hbWVkPzogYm9vbGVhbjtcbn1cblxuLy8gT25lIHZlcnNpb24gb2YgdGhlIGdsb2JhbCBBSSBrbm93bGVkZ2UgZG9jdW1lbnQg4oCUIHRoZSBvcGVyYXRvci1hdXRob3JlZFxuLy8gbWFya2Rvd24gYXBwZW5kZWQgdG8gdGhlIHJlcG9ydCBhZ2VudCdzIHN5c3RlbSBpbnN0cnVjdGlvbnMgb24gZXZlcnkgdHVybi5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SW5zdHJ1Y3Rpb24ge1xuICBpZDogbnVtYmVyO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGN1cnJlbnQ6IGJvb2xlYW47XG4gIGNyZWF0ZURhdGU6IERhdGU7XG4gIG1vZGlmeURhdGU6IERhdGU7XG4gIGFjY291bnRJZDogbnVtYmVyIHwgbnVsbDtcbiAgYWNjb3VudE5hbWU6IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIEdFVC9QVVQgaW5zdHJ1Y3Rpb25zIHBheWxvYWQ6IHRoZSBjdXJyZW50IHZlcnNpb24gKG51bGwgdW50aWwgb25lIGlzXG4vLyBhdXRob3JlZCkgcGx1cyB0aGUgZnVsbCBoaXN0b3J5LCBuZXdlc3QgZmlyc3QuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEluc3RydWN0aW9ucyB7XG4gIGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb24gfCBudWxsO1xuICB2ZXJzaW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25bXTtcbn1cblxuLy8gVGhlIGxhdGVzdCBzZW1hbnRpYy1kYXRhYmFzZSBidWlsZCAoYW4gZmZfcHJvY2Vzc2VzIHJvdykg4oCUIGVub3VnaCBmb3IgdGhlXG4vLyBzZXR0aW5ncyBkaWFsb2cgdG8gc2F5IHdoYXQgc3RhdGUgdGhlIGJ1aWxkIGlzIGluIGFuZCB3aGVuIGl0IGxhc3QgcmFuLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkIHtcbiAgaWQ6IG51bWJlcjtcbiAgc3RhdGU6IHN0cmluZztcbiAgcGVyY2VudDogbnVtYmVyIHwgc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIGNyZWF0ZURhdGU6IERhdGU7XG4gIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgZW5kRGF0ZTogRGF0ZTtcbn1cblxuLy8gQSBidWlsZCBzdGFnZSdzIHN0YXRlIG9uIHRoZSBlbnRpdHkgc2NvcmVib2FyZDogJ2RvbmUnID0gYnVpbHQsICdtaXNzaW5nJyA9XG4vLyBzdGlsbCBuZWVkcyBidWlsZGluZyAoYSBtaXNzaW5nIHN0YWdlIGlzIHVuYnVpbHQgY29udGVudCwgbmV2ZXIgYW4gZXJyb3IpLlxuZXhwb3J0IHR5cGUgU2VtYW50aWNCdWlsZFN0YWdlID0gJ2RvbmUnIHwgJ21pc3NpbmcnO1xuXG4vLyBPbmUgZW51bSBjb2x1bW4gb2YgYW4gZW50aXR5LCB3aXRoIHRoZSBhbGxvd2VkIHZhbHVlcyB0aGUgYnVpbGQgaW5saW5lZC5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZEVudW0ge1xuICBjb2x1bW46IHN0cmluZztcbiAgdmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLy8gT25lIGVudGl0eSByb3cgb2YgdGhlIHNjb3JlYm9hcmQgKGFuIGVudGl0eSA9IGEgdGFibGUgKyBhIG1vZGVsICsgYVxuLy8gaGFuZGxlcik6IGl0cyB0YWJsZS9zaGFwZSBjb3VudHMsIGlubGluZWQgZW51bSB2YWx1ZXMsIGNvbXB1dGVkIGZpZWxkcywgaG93XG4vLyBtYW55IGNvZGUgZnVuY3Rpb25zIHdlcmUgY2FjaGVkIChzcGxpdCBtb2RlbCB2cyBoYW5kbGVyKSwgYW5kIHRoZSBwZXItc3RhZ2Vcbi8vIGJ1aWx0L21pc3Npbmcgc3RhdGUuXG4vL1xuLy8gYG1vZGVsYC9gaGFuZGxlcmAgYXJlIHRoZSBjbGFzc2VzIHRoZSBmdW5jdGlvbnMgd2VyZSByZWFkIGZyb20g4oCUIHdoYXQgYVxuLy8gcmVhZGVyIHJlY29nbml6ZXMgdGhlIHJvdyBieSwgd2hlcmUgYGtleWAgaXMgd2hhdCB0aGUgcmVwb3J0IEFJIGFkZHJlc3NlcyBpdFxuLy8gYnkgaW4gZGVzY3JpYmVfZW50aXR5IC8gY29tcGlsZV9xdWVyeS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZEVudGl0eSB7XG4gIGtleTogc3RyaW5nO1xuICB0YWJsZTogc3RyaW5nO1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgaGFuZGxlcjogc3RyaW5nIHwgbnVsbDtcbiAgY29sdW1uczogbnVtYmVyO1xuICByZWxhdGlvbnNoaXBzOiBudW1iZXI7XG4gIGVudW1zOiBTZW1hbnRpY0J1aWxkRW51bVtdO1xuICBjb21wdXRlZEZpZWxkczogc3RyaW5nW107XG4gIGZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgbW9kZWxGdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIGhhbmRsZXJGdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIHN0YWdlczogUmVjb3JkPHN0cmluZywgU2VtYW50aWNCdWlsZFN0YWdlPjtcbn1cblxuLy8gT25lIHN0YW5kYWxvbmUgY29kZSBjbGFzcyB0aGUgYnVpbGQgcmVhZDogZG9tYWluIGxvZ2ljIHdpdGggbm8gdGFibGUgb2YgaXRzXG4vLyBvd24gKGEgc3VtbWFyeSBtb2RlbCwgYSBjYWxjdWxhdGlvbiBzZXJ2aWNlKS4gVGhlIHJlcG9ydCBBSSByZWFkcyBpdHMgY29kZVxuLy8gZXhhY3RseSBsaWtlIGFuIGVudGl0eSdzLCBidXQgaXQgY2FuIG5ldmVyIGJlIHF1ZXJpZWQg4oCUIHRoZXJlIGlzIG5vdGhpbmcgdG9cbi8vIHNlbGVjdCBmcm9tIOKAlCBzbyBpdCBjYXJyaWVzIG5vIHRhYmxlLCBjb2x1bW5zIG9yIHJlbGF0aW9uc2hpcHMuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRDbGFzcyB7XG4gIGtleTogc3RyaW5nO1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xufVxuXG4vLyBXaGF0IHRoZSBidWlsZCBkZWNpZGVkIGEgcGh5c2ljYWwgdGFibGUgaXMuIEVudGl0eSBhbmQganVuY3Rpb24gYXJlIGJvdGhcbi8vIHJlYWNoYWJsZSBieSB0aGUgcmVwb3J0IEFJIOKAlCBhbiBlbnRpdHkgZGlyZWN0bHksIGEganVuY3Rpb24gdGhyb3VnaCB0aGVcbi8vIG1hbnktdG8tbWFueSBpdCBicmlkZ2VzLiBFeGNsdWRlZCBpcyBub3QgcmVhY2hhYmxlIGF0IGFsbC5cbmV4cG9ydCB0eXBlIFNlbWFudGljVGFibGVDbGFzc2lmaWNhdGlvbiA9ICdlbnRpdHknIHwgJ2p1bmN0aW9uJyB8ICdleGNsdWRlZCc7XG5cbi8vIE9uZSBwaHlzaWNhbCB0YWJsZSBhcyB0aGUgYnVpbGQgY2xhc3NpZmllZCBpdC4gYHJlYXNvbmAgYW5zd2VycyBhIHNpbmdsZVxuLy8gcXVlc3Rpb24g4oCUIHdoeSBjYW4ndCB0aGUgcmVwb3J0IEFJIHNlZSB0aGlzIHRhYmxlPyDigJQgYW5kIGlzIG51bGwgd2hlbiBpdCBjYW4uXG4vLyBBIGp1bmN0aW9uIHdpdGggYSByZWFzb24gYnJpZGdlZCBub3RoaW5nLCBzbyBpdCBpcyBqdXN0IGFzIGludmlzaWJsZSBhcyBhblxuLy8gZXhjbHVkZWQgdGFibGUuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRUYWJsZSB7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIGNsYXNzaWZpY2F0aW9uOiBTZW1hbnRpY1RhYmxlQ2xhc3NpZmljYXRpb247XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICByZWFzb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIFRoZSBidWlsZCBzY29yZWJvYXJkIHNoaXBwZWQgYWxvbmdzaWRlIHRoZSBidWlsZCBzdGF0dXM6IHRoZSBzdW1tYXJ5IGNvdW50cyxcbi8vIHRoZSBmdWxsIGJyZWFrZG93biB0aGUgc2V0dGluZ3MgZGlhbG9nIGRyaWxscyBpbnRvIOKAlCBCT1RIIGtpbmRzIG9mIHVuaXQgdGhlXG4vLyBidWlsZCBjYWNoZXMsIHRhYmxlLWJhY2tlZCBlbnRpdGllcyBhbmQgc3RhbmRhbG9uZSBjb2RlIGNsYXNzZXMg4oCUIGFuZCB0aGVcbi8vIGNhdGFsb2cgb2YgZXZlcnkgdGFibGUgdGhlIGJ1aWxkIHNhdywgc28gdGhlIHRhYiBjYW4gc2hvdyB3aGF0IHRoZSByZXBvcnQgQUlcbi8vIGNhbid0IHNlZSwgbm90IGp1c3Qgd2hhdCBpdCBjYW4uXG4vL1xuLy8gYGZ1bmN0aW9uQ291bnRgIHNwYW5zIGVudGl0aWVzIGFuZCBjbGFzc2VzIGFsaWtlOiBpdCBpcyB0aGUgc2FtZSB0b3RhbCB0aGVcbi8vIGJ1aWxkIGl0c2VsZiByZXBvcnRzIHdoZW4gaXQgZmluaXNoZXMuXG4vL1xuLy8gYHRhYmxlc2AgaXMgZW1wdHkgZm9yIGFuIGFydGlmYWN0IGJ1aWx0IGJlZm9yZSB0aGUgY2F0YWxvZyBleGlzdGVkLiBSZWFkIHRoYXRcbi8vIGFzIFwibm8gY2F0YWxvZ1wiLCBuZXZlciBhcyBcIm5vdGhpbmcgd2FzIGV4Y2x1ZGVkXCIuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGREZXRhaWwge1xuICAvLyBXaGV0aGVyIHRoZSBhcnRpZmFjdCB3YXMgcHJvZHVjZWQgYnkgYSBidWlsZCB0aGF0IHJhbiB0byB0aGUgZW5kLiBSZWFkIGl0XG4gIC8vIGJlc2lkZSBgZ2VuZXJhdGVkQXRgLCBuZXZlciBpbnN0ZWFkIG9mIGl0OiB0aGUgc3RydWN0dXJhbCBhcnRpZmFjdCBpc1xuICAvLyBwdWJsaXNoZWQgQkVGT1JFIHRoZSBBSSBmdW5jdGlvbiBwYXNzLCBzbyBhIGJ1aWxkIHdob3NlIEFJIHBhc3MgZmFpbGVkIHN0aWxsXG4gIC8vIGNhcnJpZXMgYSBkYXRlIGFuZCBhIGZ1bGwgc2V0IG9mIGNvdW50cy4gVGhlIGRhdGUgc2F5cyBzb21ldGhpbmcgd2FzXG4gIC8vIHdyaXR0ZW47IG9ubHkgdGhpcyBzYXlzIHRoZSBidWlsZCBmaW5pc2hlZCB3cml0aW5nIGl0LlxuICBjb21wbGV0ZTogYm9vbGVhbjtcbiAgZ2VuZXJhdGVkQXQ6IERhdGUgfCBudWxsO1xuICBlbnRpdHlDb3VudDogbnVtYmVyO1xuICBjbGFzc0NvdW50OiBudW1iZXI7XG4gIGZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgZW50aXRpZXM6IFNlbWFudGljQnVpbGRFbnRpdHlbXTtcbiAgY2xhc3NlczogU2VtYW50aWNCdWlsZENsYXNzW107XG4gIHRhYmxlQ291bnQ6IG51bWJlcjtcbiAganVuY3Rpb25Db3VudDogbnVtYmVyO1xuICB1bmxpbmtlZEp1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgZXhjbHVkZWRDb3VudDogbnVtYmVyO1xuICB0YWJsZXM6IFNlbWFudGljQnVpbGRUYWJsZVtdO1xufVxuXG4vLyBXaGljaCBjbGFzcyBhIGNhY2hlZCBmdW5jdGlvbiB3YXMgcmVhZCBmcm9tLiBBbiBlbnRpdHkncyBjYWNoZSBzcGxpdHMgaW50b1xuLy8gJ21vZGVsJyBhbmQgJ2hhbmRsZXInOyBhIHN0YW5kYWxvbmUgY29kZSBjbGFzcyBoYXMgb25lIGdyb3VwLCAnY2xhc3MnLlxuZXhwb3J0IHR5cGUgU2VtYW50aWNGdW5jdGlvblNvdXJjZSA9ICdtb2RlbCcgfCAnaGFuZGxlcicgfCAnY2xhc3MnO1xuXG4vLyBPbmUgQUktY2xhc3NpZmllZCBjb2RlIGZ1bmN0aW9uIGZyb20gYSBtb2RlbCwgaGFuZGxlciBvciBzdGFuZGFsb25lIGNsYXNzOlxuLy8gd2hhdCBraW5kIG9mIGxvZ2ljIGl0IGlzLCB3aGF0IGl0IGRvZXMsIGFuZCB3aGF0IGl0IHByb2R1Y2VzIOKAlCB0aGUgYnVpbGQnc1xuLy8gY2FjaGVkIFwid2hhdCB0aGUgY29kZSBkb2VzXCIga25vd2xlZGdlIHNob3duIGluIHRoZSBmdW5jdGlvbnMgZGlhbG9nLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0VudGl0eUZ1bmN0aW9uIHtcbiAgY2xhc3M6IHN0cmluZztcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIHNpZ25hdHVyZTogc3RyaW5nO1xuICBraW5kOiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgcHJvZHVjZXM6IHN0cmluZztcbiAgc291cmNlOiBTZW1hbnRpY0Z1bmN0aW9uU291cmNlO1xufVxuXG4vLyBPbmUgZW50aXR5J3MgY2FjaGVkIGNvZGUtZnVuY3Rpb24ga25vd2xlZGdlLCBmZXRjaGVkIHdoZW4gYSBmdW5jdGlvbnMgZGlhbG9nXG4vLyBvcGVucyAodGhlIGZ1bGwgc2V0IGFjcm9zcyBhbGwgZW50aXRpZXMgaXMgdG9vIGJpZyB0byBzaGlwIHdpdGggdGhlXG4vLyBzY29yZWJvYXJkKS4gT25lIHBheWxvYWQgc2VydmVzIGJvdGggZGlhbG9ncyDigJQgY29uc3VtZXJzIGZpbHRlciBieSBzb3VyY2UuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljRW50aXR5RnVuY3Rpb25zIHtcbiAgZW50aXR5OiBzdHJpbmc7XG4gIGdlbmVyYXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgbW9kZWxDbGFzczogc3RyaW5nIHwgbnVsbDtcbiAgaGFuZGxlckNsYXNzOiBzdHJpbmcgfCBudWxsO1xuICBmdW5jdGlvbnM6IFNlbWFudGljRW50aXR5RnVuY3Rpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkU3RhdHVzIHtcbiAgYnVpbGQ6IFNlbWFudGljQnVpbGQgfCBudWxsO1xuICBkZXRhaWw6IFNlbWFudGljQnVpbGREZXRhaWw7XG59XG5cbi8vIFRoZSByZXBvcnQgbW9kdWxlJ3MgR2VuZXJhbCBzZXR0aW5ncyAoYSBzbWFsbCBnbG9iYWwga2V5L3ZhbHVlIHN0b3JlLCB0aGVcbi8vIHJlcG9ydGluZyBjb3VudGVycGFydCBvZiB0aGUgYXBwLXdpZGUgc2V0dGluZ3MpLiBFYWNoIHZhbHVlIHNoaXBzIHdpdGggdGhlXG4vLyBzYWZlIGJhbmQgaXRzIGVkaXRvciBmaWVsZCBpcyBib3VuZGVkIHRvLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRTZXR0aW5ncyB7XG4gIC8vIEhvdyBtYW55IHN1bW1hcnkgY2FsbHMgdGhlIHNlbWFudGljIGJ1aWxkIHJ1bnMgYXQgb25jZS5cbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5OiBudW1iZXI7XG4gIHNlbWFudGljQnVpbGRDb25jdXJyZW5jeU1pbjogbnVtYmVyO1xuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3lNYXg6IG51bWJlcjtcbn1cbiJdfQ==
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQStPbkMsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdEO0lBQzlFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUFnWkYsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUF1QkQsZ0ZBQWdGO0FBQ2hGLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBTixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsZ0NBQWlCLENBQUE7SUFDakIsa0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIGFzc2VtYmxlZCByZXBvcnQgc3RydWN0dXJlIHJldHVybmVkIGJ5IEdFVCAvYXBpL3JlcG9ydHMvOmlkIOKAlCBjb21wb3NlZFxuLy8gc2VydmVyLXNpZGUgZnJvbSB0aGUgbm9ybWFsaXplZCB0YWJsZXMgKHJlcG9ydHMg4oaSIHJlcG9ydF9wYWdlcyDihpJcbi8vIHJlcG9ydF9jb21wb25lbnRzICsgcmVwb3J0X2ZpbHRlcnMsIHBsdXMgcmVwb3J0X2ZpbHRlcl9ncm91cHMpLiBBbGwga2V5cyBhcmVcbi8vIGNhbWVsQ2FzZTsgY29tcG9uZW50IGBjb25maWdgIGlzIHRoZSBzdGFuZGFyZCBmb3JtYXQgdGhlIHJlbmRlcmVyIG1hcHMgdG9cbi8vIEVDaGFydHMgb3B0aW9ucyAvIEZzTGlzdCBjb25maWcuXG5cbmltcG9ydCB7IFJlcG9ydENoYXJ0Q29sb3IgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtY29sb3IuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydERhdGFMYWJlbHMgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0YS1sYWJlbHMuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydERhdGVMYWJlbCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1kYXRlLWxhYmVsLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnRMaW5lU3R5bGUgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtbGluZS1zdHlsZS5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TWFya1N0YXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtbWFyay1zdGF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0TGlzdENvbHVtbkZvcm1hdCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1saXN0LWNvbHVtbi1mb3JtYXQuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnROdW1iZXJVbml0cyB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1udW1iZXItdW5pdHMuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRWYWx1ZUZvcm1hdCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC12YWx1ZS1mb3JtYXQuZW51bSc7XG5cbi8vIExheW91dCBtb2RlczogRnJlZWZvcm0gPSBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgY29tcG9uZW50cyAoZHJhZyBhbnl3aGVyZSk7XG4vLyBGbG93ID0gY29tcG9uZW50cyBmbG93IGxpa2Ugcm93cywgZWFjaCB0YWtpbmcgZmxvd1dpZHRoICUgb2YgdGhlIHBhZ2Ugd2lkdGguXG5leHBvcnQgdHlwZSBSZXBvcnRMYXlvdXQgPSAnZnJlZWZvcm0nIHwgJ2Zsb3cnO1xuXG4vLyBBIEJDUCA0NyBsYW5ndWFnZSB0YWcgbmFtaW5nIGhvdyBudW1iZXJzIGFuZCBkYXRlcyBhcmUgd3JpdHRlbiwgZS5nLiAnZnItQ0EnLlxuLy8gVGhlIHNldCBpcyBvcGVuICh0aGUgc2VydmVyJ3MgcHJvdmlkZXIgZGVjaWRlcyB3aGljaCBpdCBvZmZlcnMpLCBzbyB0aGlzIGlzIGFcbi8vIG5hbWVkIGFsaWFzIHJhdGhlciB0aGFuIGEgdW5pb24uXG5leHBvcnQgdHlwZSBSZXBvcnRMb2NhbGVUYWcgPSBzdHJpbmc7XG5cbi8vIEFuIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUsIGUuZy4gJ0NBRCcuIE9wZW4gZm9yIHRoZSBzYW1lIHJlYXNvbi5cbmV4cG9ydCB0eXBlIFJlcG9ydEN1cnJlbmN5Q29kZSA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnQge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGxheW91dDogUmVwb3J0TGF5b3V0O1xuICAvLyBUaGUgcmVwb3J0J3Mgb3duIHN0b3JlZCBJQU5BIHpvbmUgKGUuZy4gQW1lcmljYS9OZXdfWW9yaykuIG51bGwgPSB0aGVcbiAgLy8gcmVwb3J0IGZvbGxvd3MgdGhlIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCByZXBvcnRpbmcgem9uZS5cbiAgdGltZXpvbmU6IHN0cmluZyB8IG51bGw7XG4gIC8vIFRoZSB6b25lIGV2ZXJ5IGRhdGUgZmlsdGVyLCB0aW1lIGJ1Y2tldCBhbmQgZGF0ZSBjZWxsIG9mIHRoaXMgcmVwb3J0IHVzZXMuXG4gIC8vIFJlc29sdmVkIHNlcnZlci1zaWRlOyB0aGUgc2FtZSBmb3IgZXZlcnkgdmlld2VyLCBleHBvcnQgYW5kIHRoZSBhc3Npc3RhbnQuXG4gIC8vIE9wdGlvbmFsIG9ubHkgYmVjYXVzZSBvbGRlciBzZXJ2ZXJzIG9taXQgaXQ7IHJlc29sdmVSZXBvcnRUaW1lem9uZSgpIHRoZW5cbiAgLy8gZmFsbHMgYmFjayB0byB0aGUgcmVwb3J0J3Mgb3duIGB0aW1lem9uZWAsIHRoZW4gdGhlIGJyb3dzZXIncyB6b25lLiBSZXNvbHZlXG4gIC8vIHRoZSB6b25lIGZvciByZW5kZXJpbmcgdGhyb3VnaCByZXNvbHZlUmVwb3J0VGltZXpvbmUoKSAoZm9ybWF0LnRzKTsgcmVhZCB0aGVcbiAgLy8gZmllbGQgZGlyZWN0bHkgb25seSB0byBjaGVjayB3aGV0aGVyIHRoZSBzZXJ2ZXIgc2VudCBpdC5cbiAgZWZmZWN0aXZlVGltZXpvbmU/OiBzdHJpbmc7XG4gIC8vIFRoZSByZXBvcnQncyBvd24gc3RvcmVkIGxvY2FsZS4gbnVsbCA9IHRoZSByZXBvcnQgZm9sbG93cyB0aGUgZGVmYXVsdC5cbiAgbG9jYWxlPzogUmVwb3J0TG9jYWxlVGFnIHwgbnVsbDtcbiAgLy8gVGhlIGxvY2FsZSBldmVyeSBudW1iZXIgYW5kIGRhdGUgb2YgdGhpcyByZXBvcnQgaXMgd3JpdHRlbiBpbiwgcmVzb2x2ZWRcbiAgLy8gc2VydmVyLXNpZGUgKHRoZSByZXBvcnQncyBvd24sIGVsc2UgdGhlIGFwcGxpY2F0aW9uJ3MgZGVmYXVsdCwgZWxzZVxuICAvLyBlbi1VUykuIEFic2VudCBvbiBvbGRlciBzZXJ2ZXJzLCB3aG9zZSByZXBvcnRzIHRoZW4gcmVhZCBlbi1VUy4gUmVzb2x2ZSBpdFxuICAvLyBmb3IgcmVuZGVyaW5nIHRocm91Z2ggcmVzb2x2ZUZvcm1hdENvbnRleHQoKSAoZm9ybWF0LnRzKSwgbmV2ZXIgZGlyZWN0bHkuXG4gIGVmZmVjdGl2ZUxvY2FsZT86IFJlcG9ydExvY2FsZVRhZztcbiAgLy8gVGhlIHJlcG9ydCdzIG93biBzdG9yZWQgY3VycmVuY3kuIG51bGwgPSB0aGUgcmVwb3J0IGZvbGxvd3MgdGhlIGRlZmF1bHQuXG4gIGN1cnJlbmN5PzogUmVwb3J0Q3VycmVuY3lDb2RlIHwgbnVsbDtcbiAgLy8gVGhlIGN1cnJlbmN5IG1vbmV5IGFtb3VudHMgYXJlIGxhYmVsZWQgaW4sIHJlc29sdmVkIGxpa2UgZWZmZWN0aXZlTG9jYWxlXG4gIC8vIChmYWxsaW5nIGJhY2sgdG8gdGhlIGxvY2FsZSdzIG93biBjdXJyZW5jeSwgdGhlbiBVU0QpLiBBIGxhYmVsIG9ubHk6XG4gIC8vIGFtb3VudHMgYXJlIG5ldmVyIGNvbnZlcnRlZC5cbiAgZWZmZWN0aXZlQ3VycmVuY3k/OiBSZXBvcnRDdXJyZW5jeUNvZGU7XG4gIC8vIEhvdyB0aGUgc2VydmVyIHNlbmRzIGEgcGVyY2VudCBtZWFzdXJlOiAncmF0aW8nID0gYSAwLTEgcmF0aW8gKDAuMzg1IHJlYWRzXG4gIC8vIDM4LjUlKS4gQWJzZW50IG9uIG9sZGVyIHNlcnZlcnMsIHdob3NlIHBlcmNlbnQgdmFsdWVzIGFyZSBhbHJlYWR5IHgxMDBcbiAgLy8gKDM4LjUgcmVhZHMgMzguNSUpLlxuICBwZXJjZW50Rm9ybWF0PzogJ3JhdGlvJztcbiAgLy8gUmVwb3J0LWxldmVsIGNvbmZpZzogdHlwb2dyYXBoaWMgc3R5bGVzLCBldGMuIChjYW1lbENhc2UgSlNPTiBjb2x1bW4pLlxuICBjb25maWc6IFJlcG9ydENvbmZpZztcbiAgLy8gVGhlIHBhZ2UgaW4gSU5DSEVTICh0aGUgcmVwb3J0J3MgbmF0aXZlIHVuaXQg4oCUIFBERnMgYW5kIFBvd2VyUG9pbnQgYXJlXG4gIC8vIGluY2gtYmFzZWQsIHNvIGV4cG9ydHMgYXJlIGRpbWVuc2lvbmFsbHkgZXhhY3QpLiBPcmllbnRhdGlvbiBpcyBub3QgYSBmaWVsZFxuICAvLyBvZiBpdHMgb3duOiBhIHBhZ2Ugd2lkZXIgdGhhbiBpdCBpcyB0YWxsIElTIGxhbmRzY2FwZS5cbiAgcGFnZVdpZHRoOiBudW1iZXI7XG4gIHBhZ2VIZWlnaHQ6IG51bWJlcjtcbiAgcGFnZXM6IFJlcG9ydFBhZ2VbXTtcbiAgLy8gVGhlIGhlYWRlciBhbmQgZm9vdGVyOiB0aGUgcmVwb3J0J3MgbWFzdGVyIHBhZ2UsIHdob3NlIGNvbXBvbmVudHMgZHJhd1xuICAvLyB1bmRlciBldmVyeSBwYWdlIHRoYXQgZG9lcyBub3QgaGlkZSB0aGVtIChQb3dlclBvaW50J3Mgc2xpZGUgbWFzdGVyKS4gTnVsbFxuICAvLyB1bnRpbCBhbnl0aGluZyBoYXMgYmVlbiBwbGFjZWQgaW4gdGhlbS5cbiAgbWFzdGVyOiBSZXBvcnRNYXN0ZXIgfCBudWxsO1xuICBmaWx0ZXJHcm91cHM6IFJlcG9ydEZpbHRlckdyb3VwW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0TWFzdGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W107XG59XG5cbi8vIEhvdyB0aGUgb3BlbiByZXBvcnQgd3JpdGVzIGl0cyBudW1iZXJzIGFuZCBkYXRlcywgcmVzb2x2ZWQgb25jZSBwZXIgcmVwb3J0XG4vLyAocmVzb2x2ZUZvcm1hdENvbnRleHQpIGFuZCByZWFkIGJ5IHRoZSB2aWV3ZXIsIHRoZSBQREYgYW5kIFBvd2VyUG9pbnQgYWxpa2UuXG4vLyBOZXZlciB0aGUgYnJvd3NlcidzIGxvY2FsZS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Rm9ybWF0Q29udGV4dCB7XG4gIGxvY2FsZTogUmVwb3J0TG9jYWxlVGFnO1xuICBjdXJyZW5jeTogUmVwb3J0Q3VycmVuY3lDb2RlO1xuICAvLyBXaGV0aGVyIGEgcGVyY2VudCBtZWFzdXJlIGFycml2ZXMgYXMgYSAwLTEgcmF0aW8gKHRoZSByZXBvcnQnc1xuICAvLyBwZXJjZW50Rm9ybWF0KS4gQW4gb2xkZXIgc2VydmVyIHNlbmRzIGl0IGFscmVhZHkgeDEwMC5cbiAgcmF0aW9QZXJjZW50OiBib29sZWFuO1xufVxuXG4vLyBPbmUgbG9jYWxlIHRoZSBzZXJ2ZXIgb2ZmZXJzLCB3aXRoIHRoZSBjdXJyZW5jeSBhIHJlcG9ydCBpbiBpdCB1c2VzIHdoZW4gaXRcbi8vIG5hbWVzIG5vbmUgb2YgaXRzIG93bi5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0TG9jYWxlT3B0aW9uIHtcbiAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWc7XG4gIGRlZmF1bHRDdXJyZW5jeTogUmVwb3J0Q3VycmVuY3lDb2RlO1xufVxuXG4vLyBHRVQgcmVwb3J0cy9sb2NhbGVzOiB3aGF0IHRoZSByZXBvcnQgc2V0dGluZ3MnIExvY2FsZSBhbmQgQ3VycmVuY3kgc2VsZWN0c1xuLy8gb2ZmZXIuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydExvY2FsZXMge1xuICBkZWZhdWx0TG9jYWxlOiBSZXBvcnRMb2NhbGVUYWc7XG4gIG9wdGlvbnM6IFJlcG9ydExvY2FsZU9wdGlvbltdO1xuICBjdXJyZW5jaWVzOiBSZXBvcnRDdXJyZW5jeUNvZGVbXTtcbn1cblxuLy8gVGhlIGRlcHRoIG9mIHRoZSBoZWFkZXIgYmFuZCAodG9wIG9mIGV2ZXJ5IHBhZ2UpIGFuZCB0aGUgZm9vdGVyIGJhbmQgKGJvdHRvbVxuLy8gb2YgZXZlcnkgcGFnZSksIGluIElOQ0hFUy4gVGhlIGJhbmRzIGhvbGQgbm8gY29udGVudCBvZiB0aGVpciBvd24g4oCUIHRoZVxuLy8gbWFzdGVyJ3MgY29tcG9uZW50cyBzaXQgaW4gdGhlbSDigJQgdGhleSBhcmUgdGhlIHJlc2VydmVkIG1hcmdpbnMgdGhlIGVkaXRvclxuLy8gZHJhd3MgYXMgZ3VpZGVzIGFuZCBzbmFwcyB0by4gQWx3YXlzIGFycml2ZXMgcmVzb2x2ZWQgKDAgPSBubyBiYW5kKS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SGVhZGVyRm9vdGVyIHtcbiAgaGVhZGVySGVpZ2h0OiBudW1iZXI7XG4gIGZvb3RlckhlaWdodDogbnVtYmVyO1xufVxuXG4vLyBSZXBvcnQtbGV2ZWwgc3R5bGluZy4gU2l6ZXMgYXJlIGluIFBPSU5UUyAoMS83MlwiKSDigJQgdGhlIHJlcG9ydCdzIHR5cG9ncmFwaHlcbi8vIG1hcHMgMToxIHRvIFBERiAoNzJwdC9pbikgYW5kIFBvd2VyUG9pbnQgKHBvaW50IGZvbnQgc2l6ZXMpLCBzbyBhIHBvaW50XG4vLyB2YWx1ZSBpcyBkaW1lbnNpb25hbGx5IGV4YWN0IG9uIHNjcmVlbiBhbmQgaW4gZXZlcnkgZXhwb3J0LlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb25maWcge1xuICBzdHlsZXM/OiBSZXBvcnRTdHlsZXM7XG4gIC8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sLiBPcHRpb25hbCBvbiB0aGUgdHlwZSBiZWNhdXNlIGEgUmVwb3J0Q29uZmlnXG4gIC8vIGxpdGVyYWwgbmVlZCBub3QgY2FycnkgaXQ7IHRoZSBBUEkgYWx3YXlzIHNlbmRzIGl0LCByZXNvbHZlZC5cbiAgZ3JvdXBCeT86IFJlcG9ydEdyb3VwQnk7XG4gIC8vIFJlc29sdmVkIGJ5IHRoZSBBUEkgbGlrZSBncm91cEJ5LlxuICBoZWFkZXJGb290ZXI/OiBSZXBvcnRIZWFkZXJGb290ZXI7XG59XG5cbi8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sIOKAlCB0aGUgb25lIHN3aXRjaCB0aGF0IHJlLWJ1Y2tldHMgZXZlcnlcbi8vIHRpbWUtc2VyaWVzIGNoYXJ0IG9uIHRoZSByZXBvcnQgYmV0d2VlbiBkYXksIHdlZWssIG1vbnRoLCBxdWFydGVyIGFuZCB5ZWFyLlxuLy9cbi8vIEl0IGlzIE5PVCBhIGZpbHRlcjogYSBmaWx0ZXIgbmFycm93cyB3aGljaCByb3dzIGFyZSBjb3VudGVkLCB0aGlzIGNoYW5nZXMgaG93XG4vLyB0aGUgc3Vydml2aW5nIHJvd3MgYXJlIGJ1Y2tldGVkLiBJdCBzaGFyZXMgdGhlIHJlcG9ydCdzIGZpbHRlciBiYXIgYmVjYXVzZVxuLy8gdGhhdCBpcyB0aGUgb25lIHJvdyBvZiBjb250cm9scyBhIHZpZXdlciByZWFkcyBhIHJlcG9ydCB0aHJvdWdoIOKAlCB0aGVcbi8vIHNlcGFyYXRpb24gdGhhdCBtYXR0ZXJzIGlzIGluIHRoZSBtb2RlbCwgbm90IGluIHdoZXJlIHRoZSBjb250cm9sIGlzIHBhaW50ZWQuXG4vL1xuLy8gQWx3YXlzIGFycml2ZXMgUkVTT0xWRUQgKHRoZSBiYWNrZW5kIGZpbGxzIGFuIGFic2VudCBvciBwYXJ0aWFsIHN0b3JlZCBibG9ja1xuLy8gaW4gZnJvbSBpdHMgb3duIGRlZmF1bHRzKSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBkZWZhdWx0IGhlcmUg4oCUIHJlbmRlciB3aGF0XG4vLyB5b3UgYXJlIGdpdmVuLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRHcm91cEJ5IHtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgbGFiZWw6IHN0cmluZztcbiAgZ3JhbnVsYXJpdGllczogQ2hhcnRHcmFudWxhcml0eVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFN0eWxlcyB7XG4gIGhlYWRpbmc/OiB7IHNpemU/OiBudW1iZXIgfTtcbn1cblxuLy8gQ29udGVudCBwYWRkaW5nIGFyb3VuZCBhIGNvbXBvbmVudCdzIGJvZHksIGluIElOQ0hFUyAodGhlIGdlb21ldHJ5IHVuaXQpLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRQYWRkaW5nIHtcbiAgdG9wPzogbnVtYmVyO1xuICByaWdodD86IG51bWJlcjtcbiAgYm90dG9tPzogbnVtYmVyO1xuICBsZWZ0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFBhZ2Uge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICBvcmRlcjogbnVtYmVyO1xuICAvLyBUaGUgcGFnZSBvcHRzIG91dCBvZiB0aGUgcmVwb3J0J3MgaGVhZGVyIGFuZCBmb290ZXIgKGEgdGl0bGUgcGFnZSkuXG4gIG1hc3RlckhpZGRlbjogYm9vbGVhbjtcbiAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W107XG59XG5cbi8vICd0ZXh0JyBpcyBhdXRob3JlZCByaWNoIHRleHQgd2l0aCBubyBxdWVyeSBiZWhpbmQgaXQg4oCUIGl0IG5ldmVyIGZldGNoZXMgZGF0YS5cbmV4cG9ydCB0eXBlIFJlcG9ydENvbXBvbmVudFR5cGUgPSAnY2hhcnQnIHwgJ2xpc3QnIHwgJ2twaScgfCAndGV4dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q29tcG9uZW50IHtcbiAgaWQ6IG51bWJlcjtcbiAgdHlwZTogUmVwb3J0Q29tcG9uZW50VHlwZTtcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIC8vIEdlb21ldHJ5IGluIElOQ0hFUy4gRnJlZWZvcm06IGFic29sdXRlIHBvc2l0aW9uIG9uIHRoZSBwYWdlIGNhbnZhcy5cbiAgLy8gRmxvdzogb25seSBmbG93V2lkdGgvb3JkZXIgYXBwbHk7IHgveSBhcmUgcmVtZW1iZXJlZCBmb3IgYSBzd2l0Y2ggYmFjayB0b1xuICAvLyBmcmVlZm9ybS5cbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHc6IG51bWJlcjtcbiAgaDogbnVtYmVyO1xuICAvLyBIZWlnaHQgbW9kZSwgREVSSVZFRCBmcm9tIHR5cGUgc2VydmVyLXNpZGUgKG5vdCBzdG9yZWQsIHJlYWQtb25seSk6IGxpc3RzXG4gIC8vIGFuZCBLUEkgdGlsZXMgYXJlIGF1dG8gKHRoZSBib3ggc2l6ZXMgdG8gaXRzIGNvbnRlbnQsIGBoYCBpZ25vcmVkKTsgY2hhcnRzXG4gIC8vIGFyZSBhbHdheXMgZml4ZWQgKHVzZSBgaGApIHNvIHRoZXkgZml0IHRoZSBib3ggYW5kIG5ldmVyIG92ZXJmbG93LlxuICBhdXRvSGVpZ2h0OiBib29sZWFuO1xuICAvLyBGbG93IGxheW91dDogJSBvZiB0aGUgcGFnZSBjb250ZW50IHdpZHRoIHRoaXMgY29tcG9uZW50IHRha2VzLlxuICBmbG93V2lkdGg6IG51bWJlcjtcbiAgLy8gRmxvdyBsYXlvdXQgb3JkZXJpbmcuXG4gIG9yZGVyOiBudW1iZXI7XG4gIC8vIFRoZSBzdG9yZWQgU1FMIG9mIGEgbGVnYWN5IHNxbC1tb2RlIGNvbXBvbmVudC4gTlVMTCBmb3IgYSBkZXJpdmVkIG9uZSxcbiAgLy8gd2hvc2Ugc3RhdGVtZW50IGRvZXMgbm90IGV4aXN0IHVudGlsIGl0cyBkb2N1bWVudCBpcyBjb21waWxlZCDigJQgdGhlIFNRTCB0YWJcbiAgLy8gZmV0Y2hlcyB0aGF0IHNlcGFyYXRlbHkgKHNlZSBSZXBvcnRDb21wb25lbnRTcWwpLlxuICBzcWw6IHN0cmluZyB8IG51bGw7XG4gIGNvbmZpZzogQ2hhcnRDb25maWcgJiBMaXN0Q29uZmlnICYgS3BpQ29uZmlnICYgVGV4dENvbmZpZyAmIENvbXBvbmVudExheW91dENvbmZpZyAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmaWx0ZXJzOiBSZXBvcnRGaWx0ZXJbXTtcbn1cblxuLy8gV2hhdCB0aGUgU1FMIHRhYiBmZXRjaGVzOiB0aGUgc3RhdGVtZW50IGEgY29tcG9uZW50IHJ1bnMuXG4vL1xuLy8gRm9yIGEgZGVyaXZlZCBjb21wb25lbnQgYGJhc2VsaW5lYCBpcyB0cnVlIGFuZCBgc3FsYCBpcyB3aGF0IGl0cyBkb2N1bWVudFxuLy8gY29tcGlsZXMgdG8gd2l0aCBOTyB2aWV3ZXIgc3RhdGUg4oCUIG5vIGZpbHRlcnMsIHRoZSBhdXRob3JlZCBncmFpbi4gVGhlXG4vLyBudW1iZXJzIG9uIHNjcmVlbiBjb21lIGZyb20gdGhhdCBzdGF0ZW1lbnQgcGx1cyB3aGF0ZXZlciB0aGUgdmlld2VyIHBpY2tlZCxcbi8vIHNvIHRoZSB0d28gY2FuIGxlZ2l0aW1hdGVseSBkaWZmZXIgYW5kIHRoZSB0YWIgc2F5cyBzbyByYXRoZXIgdGhhbiBpbXBseWluZ1xuLy8gdGhleSBtYXRjaC5cbi8vXG4vLyBgdGltZXpvbmVgIGlzIHRoZSBJQU5BIHpvbmUgdGhlIHN0YXRlbWVudCB3YXMgY29tcGlsZWQgaW46IHRoZSByZXBvcnQnc1xuLy8gZWZmZWN0aXZlIHpvbmUuIE9wdGlvbmFsIGJlY2F1c2Ugb2xkZXIgc2VydmVycyBvbWl0IGl0OyB0aGV5IGNvbXBpbGVkIGluIFVUQy5cbi8vXG4vLyBgZXJyb3JgIGlzIG5vdCBhIGZhaWx1cmUgb2YgdGhlIHJlcXVlc3Q6IGEgZG9jdW1lbnQgdGhhdCBubyBsb25nZXIgY29tcGlsZXNcbi8vIGlzIHByZWNpc2VseSB3aGF0IHNvbWVvbmUgb3BlbnMgdGhpcyB0YWIgdG8gZGlzY292ZXIsIHNvIGl0IGFycml2ZXMgYXMgYVxuLy8gbWVzc2FnZSB0byByZW5kZXIgd2l0aCBgZXJyb3JUeXBlYCBuYW1pbmcgd2hpY2gga2luZCAoJ3N0YWxlLXF1ZXJ5JyBvclxuLy8gJ3NlbnNpdGl2ZS1jb2x1bW4nKSwgYW5kIGBzcWxgIG51bGwuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbXBvbmVudFNxbCB7XG4gIHNxbDogc3RyaW5nIHwgbnVsbDtcbiAgb3JpZ2luOiAnc3FsJyB8ICdkYnEnIHwgJ2Rlcml2ZWQnO1xuICBiYXNlbGluZTogYm9vbGVhbjtcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICBlcnJvclR5cGU6IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIEEgdGV4dCBibG9jaydzIGNvbnRlbnQ6IGFuIGh0bWwgZnJhZ21lbnQgdGhlIHNlcnZlciBoYXMgYWxyZWFkeSByZWJ1aWx0IGZyb21cbi8vIGFuIGFsbG93bGlzdCwgd2hpY2ggbWF5IGNhcnJ5IHt7cGFnZS5udW1iZXJ9fSwge3twYWdlLm5hbWV9fSBhbmRcbi8vIHt7cmVwb3J0Lm5hbWV9fSB0b2tlbnMgKHNlZSB0ZXh0LnRzKS5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dENvbmZpZyB7XG4gIGh0bWw/OiBzdHJpbmc7XG59XG5cbi8vIENyb3NzLXR5cGUgbGF5b3V0L3N0eWxlIGtleXMgY2FycmllZCBpbiBhIGNvbXBvbmVudCdzIGNvbmZpZyAoYWxvbmdzaWRlIHRoZVxuLy8gdHlwZS1zcGVjaWZpYyBjaGFydC9saXN0L2twaSBrZXlzKS5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50TGF5b3V0Q29uZmlnIHtcbiAgcGFkZGluZz86IENvbXBvbmVudFBhZGRpbmc7XG59XG5cbi8vIFRoZSBwcmVzZW50YXRpb24gc2V0dGluZ3MgYSBjb21wb25lbnQncyBzZXR0aW5ncyBkaWFsb2cgZWRpdHMuIE5laXRoZXIgZmllbGRcbi8vIGlzIHBhcnQgb2Ygd2hhdCB0aGUgY29tcG9uZW50IHF1ZXJpZXMsIHNvIGEgY2hhbmdlIHRvIHRoZW0gcmVwYWludHMgd2l0aG91dFxuLy8gcmUtcnVubmluZyBhbnl0aGluZy5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50U2V0dGluZ3Mge1xuICB0aXRsZTogc3RyaW5nO1xuICBwYWRkaW5nOiBDb21wb25lbnRQYWRkaW5nO1xufVxuXG4vLyBXaGVyZSBhIGNoYXJ0J3MgbGVnZW5kIHNpdHMgcmVsYXRpdmUgdG8gdGhlIHBsb3QsIG9yICdoaWRkZW4nIHRvIGRyb3AgaXQuXG5leHBvcnQgdHlwZSBMZWdlbmRQb3NpdGlvbiA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2hpZGRlbic7XG5cbmV4cG9ydCB0eXBlIENoYXJ0R3JhbnVsYXJpdHkgPSAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAncXVhcnRlcicgfCAneWVhcic7XG5cbi8vIEhvdyBlYWNoIGdyYW51bGFyaXR5IHJlYWRzIGluIHRoZSBncm91cC1ieSBjb250cm9sIGFuZCBvbiBhbiBleHBvcnQgY292ZXJcbi8vIHNoZWV0LiBXSElDSCBvZiB0aGVtIGEgZ2l2ZW4gcmVwb3J0IG9mZmVycyBjb21lcyBmcm9tIGl0cyBSZXBvcnRHcm91cEJ5O1xuLy8gdGhpcyBpcyBvbmx5IHRoZSBuYW1pbmcuICd5ZWFyJyByZWFkcyBhcyBcIkFubnVhbGx5XCIuXG5leHBvcnQgY29uc3QgR1JBTlVMQVJJVFlfT1BUSU9OUzogeyB2YWx1ZTogQ2hhcnRHcmFudWxhcml0eTsgbmFtZTogc3RyaW5nIH1bXSA9IFtcbiAgeyB2YWx1ZTogJ2RheScsIG5hbWU6ICdEYXknIH0sXG4gIHsgdmFsdWU6ICd3ZWVrJywgbmFtZTogJ1dlZWsnIH0sXG4gIHsgdmFsdWU6ICdtb250aCcsIG5hbWU6ICdNb250aCcgfSxcbiAgeyB2YWx1ZTogJ3F1YXJ0ZXInLCBuYW1lOiAnUXVhcnRlcicgfSxcbiAgeyB2YWx1ZTogJ3llYXInLCBuYW1lOiAnQW5udWFsbHknIH0sXG5dO1xuXG4vLyBUaGUgY2hhcnQgdHlwZXMgdGhhdCBwbG90IHNlcmllcyBhZ2FpbnN0IGEgY2F0ZWdvcnkgYW5kIGEgdmFsdWUgYXhpcywgYW5kIHNvXG4vLyB0aGUgdHlwZXMgYSBtZWFzdXJlJ3Mgb3duIHNlcmllcyBjYW4gYmUgZHJhd24gYXMuIEEgd2F0ZXJmYWxsIGhhcyB0aGUgc2FtZVxuLy8gYXhlcyBidXQgaXMgbm90IG9uZSBvZiB0aGVtOiBpdCBkcmF3cyBpdHMgb25lIG1lYXN1cmUgYXMgZmxvYXRpbmcgc3RlcHMuXG5leHBvcnQgdHlwZSBBeGlzQ2hhcnRUeXBlID0gJ2JhcicgfCAnbGluZScgfCAnYXJlYSc7XG5cbi8vIFdoYXQgb25lIGJhciBvZiBhIHdhdGVyZmFsbCBkb2VzIHRvIHRoZSBydW5uaW5nIHRvdGFsIOKAlCBlYWNoIGlzIGRyYXduIGluIGl0c1xuLy8gb3duIGNvbG9yLiBUaGUgY2xvc2luZyB0b3RhbCBpcyB0aGUgbGFzdCBiYXIsIHN0YW5kaW5nIG9uIHplcm8uXG5leHBvcnQgdHlwZSBXYXRlcmZhbGxTdGVwS2luZCA9ICdyaXNlJyB8ICdmYWxsJyB8ICd0b3RhbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRDb25maWcge1xuICAvLyBBIHdhdGVyZmFsbCB0YWtlcyBPTkUgbWVhc3VyZSB3aG9zZSB2YWx1ZSBwZXIgY2F0ZWdvcnkgaXMgaG93IGZhciB0aGVcbiAgLy8gcnVubmluZyB0b3RhbCBtb3ZlcyB0aGVyZTogZWFjaCBiYXIgc3RhcnRzIHdoZXJlIHRoZSBvbmUgYmVmb3JlIGl0IGVuZGVkLFxuICAvLyBhbmQgYSBjbG9zaW5nIFRvdGFsIGJhciBzaG93cyB0aGUgc3VtLlxuICBjaGFydFR5cGU/OiBBeGlzQ2hhcnRUeXBlIHwgJ3dhdGVyZmFsbCcgfCAncGllJyB8ICdkb251dCc7XG4gIC8vIEZvciBraW5kICd0aW1lJywgdGhlIHNlcnZlciBidWNrZXRzIHRoZSByYXcgZGF0ZXRpbWUgY29sdW1uIHRvIGBncmFudWxhcml0eWBcbiAgLy8gaW4gdGhlIHJlcG9ydCdzIHRpbWV6b25lICh0aGUgU1FMIGV4cG9zZXMgdGhlIHJhdyBjb2x1bW4sIHVuYnVja2V0ZWQpLlxuICAvLyBkYXRlTGFiZWwgd3JpdGVzIGEgdGltZSBheGlzJ3MgcGVyaW9kIGxhYmVscyBzaG9ydCAoJ01heScsIHRoZSBkZWZhdWx0KSxcbiAgLy8gbG9uZyAoJ01heSAyMDI2Jykgb3IgbnVtZXJpYyAoJzIwMjYtMDUnKTsgYSBjYXRlZ29yeSBheGlzIGlnbm9yZXMgaXQuXG4gIHhBeGlzPzoge1xuICAgIGNvbHVtbjogc3RyaW5nO1xuICAgIGtpbmQ/OiAnY2F0ZWdvcnknIHwgJ3RpbWUnO1xuICAgIGdyYW51bGFyaXR5PzogQ2hhcnRHcmFudWxhcml0eTtcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBkYXRlTGFiZWw/OiBSZXBvcnRDaGFydERhdGVMYWJlbDtcbiAgfTtcbiAgbWVhc3VyZXM/OiBDaGFydE1lYXN1cmVbXTtcbiAgLy8gRWFjaCB2YWx1ZSBvZiB0aGlzIGNvbHVtbiBiZWNvbWVzIGl0cyBvd24gc2VyaWVzLiBJdCBjYXJyaWVzIG5vIGxhYmVsOiB0aGVcbiAgLy8gbGVnZW5kIG5hbWVzIHRoZSB2YWx1ZXMgdGhlbXNlbHZlcy5cbiAgc3BsaXRCeT86IHsgY29sdW1uOiBzdHJpbmcgfTtcbiAgLy8gU2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzIG9ubHk6IGNvbG9yIGVhY2ggYmFyIGJ5IGl0cyBvd24gY2F0ZWdvcnkgYW5kXG4gIC8vIHNob3cgYSBsZWdlbmQsIFdJVEhPVVQgc3BsaXR0aW5nIGludG8gbXVsdGlwbGUgc2VyaWVzICh3aGljaCBzbGl2ZXJzIHRoZVxuICAvLyBiYXJzKS4gdjEgZXhwZWN0cyBjb2xvckJ5LmNvbHVtbiA9PT0geEF4aXMuY29sdW1uLiBJZ25vcmVkIHdoZW4gc3BsaXRCeSBpc1xuICAvLyBzZXQgb3IgdGhlIGNoYXJ0IGlzbid0IGEgYmFyIGNoYXJ0LlxuICBjb2xvckJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgb3JpZW50YXRpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnO1xuICBzdGFja2VkPzogYm9vbGVhbjtcbiAgLy8gU3RhY2tzIHRoZSBwcmltYXJ5IGF4aXMncyBiYXIgYW5kIGFyZWEgc2VyaWVzIGFzIHNoYXJlcyBvZiBlYWNoXG4gIC8vIGNhdGVnb3J5J3MgdG90YWwsIHNvIGV2ZXJ5IHN0YWNrIHJlYWNoZXMgMTAwJS4gVGhlIHZpZXdlciBjb21wdXRlcyB0aGVcbiAgLy8gc2hhcmVzIGZyb20gdGhlIHJvd3MgaXQgcmVjZWl2ZXMsIGFmdGVyIHRoZSBmaWx0ZXJzIHJhbjsgdGhlIHJvd3MgYW5kIHRoZVxuICAvLyBDU1Yga2VlcCB0aGUgcmF3IHZhbHVlcy4gVGhlIHZhbHVlIGF4aXMgdGhlbiBhbHdheXMgcnVucyAwIHRvIDEwMCUgKGZyb21cbiAgLy8gLTEwMCUgd2hlbiBhIHNoYXJlIGlzIG5lZ2F0aXZlKS5cbiAgcGVyY2VudFN0YWNrZWQ/OiBib29sZWFuO1xuICAvLyBWYWx1ZXMgcHJpbnRlZCBiZXNpZGUgdGhlIHBvaW50cyBvZiBhIGJhciwgbGluZSBvciBhcmVhIHNlcmllczogZXZlcnlcbiAgLy8gcG9pbnQgKGFsbCksIGVhY2ggc2VyaWVzJyBsYXRlc3QgcG9pbnQgKGxhc3QpLCBvciBldmVyeSBwb2ludCB3aG9zZSBsYWJlbFxuICAvLyBmaXRzIHdpdGhvdXQgb3ZlcmxhcHBpbmcgYW5vdGhlciAoYXV0bykuIE9taXR0ZWQgb3Igbm9uZSwgbm8gbGFiZWxzLiBBXG4gIC8vIHBpZSwgYSBkb251dCBhbmQgYSB3YXRlcmZhbGwgbmV2ZXIgcHJpbnQgdGhlbS5cbiAgZGF0YUxhYmVscz86IFJlcG9ydENoYXJ0RGF0YUxhYmVscztcbiAgLy8gVGhlIHByaW1hcnkgdmFsdWUgYXhpcydzIHRpdGxlIGFuZCByYW5nZS4gRXZlcnkgc2VyaWVzIGlzIHBsb3R0ZWQgYWdhaW5zdFxuICAvLyBpdCB1bmxlc3MgaXRzIG1lYXN1cmUgaXMgc2Vjb25kYXJ5LlxuICB2YWx1ZUF4aXM/OiBDaGFydFZhbHVlQXhpcztcbiAgLy8gVGhlIHNlY29uZCB2YWx1ZSBheGlzLCBvbiB0aGUgcmlnaHQsIHRoYXQgc2Vjb25kYXJ5IG1lYXN1cmVzIHBsb3QgYWdhaW5zdC5cbiAgc2Vjb25kYXJ5QXhpcz86IENoYXJ0VmFsdWVBeGlzO1xuICAvLyBMYWJlbGVkIGxpbmVzIGFjcm9zcyB0aGUgcGxvdCBhdCBhIGNvbnN0YW50IHZhbHVlLCBvciBiYW5kcyBiZXR3ZWVuIHR3b1xuICAvLyB2YWx1ZXMsIGF0IG1vc3QgNS4gVmVydGljYWwgYXhpcyBjaGFydHMgYW5kIHdhdGVyZmFsbHMgb25seS5cbiAgcmVmZXJlbmNlcz86IENoYXJ0UmVmZXJlbmNlW107XG4gIGxlZ2VuZD86IExlZ2VuZFBvc2l0aW9uO1xuICBzb3J0PzogUmVwb3J0U29ydDtcbiAgbGltaXQ/OiBudW1iZXI7XG59XG5cbi8vIEEgdmFsdWUgYXhpcydzIHRpdGxlIGFuZCByYW5nZS4gRWFjaCBib3VuZCBsZWZ0IG91dCBpcyBwaWNrZWQgZnJvbSB0aGUgZGF0YSxcbi8vIGFuZCB0aGUgdGljayBzdGVwIHdpdGhvdXQgYW4gaW50ZXJ2YWwuIEl0cyB0aWNrcyB0YWtlIHRoZSBudW1iZXIgZm9ybWF0IG9mXG4vLyB0aGUgbWVhc3VyZXMgcGxvdHRlZCBhZ2FpbnN0IGl0LlxuZXhwb3J0IGludGVyZmFjZSBDaGFydFZhbHVlQXhpcyB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG59XG5cbi8vIEEgcmVmZXJlbmNlIGRyYXduIGFjcm9zcyBhIGNoYXJ0J3MgcGxvdDogYSBsaW5lIGF0IGB2YWx1ZWAsIG9yIHdpdGggYHRvYCBhXG4vLyBiYW5kIGJldHdlZW4gdGhlIHR3bywgbGFiZWxlZCB3aXRoIGBsYWJlbGAuIFRoZSB2YWx1ZSBpcyBvbmUgdGhlIHVzZXIgb3Jcbi8vIHRoZSBtb2RlbCBzdGF0ZXMsIG5ldmVyIG9uZSByZWFkIG9mZiB0aGUgZGF0YS4gc2Vjb25kYXJ5IHBsb3RzIGl0IGFnYWluc3Rcbi8vIHRoZSBzZWNvbmQgdmFsdWUgYXhpcywgd2hlbiB0aGUgY2hhcnQgaGFzIG9uZS5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRSZWZlcmVuY2Uge1xuICB2YWx1ZTogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nO1xuICB0bz86IG51bWJlcjtcbiAgc2Vjb25kYXJ5PzogYm9vbGVhbjtcbn1cblxuLy8gSG93IG9uZSBudW1lcmljIHNsb3QgaXMgc2hvd246IGEgY2hhcnQgbWVhc3VyZSwgYSBLUEkgbWVhc3VyZSwgYSBsaXN0IGNvbHVtblxuLy8gb3IgYSBjcm9zcy10YWIncyBjZWxscy4gVGhlIGRhdGEgc3RheXMgcmF3IChpdCBzb3J0cyBhbmQgZXhwb3J0cyBhcyBhXG4vLyBudW1iZXIpOyBvbmx5IHRoZSByZW5kZXJlcnMgZm9ybWF0IGl0LCB0aGUgc2FtZSB3YXkgb24gc2NyZWVuLCBpbiB0aGUgUERGXG4vLyBhbmQgaW4gUG93ZXJQb2ludCAoZm9ybWF0LnRzKS4gQWxsIHRocmVlIGtleXMgYXJlIG9wdGlvbmFsLCBhbmQgcHJlY2lzaW9uIG9yXG4vLyB1bml0cyB3aXRob3V0IGEgZm9ybWF0IG1lYW4gbnVtYmVyLlxuLy9cbi8vIEZvcm1hdHRpbmcgaXMgb3B0LWluOiBhIGxpc3QgY29sdW1uIG9yIGNyb3NzLXRhYiBjZWxsIHdpdGhvdXQgdGhlc2Uga2V5c1xuLy8gcHJpbnRzIGl0cyB2YWx1ZSBhcyBpdCBjYW1lLCBhbmQgYSBjaGFydCB3aXRob3V0IHRoZW0ga2VlcHMgaXRzIHBsYWluXG4vLyBsb2NhbGUtZ3JvdXBlZCBheGlzIGFuZCB0b29sdGlwcy4gQSBLUEkgd2l0aG91dCB0aGVtIHByaW50cyBhIHBsYWluIG51bWJlci5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtYmVyRm9ybWF0U3BlYyB7XG4gIC8vIHBlcmNlbnQgdGFrZXMgYSAwLTEgcmF0aW8gKDAuMyByZWFkcyAzMCUpIHdoZW4gdGhlIHJlcG9ydCdzIHBlcmNlbnRGb3JtYXRcbiAgLy8gaXMgJ3JhdGlvJzsgYW4gb2xkZXIgc2VydmVyIGxlYXZlcyBpdCBvdXQgYW5kIHNlbmRzIHgxMDAuIGN1cnJlbmN5IGxhYmVsc1xuICAvLyB0aGUgYW1vdW50IGluIHRoZSByZXBvcnQncyBjdXJyZW5jeSwgd3JpdHRlbiBpbiBpdHMgbG9jYWxlLlxuICBmb3JtYXQ/OiBSZXBvcnRWYWx1ZUZvcm1hdCB8IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQ7XG4gIC8vIEhvdyBtYW55IGRlY2ltYWwgcGxhY2VzIHRoZSB2YWx1ZSBpcyBzaG93biB0byAoMC02KS4gRml4ZWQgcmF0aGVyIHRoYW5cbiAgLy8gbWF4aW11bTogYSBjb2x1bW4gb2YgcmF0ZXMgaXMgdW5yZWFkYWJsZSB3aGVuIGVhY2ggb25lIHNob3dzIGEgZGlmZmVyZW50XG4gIC8vIG51bWJlciBvZiBkZWNpbWFscy4gRm9yIHBlcmNlbnQgaXQgY291bnRzIHRoZSBkZWNpbWFscyBvZiB0aGUgcGVyY2VudGFnZVxuICAvLyAocHJlY2lzaW9uIDEgc2hvd3MgMC4zIGFzIDMwLjAlKS4gT21pdHRlZCBsZWF2ZXMgdGhlIGZvcm1hdCdzIG93biBkZWZhdWx0OlxuICAvLyBhdCBtb3N0IG9uZSBkZWNpbWFsIGZvciBwZXJjZW50IChhbmQgZm9yIGFuIGFiYnJldmlhdGVkIDEuMkspLCB3aG9sZSB1bml0c1xuICAvLyBmb3IgY3VycmVuY3ksIHRoZSBsb2NhbGUncyBkZWZhdWx0IGZvciBhIG51bWJlci5cbiAgLy9cbiAgLy8gSXQgY2Fubm90IGJlIGFwcGxpZWQgaW4gdGhlIFNRTDogdGhlIHZhbHVlIGlzIGFnZ3JlZ2F0ZWQgYWZ0ZXIgdGhlIHJlcG9ydCdzXG4gIC8vIGZpbHRlcnMgcnVuLCBzbyBwcmUtcm91bmRpbmcgd291bGQgYnJlYWsgbGl2ZSByZS1maWx0ZXJpbmcuXG4gIHByZWNpc2lvbj86IG51bWJlcjtcbiAgLy8gQWJicmV2aWF0ZXMgdG8gdGhvdXNhbmRzICgxLjJLKSBvciBtaWxsaW9ucyAoMy40TSksIG9yIHBpY2tzIGJ5IHNpemUuXG4gIHVuaXRzPzogUmVwb3J0TnVtYmVyVW5pdHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRNZWFzdXJlIGV4dGVuZHMgTnVtYmVyRm9ybWF0U3BlYyB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBhZ2dyZWdhdGlvbj86ICdzdW0nIHwgJ2NvdW50JyB8ICdhdmcnIHwgJ21pbicgfCAnbWF4JztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8vIERyYXdzIHRoaXMgbWVhc3VyZSdzIHNlcmllcyBhcyBhIGRpZmZlcmVudCB0eXBlIGZyb20gdGhlIGNoYXJ0J3Mgb3duXG4gIC8vIGNoYXJ0VHlwZSDigJQgY291bnRzIGFzIGJhcnMgd2l0aCBhIHJhdGUgYXMgYSBsaW5lIG92ZXIgdGhlbSBpcyBhIGNvbWJvXG4gIC8vIGNoYXJ0LiBPbWl0dGVkLCB0aGUgc2VyaWVzIHRha2VzIHRoZSBjaGFydCdzIHR5cGUuIEF4aXMgY2hhcnRzIG9ubHkgKGEgcGllXG4gIC8vIGlnbm9yZXMgaXQpLlxuICB0eXBlPzogQXhpc0NoYXJ0VHlwZTtcbiAgLy8gQSBjaGFydCBtZWFzdXJlJ3MgZm9ybWF0IHNob3dzIG9uIGl0cyB0b29sdGlwcywgYW5kIG9uIHRoZSB2YWx1ZSBheGlzXG4gIC8vIHdoZW4gZXZlcnkgbWVhc3VyZSBzaGFyaW5nIHRoZSBheGlzIGFncmVlcyBvbiBpdC4gQSBLUEkncyBtZWFzdXJlIGZvcm1hdHNcbiAgLy8gaXRzIG9uZSB2YWx1ZS5cbiAgZm9ybWF0PzogUmVwb3J0VmFsdWVGb3JtYXQ7XG4gIC8vIFBsb3RzIHRoaXMgbWVhc3VyZSBhZ2FpbnN0IHRoZSBzZWNvbmQgdmFsdWUgYXhpcywgb24gdGhlIHJpZ2h0LCBmb3IgYVxuICAvLyBxdWFudGl0eSBvbiBhbm90aGVyIHNjYWxlLiBPbWl0dGVkIG9yIGZhbHNlLCBpdCBzaGFyZXMgdGhlIHByaW1hcnkgYXhpcy5cbiAgLy8gQSB2ZXJ0aWNhbCBheGlzIGNoYXJ0IG9ubHksIHdpdGggYXQgbGVhc3Qgb25lIG1lYXN1cmUgbGVmdCBvbiB0aGUgcHJpbWFyeVxuICAvLyBheGlzLlxuICBzZWNvbmRhcnk/OiBib29sZWFuO1xuICAvLyBUaGUgcGFsZXR0ZSBjb2xvciB0aGlzIG1lYXN1cmUncyBzZXJpZXMgaXMgZHJhd24gaW4uIE9taXR0ZWQsIHRoZSBzZXJpZXNcbiAgLy8gdGFrZXMgdGhlIHBhbGV0dGUgY29sb3Igb2YgaXRzIHBvc2l0aW9uLiBBIGNvbG9yIG9uIHRoZSBmaXJzdCBtZWFzdXJlXG4gIC8vIHR1cm5zIG9mZiBhIGNhdGVnb3J5IGJhciBjaGFydCdzIGRlZmF1bHQgY29sb3IgcGVyIGJhciAoaXNDb2xvckJ5KS5cbiAgY29sb3I/OiBSZXBvcnRDaGFydENvbG9yO1xuICAvLyBIb3cgYSBsaW5lIHNlcmllcycgbGluZSBpcyBkcmF3bi4gT21pdHRlZCwgc29saWQuXG4gIGxpbmU/OiBSZXBvcnRDaGFydExpbmVTdHlsZTtcbiAgLy8gV2hldGhlciBhIGxpbmUgb3IgYXJlYSBzZXJpZXMgZHJhd3MgYSBkb3Qgb24gZWFjaCBwb2ludC4gT21pdHRlZCwgdHJ1ZS5cbiAgbWFya2Vycz86IGJvb2xlYW47XG4gIC8vIEEgbGluZSBhY3Jvc3MgdGhlIHBsb3QgYXQgdGhpcyBzZXJpZXMnIGF2ZXJhZ2UsIG1lZGlhbiwgbG93ZXN0IG9yIGhpZ2hlc3RcbiAgLy8gdmFsdWUgb3ZlciB0aGUgcG9pbnRzIG9uIHNjcmVlbi4gVmVydGljYWwgYXhpcyBjaGFydHMgb25seS5cbiAgbWFya0xpbmU/OiBSZXBvcnRDaGFydE1hcmtTdGF0O1xufVxuXG4vLyBPbmUgYXV0aG9yZWQgY29sdW1uIG9mIGEgcGxhaW4gbGlzdC5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdENvbHVtbiBleHRlbmRzIE51bWJlckZvcm1hdFNwZWMge1xuICBjb2x1bW46IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8vIGRhdGUga2VlcHMgdGhlIGNvbHVtbiBhIFJBVyB0aW1lc3RhbXAsIHNvIHRoZSByZXBvcnQgdGltZXpvbmUgYW5kIGl0c1xuICAvLyBkYXRlUmFuZ2UgZmlsdGVycyBrZWVwIHdvcmtpbmcsIGFuZCB0aGUgdmlld2VyIHJlbmRlcnMgaXQgYXMgYSBkYXkgaW4gdGhlXG4gIC8vIHJlcG9ydCdzIHpvbmUgYW5kIGxvY2FsZS4gbnVtYmVyLCBwZXJjZW50IGFuZCBjdXJyZW5jeSBmb3JtYXQgdGhlIHZhbHVlIGFzXG4gIC8vIGEgS1BJIG1lYXN1cmUgZG9lcy4gV2l0aG91dCBhIGZvcm1hdCB0aGUgdmFsdWUgcHJpbnRzIGFzIGl0IGNhbWUuXG4gIGZvcm1hdD86IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQ7XG4gIC8vIEEgY29sdW1uIHRoZSBTUUwgYWxyZWFkeSBmb3JtYXR0ZWQgaXMgdGV4dCwgc28gaXQgbmFtZXMgYHNvcnRDb2x1bW5gOiB0aGVcbiAgLy8gcmF3IG51bWVyaWMgYWxpYXMgdGhlIHF1ZXJ5IGFsc28gb3V0cHV0cywgd2hpY2ggdGhlIHNlcnZlciBvcmRlcnMgYnlcbiAgLy8gaW5zdGVhZC5cbiAgc29ydENvbHVtbj86IHN0cmluZztcbiAgLy8gZmFsc2Uga2VlcHMgdGhlIGNlbGwgb24gb25lIGxpbmUuIE9taXR0ZWQsIGEgbG9uZyB2YWx1ZSB3cmFwcy5cbiAgd3JhcD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdENvbmZpZyB7XG4gIGNvbHVtbnM/OiBMaXN0Q29sdW1uW107XG4gIC8vIEEgY3Jvc3MtdGFiOiBgcm93QnlgIHN0YXlzIGRvd24gdGhlIHNpZGUgYW5kIGV2ZXJ5IHZhbHVlIG9mIGBwaXZvdEJ5YFxuICAvLyBiZWNvbWVzIGEgY29sdW1uLiBUaGUgdHdvIGFyZSBzZXQgdG9nZXRoZXIsIGBjb2x1bW5zYCBpcyBvbWl0dGVkICh0aGVcbiAgLy8gYmFja2VuZCByZWplY3RzIGF1dGhvcmluZyBib3RoKSwgYW5kIHRoZSBjb2x1bW4gc2V0IGFycml2ZXMgd2l0aCB0aGUgcm93c1xuICAvLyBpbiBDb21wb25lbnREYXRhLmNvbHVtbnMgYmVjYXVzZSBvbmx5IHRoZSByZXN1bHQga25vd3MgdGhlIHBpdm90IHZhbHVlcy5cbiAgLy8gcm93QnkubGFiZWwgaGVhZHMgdGhlIHNpZGUgY29sdW1uIG9uIHNjcmVlbiBhbmQgaW4gZXZlcnkgZXhwb3J0LCBhbmRcbiAgLy8gZGVmYXVsdHMgdG8gdGhlIGNvbHVtbiBuYW1lLiBwaXZvdEJ5IGNhcnJpZXMgbm8gbGFiZWw6IGl0cyB2YWx1ZXMgYXJlIHRoZVxuICAvLyBoZWFkaW5ncy5cbiAgcm93Qnk/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9O1xuICBwaXZvdEJ5PzogeyBjb2x1bW46IHN0cmluZyB9O1xuICAvLyBUaGUgYXV0aG9yZWQgb3JkZXIsIG1vc3QgaW1wb3J0YW50IGZpcnN0LiBBIGxpc3Qgc2F2ZWQgYmVmb3JlIG11bHRpLWtleVxuICAvLyBzb3J0aW5nIHN0b3JlcyBvbmUgb2JqZWN0LCBzbyByZWFkIGl0IHRocm91Z2ggbGlzdFNvcnRUZXJtcygpIG9ubHkuXG4gIHNvcnQ/OiBSZXBvcnRTb3J0IHwgUmVwb3J0U29ydFtdO1xuICAvLyBIb3cgbWFueSBsZWFkaW5nIGNvbHVtbnMgc3RheSBpbiB2aWV3IHdoaWxlIHRoZSBsaXN0IHNjcm9sbHMgc2lkZXdheXNcbiAgLy8gKDAtMykuIFVuc2V0LCBhIGNyb3NzLXRhYiBwaW5zIGl0cyByb3cta2V5IGNvbHVtbiBhbmQgYSBwbGFpbiBsaXN0IG5vbmUuXG4gIHBpbm5lZENvbHVtbnM/OiBudW1iZXIgfCBudWxsO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgLy8gdHJ1ZSBhZGRzIGEgdG90YWxzIHJvdyB1bmRlciB0aGUgbGlzdDogdGhlIHNlcnZlciBydW5zIHRoZSBtZWFzdXJlcyBhZ2FpblxuICAvLyBvdmVyIGV2ZXJ5IHJvdyB0aGUgZmlsdGVycyBrZWVwLCB3aXRob3V0IGdyb3VwaW5nLCBhbmQgYSBjcm9zcy10YWIgdG90YWxzXG4gIC8vIGVhY2ggY29sdW1uLlxuICB0b3RhbHM/OiBib29sZWFuO1xuICAvLyBBIGNyb3NzLXRhYiBvbmx5OiBob3cgZXZlcnkgY2VsbCBvZiB0aGUgZ3JpZCBpcyBmb3JtYXR0ZWQsIHdpdGggYSBLUElcbiAgLy8gbWVhc3VyZSdzIGtleXMuIFRoZSByb3cga2V5IGNvbHVtbiBzdGF5cyBhcyBpdCBjYW1lLlxuICBjZWxsRm9ybWF0PzogTnVtYmVyRm9ybWF0U3BlYyAmIHsgZm9ybWF0PzogUmVwb3J0VmFsdWVGb3JtYXQgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLcGlDb25maWcge1xuICBtZWFzdXJlPzogQ2hhcnRNZWFzdXJlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFNvcnQge1xuICBjb2x1bW46IHN0cmluZztcbiAgZGlyZWN0aW9uPzogJ2FzYycgfCAnZGVzYyc7XG59XG5cbmV4cG9ydCB0eXBlIFJlcG9ydEZpbHRlclR5cGUgPSAnZGF0ZVJhbmdlJyB8ICdzZWxlY3QnIHwgJ2tleXdvcmQnO1xuXG4vLyBXaGVyZSBhIGZpbHRlciBncm91cCdzIGNvbnRyb2wgaXMgZXhwb3NlZC4gQSBncm91cCBjYW4gYmUgc2hvd24gb24gaXRzXG4vLyBjb21wb25lbnRzLCBpbiB0aGUgcmVwb3J0IGJhciwgb3IgQk9USCBhdCBvbmNlICh0aGUgdHdvIGFyZSBpbmRlcGVuZGVudFxuLy8gdG9nZ2xlcyBpbiB0aGUgVUkpOyBhIGNvbHVtbiB3aXRoIG5laXRoZXIgZXhwb3NlZCBzaW1wbHkgaGFzIG5vIGZpbHRlci5cbmV4cG9ydCB0eXBlIFJlcG9ydEZpbHRlckxldmVsID0gJ2NvbXBvbmVudCcgfCAncmVwb3J0JyB8ICdib3RoJztcblxuLy8gT25lIGZpbHRlcmFibGUgb3V0cHV0IGNvbHVtbiBvZiBhIGNvbXBvbmVudCdzIFNRTCwgd2l0aCB0aGUgZmlsdGVyIGludGVyZmFjZVxuLy8gSU5GRVJSRUQgZnJvbSBpdHMgZGF0YSAodGhlIGh1bWFuIG5ldmVyIHBpY2tzIHRoZSBpbnRlcmZhY2Ug4oCUIGl0IGZvbGxvd3MgdGhlXG4vLyBjb2x1bW4ncyB0eXBlKS4gRHJpdmVzIHRoZSBGaWx0ZXJzIHRhYiBsaXN0aW5nLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJhYmxlQ29sdW1uIHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIHR5cGU6IFJlcG9ydEZpbHRlclR5cGU7XG59XG5cbi8vIEdyb3VuZCB0cnV0aDogb25lIGZpbHRlcmFibGUgb3V0cHV0IGNvbHVtbiBPTiBvbmUgY29tcG9uZW50J3MgU1FMLiBBbHdheXMgYVxuLy8gbWVtYmVyIG9mIGEgZmlsdGVyIGdyb3VwIOKAlCB0aGUgdW5pdCB0aGF0IGxpbmtzIGVxdWl2YWxlbnQgZmlsdGVycyBhY3Jvc3Ncbi8vIGNvbXBvbmVudHMgYW5kIGRlY2lkZXMgd2hlcmUgdGhlIGNvbnRyb2wgcmVuZGVycyAoY29tcG9uZW50IHZzIHJlcG9ydCBiYXIpLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXIge1xuICBpZDogbnVtYmVyO1xuICBjb21wb25lbnRJZDogbnVtYmVyO1xuICBmaWx0ZXJHcm91cElkOiBudW1iZXI7XG4gIGZpbHRlckNvbHVtbjogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgaGFzT3B0aW9uczogYm9vbGVhbjtcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gT25lIGNob2ljZSBpbiBhIHNlbGVjdCBmaWx0ZXIncyBvcHRpb24gbGlzdC4gVGhlIHZhbHVlIGlzIHdoYXQgdGhlIGZpbHRlclxuLy8gbWF0Y2hlcyBvbiBhbmQgZ2V0cyBzdG9yZWQgaW4gYSBzYXZlZCBkZWZhdWx0IOKAlCBmb3IgYW4gZW50aXR5IHRoYXQgaXMgaXRzXG4vLyBzdGFibGUgaWQsIG5ldmVyIGl0cyBuYW1lLCBzbyByZW5hbWluZyB0aGUgZW50aXR5IG1vdmVzIHRoZSBsYWJlbCB3aXRob3V0XG4vLyBicmVha2luZyB0aGUgZGVmYXVsdC4gVGhlIGxhYmVsIGlzIG9ubHkgZXZlciB3aGF0IHRoZSB2aWV3ZXIgcmVhZHMuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlck9wdGlvbiB7XG4gIHZhbHVlOiB1bmtub3duO1xuICBsYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlckdyb3VwIHtcbiAgaWQ6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIHR5cGU6IFJlcG9ydEZpbHRlclR5cGU7XG4gIGxldmVsOiBSZXBvcnRGaWx0ZXJMZXZlbDtcbiAgb3JkZXI6IG51bWJlcjtcbiAgY29uZmlnOiB7IGRlZmF1bHQ/OiBGaWx0ZXJHcm91cERlZmF1bHQgfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmaWx0ZXJzOiBSZXBvcnRGaWx0ZXJbXTtcbn1cblxuLy8gQSBmaWx0ZXIgZ3JvdXAncyBhdXRob3JlZCBkZWZhdWx0IOKAlCB0aGUgdmFsdWUgdGhhdCBzZWVkcyB0aGUgcmVwb3J0IGJhciBvblxuLy8gZXZlcnkgb3Blbi4gU2hhcGUgZm9sbG93cyB0aGUgZ3JvdXAncyB0eXBlOiBkYXRlUmFuZ2UgdXNlcyBzdGFydC9lbmQgKGEgZml4ZWRcbi8vIGNhbGVuZGFyLWRheSByYW5nZSkgb3IgYSByZWxhdGl2ZSBwcmVzZXQ7IHNlbGVjdCB1c2VzIHZhbHVlczsga2V5d29yZCB1c2VzXG4vLyB2YWx1ZS5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyR3JvdXBEZWZhdWx0IHtcbiAgLy8gZGF0ZVJhbmdlIHJlbGF0aXZlIHByZXNldCwgcmVzb2x2ZWQgb24gZXZlcnkgb3BlbiBhZ2FpbnN0IHRvZGF5IGluIHRoZVxuICAvLyByZXBvcnQncyBlZmZlY3RpdmUgem9uZSAoUmVwb3J0LmVmZmVjdGl2ZVRpbWV6b25lKS4gT25lIG9mOiB0aGlzV2VlayxcbiAgLy8gbGFzdFdlZWssIGxhc3Q3RGF5cywgbGFzdDMwRGF5cywgbGFzdDNNb250aHMsIGxhc3Q2TW9udGhzLCBsYXN0MTJNb250aHMsXG4gIC8vIHRoaXNNb250aCwgdGhpc1F1YXJ0ZXIsIHRoaXNZZWFyL3llYXJUb0RhdGUuIFdlZWtzIHJ1biBNb25kYXkgdG8gU3VuZGF5LFxuICAvLyB0aGUgc2FtZSB3ZWVrcyB0aGUgc2VydmVyJ3Mgd2Vla2x5IHRpbWUgYnVja2V0cyB1c2UuXG4gIHJlbGF0aXZlPzogc3RyaW5nO1xuICBzdGFydD86IHN0cmluZzsgLy8gZGF0ZVJhbmdlIGZpeGVkIHN0YXJ0ICh5eXl5LU1NLWRkKVxuICBlbmQ/OiBzdHJpbmc7IC8vIGRhdGVSYW5nZSBmaXhlZCBlbmQgKHl5eXktTU0tZGQpXG4gIHZhbHVlcz86IHVua25vd25bXTsgLy8gc2VsZWN0IGRlZmF1bHQgcGlja2VkIHZhbHVlc1xuICB2YWx1ZT86IHN0cmluZzsgLy8ga2V5d29yZCBkZWZhdWx0IHRleHRcbn1cblxuLy8gVGhlIHNlc3Npb24gdmFsdWUgb2YgYSBmaWx0ZXIgZ3JvdXA6IHNoYXBlIGRlcGVuZHMgb24gdGhlIGdyb3VwJ3MgdHlwZS4gTm90XG4vLyBzdG9yZWQgb24gdGhlIHNlcnZlcjsgdGhlIHZpZXdlcidzIFVSTCBjYXJyaWVzIHRoZSB2YWx1ZXMgdGhhdCBkaWZmZXIgZnJvbVxuLy8gdGhlIGRlZmF1bHRzIChyZXBvcnQtdXJsLXN0YXRlLnRzKS5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyR3JvdXBWYWx1ZSB7XG4gIHN0YXJ0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7IC8vIGRhdGVSYW5nZVxuICBlbmQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDsgLy8gZGF0ZVJhbmdlXG4gIHZhbHVlcz86IHVua25vd25bXTsgLy8gc2VsZWN0XG4gIHZhbHVlPzogc3RyaW5nOyAvLyBrZXl3b3JkXG4gIC8vIGRhdGVSYW5nZSBvbmx5OiB0aGUgcmVsYXRpdmUgcHJlc2V0IG5hbWUgdGhlc2UgZGF0ZXMgd2VyZSByZXNvbHZlZCBmcm9tXG4gIC8vIChhIEZpbHRlckdyb3VwRGVmYXVsdC5yZWxhdGl2ZSBuYW1lKS4gU2V0IG9ubHkgd2hlbiB0aGUgdmFsdWUgd2FzIHNlZWRlZFxuICAvLyBmcm9tIHRoZSBncm91cCdzIHJlbGF0aXZlIGRlZmF1bHQgb3IgcmVhZCBmcm9tIGEgcHJlc2V0IG5hbWUgaW4gdGhlIFVSTCxcbiAgLy8gc28gdGhlIFVSTCBrZWVwcyB0aGUgcmFuZ2Ugcm9sbGluZyAoJ2xhc3QzMERheXMnKSBpbnN0ZWFkIG9mIGZyZWV6aW5nIHR3b1xuICAvLyBkYXRlcy4gQW55IGRhdGUgcGlja2VkIGJ5IHRoZSB2aWV3ZXIsIGEgcGlja2VyIHNob3J0Y3V0IGluY2x1ZGVkLCBpc1xuICAvLyBzdG9yZWQgd2l0aG91dCBpdC5cbiAgcHJlc2V0Pzogc3RyaW5nO1xufVxuXG4vLyBUaGUgdmlld2VyLXN0YXRlIHF1ZXJ5IHBhcmFtcyBvZiBhIHJlcG9ydCBVUkwsIGFzIHJhdyBzdHJpbmdzLCBiZWZvcmUgdGhleVxuLy8gYXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgcmVwb3J0IChyZXBvcnQtdXJsLXN0YXRlLnRzIHJlYWRSZXBvcnRVcmxQYXJhbXMpLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRVcmxQYXJhbXMge1xuICAvLyBnPGdyb3VwSWQ+IC0+IHRoZSBlbmNvZGVkIGdyb3VwIHZhbHVlICgnJyA9IHRoZSB2aWV3ZXIgY2xlYXJlZCBpdCkuXG4gIGdyb3VwczogTWFwPG51bWJlciwgc3RyaW5nPjtcbiAgLy8gczxjb21wb25lbnRJZD4gLT4gdGhlIGVuY29kZWQgbGlzdCBzb3J0ICgnLWNvbHVtbicgPSBkZXNjZW5kaW5nKS5cbiAgbGlzdFNvcnRzOiBNYXA8bnVtYmVyLCBzdHJpbmc+O1xuICAvLyBxPGNvbXBvbmVudElkPiAtPiBhIGxpc3QncyBzZWFyY2ggYm94IHRleHQsIGFzIHR5cGVkLlxuICBsaXN0U2VhcmNoZXM6IE1hcDxudW1iZXIsIHN0cmluZz47XG4gIC8vIGg8Y29tcG9uZW50SWQ+IC0+IHRoZSBjb2x1bW5zIGEgdmlld2VyIGhpZCBvbiBhIGxpc3QsIHN0aWxsIGVuY29kZWRcbiAgLy8gKGRlY29kZUNvbHVtbkxpc3QpLlxuICBsaXN0SGlkZGVuOiBNYXA8bnVtYmVyLCBzdHJpbmc+O1xuICAvLyBUaGUgZ3JvdXAtYnkgZ3JhaW4sIG9yIG51bGwgd2hlbiB0aGUgVVJMIGhhcyBub25lLlxuICBncm91cEJ5OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBUaGUgdmlld2VyIHN0YXRlIHRoZSBVUkwgc2hvdWxkIGNhcnJ5OiBvbmx5IHdoYXQgZGlmZmVycyBmcm9tIHRoZSByZXBvcnQnc1xuLy8gYXV0aG9yZWQgZGVmYXVsdHMgKFJlcG9ydEZpbHRlclN0YXRlU2VydmljZS51cmxTbmFwc2hvdCkuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFVybFNuYXBzaG90IHtcbiAgLy8gQSBncm91cCdzIHZhbHVlLCBvciBudWxsIHdoZW4gdGhlIHZpZXdlciBjbGVhcmVkIGEgZ3JvdXAgdGhhdCBoYXMgYSBkZWZhdWx0LlxuICBncm91cHM6IE1hcDxudW1iZXIsIEZpbHRlckdyb3VwVmFsdWUgfCBudWxsPjtcbiAgLy8gQSBsaXN0J3Mgc29ydCwgYnkgY29tcG9uZW50IGlkLCB3aGVuIGl0IGRpZmZlcnMgZnJvbSB0aGUgYXV0aG9yZWQgc29ydCdzXG4gIC8vIGZpcnN0IHRlcm0uXG4gIGxpc3RTb3J0czogTWFwPG51bWJlciwgUmVwb3J0U29ydD47XG4gIC8vIEEgbGlzdCdzIHNlYXJjaCBib3ggdGV4dCwgYnkgY29tcG9uZW50IGlkLiBBIGxpc3Qgd2l0aCBhbiBlbXB0eSBib3ggaXNcbiAgLy8gbGVmdCBvdXQuXG4gIGxpc3RTZWFyY2hlczogTWFwPG51bWJlciwgc3RyaW5nPjtcbiAgLy8gVGhlIGNvbmZpZyBjb2x1bW4gbmFtZXMgYSB2aWV3ZXIgaGlkIG9uIGEgcGxhaW4gbGlzdCwgYnkgY29tcG9uZW50IGlkLiBBXG4gIC8vIGxpc3Qgc2hvd2luZyBldmVyeSBjb2x1bW4gaXMgbGVmdCBvdXQuXG4gIGxpc3RIaWRkZW46IE1hcDxudW1iZXIsIHN0cmluZ1tdPjtcbiAgZnJlcXVlbmN5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbn1cblxuLy8gT25lIHJlc29sdmVkIGZpbHRlciBzZW50IHdpdGggYSBjb21wb25lbnQncyBkYXRhIHJlcXVlc3QuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkRmlsdGVyVmFsdWUge1xuICBmaWx0ZXJJZDogbnVtYmVyO1xuICBzdGFydD86IHN0cmluZztcbiAgZW5kPzogc3RyaW5nO1xuICB2YWx1ZXM/OiB1bmtub3duW107XG4gIHZhbHVlPzogc3RyaW5nO1xufVxuXG4vLyBQZXItY29tcG9uZW50IGludGVyYWN0aW9uIHN0YXRlIHNlbnQgd2l0aCB0aGUgZGF0YSByZXF1ZXN0OiBsaXN0cyBzZW5kXG4vLyBzb3J0L3BhZ2luZyBhbmQgdGhlIHRleHQgaW4gdGhlaXIgc2VhcmNoIGJveDsgdGltZS1zZXJpZXMgY2hhcnRzIHNlbmQgdGhlXG4vLyBncmFpbiBwaWNrZWQgb24gdGhlIHJlcG9ydCdzIGdyb3VwLWJ5IGNvbnRyb2wsIHdoaWNoIG92ZXJyaWRlcyB0aGUgYXV0aG9yZWRcbi8vIGdyYW51bGFyaXR5IGZvciB0aGF0IHJlcXVlc3Qgb25seS4gVGhlIHdpcmUga2V5IHN0YXlzIGBmcmVxdWVuY3lgIOKAlCBpdCBpcyB0aGVcbi8vIGJ1Y2tldGluZyBmcmVxdWVuY3kgdGhlIHNlcnZlciBhcHBsaWVzLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREYXRhU3RhdGUge1xuICBzb3J0PzogUmVwb3J0U29ydDtcbiAgcGFnZT86IG51bWJlcjtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIGZyZXF1ZW5jeT86IENoYXJ0R3JhbnVsYXJpdHk7XG4gIC8vIEEgbGlzdCdzIHNlYXJjaCBib3ggdGV4dC4gVGhlIHNlcnZlciB0cmltcyBpdCwgY3V0cyBpdCB0byBpdHMgb3duIG1heGltdW1cbiAgLy8gbGVuZ3RoIGFuZCBtYXRjaGVzIGl0IGFnYWluc3QgZXZlcnkgdGV4dCBjb2x1bW4gdGhlIGxpc3Qgc2hvd3MuXG4gIHNlYXJjaD86IHN0cmluZztcbiAgLy8gVGhlIGNvbmZpZyBjb2x1bW4gbmFtZXMgYSB2aWV3ZXIgaGlkIG9uIGEgcGxhaW4gbGlzdC4gU2VudCB3aXRoIGEgQ1NWXG4gIC8vIGV4cG9ydCBvbmx5ICh0aGUgc2NyZWVuIGhpZGVzIHRoZW0gaXRzZWxmKTogdGhlIGZpbGUgbGVhdmVzIHRoZW0gb3V0LiBUaGVcbiAgLy8gc2VydmVyIGlnbm9yZXMgaXQgb24gYSBjcm9zcy10YWIsIGFuZCB3aGVuIGl0IHdvdWxkIGhpZGUgZXZlcnkgY29sdW1uLlxuICBoaWRkZW5Db2x1bW5zPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGF0YSB7XG4gIGNvbHVtbnM6IHN0cmluZ1tdO1xuICByb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICBwYWdpbmc/OiB7IHRvdGFsOiBudW1iZXI7IHBhZ2U6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9O1xuICB0cnVuY2F0ZWQ6IGJvb2xlYW47XG4gIC8vIFRoZSBlZmZlY3RpdmUgdGltZSBidWNrZXQgdGhlIHJvd3Mgd2VyZSBncm91cGVkIGludG8gKGFmdGVyIGFueSBncm91cC1ieVxuICAvLyBvdmVycmlkZSksIG9yIG51bGwgZm9yIGEgbm9uLXRpbWUgYXhpcy4gRHJpdmVzIHRoZSBjb21wYWN0IHgtYXhpcyBsYWJlbHMuXG4gIGdyYW51bGFyaXR5PzogQ2hhcnRHcmFudWxhcml0eSB8IG51bGw7XG4gIC8vIFBhZ2UgMSBvZiBhIHNlYXJjaGVkIGxpc3Qgd2hvc2Ugc2VhcmNoIGNvdWxkIG5vdCBhcHBseSAodGhlIGxpc3QgaGFzIG5vXG4gIC8vIHRleHQgY29sdW1uIHRvIHNlYXJjaCk6IHdoeSB0aGUgcm93cyBhcmUgbm90IG5hcnJvd2VkLiBBYnNlbnQgb3RoZXJ3aXNlLlxuICBzZWFyY2hOb3RlPzogc3RyaW5nIHwgbnVsbDtcbiAgLy8gUGFnZSAxIG9mIGEgbGlzdCB3aXRoIGNvbmZpZy50b3RhbHMgb246IGl0cyB0b3RhbHMgcm93LCBhcyByYXcgdmFsdWVzXG4gIC8vIGtleWVkIGxpa2UgdGhlIGNvbHVtbnMgKGEgcGxhaW4gbGlzdCdzIG1lYXN1cmUgYWxpYXNlczsgYSBjcm9zcy10YWInc1xuICAvLyBwaXZvdCBjZWxsIGNvbHVtbnMsIHRoZSByb3cta2V5IGNvbHVtbiBhYnNlbnQpLCBvciBudWxsIHdpdGggdG90YWxzTm90ZVxuICAvLyBzYXlpbmcgd2h5IHRoZXJlIGlzIG5vbmUuIEFic2VudCBvbiBldmVyeSBvdGhlciBwYWdlIGFuZCBsaXN0LlxuICB0b3RhbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw7XG4gIHRvdGFsc05vdGU/OiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBBIGNvbXBvbmVudCdzIENTViBleHBvcnQ6IHRoZSBwcmVzaWduZWQgZG93bmxvYWQgVVJMLCBwbHVzIG9uZSBzZW50ZW5jZSBwZXJcbi8vIHdheSB0aGUgZmlsZSBmYWxscyBzaG9ydCBvZiB0aGUgZnVsbCByZXN1bHQgKGN1dCBhdCB0aGUgZXhwb3J0IGNlaWxpbmcsIG9yXG4vLyBjdXQgYXMgdGhlIGNoYXJ0IGl0c2VsZiBpcykuIEVtcHR5IHdoZW4gdGhlIGZpbGUgaXMgY29tcGxldGUuIE9wdGlvbmFsXG4vLyBiZWNhdXNlIGEgc2VydmVyIG9uIGFuIG9sZGVyIGZyYW1ld29yayBhbnN3ZXJzIHdpdGggdGhlIHVybCBhbG9uZS5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RXhwb3J0UmVzcG9uc2Uge1xuICB1cmw6IHN0cmluZztcbiAgbm90ZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRMaXN0SXRlbSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgbW9kaWZ5RGF0ZTogc3RyaW5nO1xuICBzdGF0ZT86IFJlcG9ydFN0YXRlO1xuICAvLyBUaGUgZm9sZGVyIHRoZSByZXBvcnQgaXMgZmlsZWQgdW5kZXIuIG51bGwgaXMgYSByZWFsLCBjb21tb24gdmFsdWUg4oCUIHRoZVxuICAvLyByZXBvcnQgc2l0cyBhdCB0aGUgcm9vdCBvZiB0aGUgbGlzdGluZyB0cmVlIGFsb25nc2lkZSB0aGUgZm9sZGVycy5cbiAgLy9cbiAgLy8gT3B0aW9uYWwgbGlrZSBgc3RhdGVgIGJlc2lkZSBpdDogdGhlIGJhY2tlbmQgYWx3YXlzIHNlbmRzIGl0LCBidXQgbWFraW5nIGl0XG4gIC8vIHJlcXVpcmVkIGlzIGEgYnJlYWtpbmcgdHlwZSBjaGFuZ2UgZm9yIGV2ZXJ5IGNvbnN1bWVyIGhvbGRpbmcgYVxuICAvLyBSZXBvcnRMaXN0SXRlbSBsaXRlcmFsIChmaXh0dXJlcywgbW9ja3MpIGFuZCBidXlzIG5vdGhpbmcg4oCUIHRoZSBsaXN0aW5nXG4gIC8vIHJlYWRzIGl0IGFzIGA/PyBudWxsYCBlaXRoZXIgd2F5LlxuICByZXBvcnRGb2xkZXJJZD86IG51bWJlciB8IG51bGw7XG59XG5cbi8vIE9uZSBmb2xkZXIgaW4gdGhlIGxpc3RpbmcgdHJlZSDigJQgYW4gYXVkaWVuY2UgYnVja2V0IChcIk1hbmFnZW1lbnRcIixcbi8vIFwiT3BlcmF0aW9uc1wiKSByZXBvcnRzIGFyZSBmaWxlZCBpbnRvLiBGb2xkZXJzIG5lc3QgdmlhIHBhcmVudFJlcG9ydEZvbGRlcklkO1xuLy8gcmVwb3J0cyBuZXZlciBkbywgc28gdGhlIHRyZWUncyBvbmx5IGJyYW5jaCBub2RlcyBhcmUgZm9sZGVycy5cbi8vXG4vLyBgc3RhdGVgIGlzIHRoZSBmb2xkZXIncyBPV04gc3RhdGUuIERlbGV0aW5nIGEgZm9sZGVyIHdyaXRlcyBvbmx5IHRoYXQsIGFuZFxuLy8gZXZlcnl0aGluZyBiZWxvdyBpdCBjb3VudHMgYXMgZGVsZXRlZCBieSBwb3NpdGlvbiDigJQgc2VlIFJlcG9ydE5vZGUuZGVsZXRlZC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Rm9sZGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXJlbnRSZXBvcnRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbDtcbiAgc3RhdGU/OiBSZXBvcnRTdGF0ZTtcbn1cblxuLy8gR0VUIC9hcGkvcmVwb3J0cyByZXR1cm5zIGJvdGggaGFsdmVzIGZsYXQ7IHRoZSBsaXN0aW5nIG5lc3RzIHRoZW0gaXRzZWxmLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRUcmVlIHtcbiAgcmVwb3J0czogUmVwb3J0TGlzdEl0ZW1bXTtcbiAgZm9sZGVyczogUmVwb3J0Rm9sZGVyW107XG59XG5cbmV4cG9ydCBlbnVtIFJlcG9ydE5vZGVUeXBlIHtcbiAgRm9sZGVyID0gJ2ZvbGRlcicsXG4gIFJlcG9ydCA9ICdyZXBvcnQnLFxufVxuXG4vLyBPbmUgbm9kZSBhcyBmcy10cmVlIHNlZXMgaXQuIEZvbGRlcnMgYW5kIHJlcG9ydHMgc2hhcmUgb25lIGlkIHNwYWNlIGluIHRoZVxuLy8gdmlldywgc28gdGhlIGlkcyBhcmUgcHJlZml4ZWQgKCdmOjEyJyAvICdyOjM0Jykg4oCUIGBpZGAgaXMgdGhlIG9yaWdpbmFsLFxuLy8gcGVyLXRhYmxlIGlkIHRoYXQgdGhlIEFQSSBlbmRwb2ludHMgdGFrZS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Tm9kZSB7XG4gIGtleTogc3RyaW5nO1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFJlcG9ydE5vZGVUeXBlO1xuICAvLyBPbmx5IGV2ZXIgcG9wdWxhdGVkIG9uIGEgZm9sZGVyOyBhIHJlcG9ydCBpcyBhbHdheXMgYSBsZWFmLlxuICBjaGlsZHJlbjogUmVwb3J0Tm9kZVtdO1xuICAvLyBQcmVzZW50IG9uIHJlcG9ydCBub2RlcyBvbmx5LlxuICByZXBvcnQ/OiBSZXBvcnRMaXN0SXRlbTtcbiAgLy8gVGhlIG5vZGUncyBvd24gcm93IGlzIGRlbGV0ZWQuIFdoYXQgZWFybnMgdGhlIFwiRGVsZXRlZFwiIGNoaXAg4oCUIHRoaXMgaXNcbiAgLy8gd2hhdCBzb21lYm9keSBhY3R1YWxseSBkZWxldGVkLlxuICBzdGF0ZURlbGV0ZWQ6IGJvb2xlYW47XG4gIC8vIERlbGV0ZWQgaXRzZWxmIE9SIGFueXdoZXJlIGJlbG93IGEgZGVsZXRlZCBmb2xkZXIuIE9ubHkgZXZlciB0cnVlIGluIFNob3dcbiAgLy8gRGVsZXRlZCBtb2RlICh0aGUgZGVmYXVsdCBsaXN0aW5nIG5ldmVyIHJldHVybnMgc3VjaCBhIG5vZGUpLCBhbmQgaXQgaXMgd2hhdFxuICAvLyBzd2FwcyB0aGUgcm93J3MgYWN0aW9ucyBmb3IgUmVzdG9yZS5cbiAgZGVsZXRlZDogYm9vbGVhbjtcbn1cblxuLy8gUmVwb3J0cyBhbmQgZm9sZGVycyBhcmUgYm90aCBzb2Z0LWRlbGV0YWJsZS4gQSBkZWxldGVkIHJlcG9ydCBrZWVwcyBpdHMgcGFnZXNcbi8vIGFuZCBjb21wb25lbnRzOyBhIGRlbGV0ZWQgZm9sZGVyIGtlZXBzIGV2ZXJ5dGhpbmcgZmlsZWQgdW5kZXIgaXQsIHdoaWNoIGxlYXZlc1xuLy8gdGhlIGxpc3Rpbmcgd2l0aCBpdCBhbmQgY29tZXMgYmFjayB3aXRoIGl0LiBcIlNob3cgRGVsZXRlZFwiIHNob3dzIHRoZSB3aG9sZVxuLy8gdHJlZSwgbGl2ZSBhbmQgZGVsZXRlZCB0b2dldGhlciwgc28gYW55IG9mIGl0IGNhbiBiZSByZXN0b3JlZCBpbiBwbGFjZS5cbmV4cG9ydCBlbnVtIFJlcG9ydFN0YXRlIHtcbiAgQWN0aXZlID0gJ2FjdGl2ZScsXG4gIERlbGV0ZWQgPSAnZGVsZXRlZCcsXG59XG5cbi8vIFRoZSBjaGF0IHR1cm4gZmxhZ3MgdGhpcyBjb250ZXh0J3MgYmFja2VuZCBhZGRzIChSZXBvcnRzXFxBaVZpZXcpLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDaGF0UmVzcG9uc2Uge1xuICByZXBvcnRDaGFuZ2VkPzogYm9vbGVhbjtcbiAgcmVwb3J0UmVuYW1lZD86IGJvb2xlYW47XG59XG5cbi8vIE9uZSB2ZXJzaW9uIG9mIHRoZSBnbG9iYWwgQUkga25vd2xlZGdlIGRvY3VtZW50IOKAlCB0aGUgb3BlcmF0b3ItYXV0aG9yZWRcbi8vIG1hcmtkb3duIGFwcGVuZGVkIHRvIHRoZSByZXBvcnQgYWdlbnQncyBzeXN0ZW0gaW5zdHJ1Y3Rpb25zIG9uIGV2ZXJ5IHR1cm4uXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEluc3RydWN0aW9uIHtcbiAgaWQ6IG51bWJlcjtcbiAgY29udGVudDogc3RyaW5nO1xuICBjdXJyZW50OiBib29sZWFuO1xuICBjcmVhdGVEYXRlOiBEYXRlO1xuICBtb2RpZnlEYXRlOiBEYXRlO1xuICBhY2NvdW50SWQ6IG51bWJlciB8IG51bGw7XG4gIGFjY291bnROYW1lOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBHRVQvUFVUIGluc3RydWN0aW9ucyBwYXlsb2FkOiB0aGUgY3VycmVudCB2ZXJzaW9uIChudWxsIHVudGlsIG9uZSBpc1xuLy8gYXV0aG9yZWQpIHBsdXMgdGhlIGZ1bGwgaGlzdG9yeSwgbmV3ZXN0IGZpcnN0LlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRJbnN0cnVjdGlvbnMge1xuICBpbnN0cnVjdGlvbnM6IFJlcG9ydEluc3RydWN0aW9uIHwgbnVsbDtcbiAgdmVyc2lvbnM6IFJlcG9ydEluc3RydWN0aW9uW107XG59XG5cbi8vIFRoZSBsYXRlc3Qgc2VtYW50aWMtZGF0YWJhc2UgYnVpbGQgKGFuIGZmX3Byb2Nlc3NlcyByb3cpIOKAlCBlbm91Z2ggZm9yIHRoZVxuLy8gc2V0dGluZ3MgZGlhbG9nIHRvIHNheSB3aGF0IHN0YXRlIHRoZSBidWlsZCBpcyBpbiBhbmQgd2hlbiBpdCBsYXN0IHJhbi5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZCB7XG4gIGlkOiBudW1iZXI7XG4gIHN0YXRlOiBzdHJpbmc7XG4gIHBlcmNlbnQ6IG51bWJlciB8IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkdXJhdGlvbjogbnVtYmVyO1xuICBjcmVhdGVEYXRlOiBEYXRlO1xuICBzdGFydERhdGU6IERhdGU7XG4gIGVuZERhdGU6IERhdGU7XG59XG5cbi8vIEEgYnVpbGQgc3RhZ2UncyBzdGF0ZSBvbiB0aGUgZW50aXR5IHNjb3JlYm9hcmQ6ICdkb25lJyA9IGJ1aWx0LCAnbWlzc2luZycgPVxuLy8gc3RpbGwgbmVlZHMgYnVpbGRpbmcgKGEgbWlzc2luZyBzdGFnZSBpcyB1bmJ1aWx0IGNvbnRlbnQsIG5ldmVyIGFuIGVycm9yKS5cbmV4cG9ydCB0eXBlIFNlbWFudGljQnVpbGRTdGFnZSA9ICdkb25lJyB8ICdtaXNzaW5nJztcblxuLy8gT25lIGVudW0gY29sdW1uIG9mIGFuIGVudGl0eSwgd2l0aCB0aGUgYWxsb3dlZCB2YWx1ZXMgdGhlIGJ1aWxkIGlubGluZWQuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRFbnVtIHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIHZhbHVlczogc3RyaW5nW107XG59XG5cbi8vIE9uZSBlbnRpdHkgcm93IG9mIHRoZSBzY29yZWJvYXJkIChhbiBlbnRpdHkgPSBhIHRhYmxlICsgYSBtb2RlbCArIGFcbi8vIGhhbmRsZXIpOiBpdHMgdGFibGUvc2hhcGUgY291bnRzLCBpbmxpbmVkIGVudW0gdmFsdWVzLCBjb21wdXRlZCBmaWVsZHMsIGhvd1xuLy8gbWFueSBjb2RlIGZ1bmN0aW9ucyB3ZXJlIGNhY2hlZCAoc3BsaXQgbW9kZWwgdnMgaGFuZGxlciksIGFuZCB0aGUgcGVyLXN0YWdlXG4vLyBidWlsdC9taXNzaW5nIHN0YXRlLlxuLy9cbi8vIGBtb2RlbGAvYGhhbmRsZXJgIGFyZSB0aGUgY2xhc3NlcyB0aGUgZnVuY3Rpb25zIHdlcmUgcmVhZCBmcm9tIOKAlCB3aGF0IGFcbi8vIHJlYWRlciByZWNvZ25pemVzIHRoZSByb3cgYnksIHdoZXJlIGBrZXlgIGlzIHdoYXQgdGhlIHJlcG9ydCBBSSBhZGRyZXNzZXMgaXRcbi8vIGJ5IGluIGRlc2NyaWJlX2VudGl0eSAvIGNvbXBpbGVfcXVlcnkuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRFbnRpdHkge1xuICBrZXk6IHN0cmluZztcbiAgdGFibGU6IHN0cmluZztcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XG4gIGhhbmRsZXI6IHN0cmluZyB8IG51bGw7XG4gIGNvbHVtbnM6IG51bWJlcjtcbiAgcmVsYXRpb25zaGlwczogbnVtYmVyO1xuICBlbnVtczogU2VtYW50aWNCdWlsZEVudW1bXTtcbiAgY29tcHV0ZWRGaWVsZHM6IHN0cmluZ1tdO1xuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIG1vZGVsRnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBoYW5kbGVyRnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBzdGFnZXM6IFJlY29yZDxzdHJpbmcsIFNlbWFudGljQnVpbGRTdGFnZT47XG59XG5cbi8vIE9uZSBzdGFuZGFsb25lIGNvZGUgY2xhc3MgdGhlIGJ1aWxkIHJlYWQ6IGRvbWFpbiBsb2dpYyB3aXRoIG5vIHRhYmxlIG9mIGl0c1xuLy8gb3duIChhIHN1bW1hcnkgbW9kZWwsIGEgY2FsY3VsYXRpb24gc2VydmljZSkuIFRoZSByZXBvcnQgQUkgcmVhZHMgaXRzIGNvZGVcbi8vIGV4YWN0bHkgbGlrZSBhbiBlbnRpdHkncywgYnV0IGl0IGNhbiBuZXZlciBiZSBxdWVyaWVkIOKAlCB0aGVyZSBpcyBub3RoaW5nIHRvXG4vLyBzZWxlY3QgZnJvbSDigJQgc28gaXQgY2FycmllcyBubyB0YWJsZSwgY29sdW1ucyBvciByZWxhdGlvbnNoaXBzLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkQ2xhc3Mge1xuICBrZXk6IHN0cmluZztcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XG4gIGZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbn1cblxuLy8gV2hhdCB0aGUgYnVpbGQgZGVjaWRlZCBhIHBoeXNpY2FsIHRhYmxlIGlzLiBFbnRpdHkgYW5kIGp1bmN0aW9uIGFyZSBib3RoXG4vLyByZWFjaGFibGUgYnkgdGhlIHJlcG9ydCBBSSDigJQgYW4gZW50aXR5IGRpcmVjdGx5LCBhIGp1bmN0aW9uIHRocm91Z2ggdGhlXG4vLyBtYW55LXRvLW1hbnkgaXQgYnJpZGdlcy4gRXhjbHVkZWQgaXMgbm90IHJlYWNoYWJsZSBhdCBhbGwuXG5leHBvcnQgdHlwZSBTZW1hbnRpY1RhYmxlQ2xhc3NpZmljYXRpb24gPSAnZW50aXR5JyB8ICdqdW5jdGlvbicgfCAnZXhjbHVkZWQnO1xuXG4vLyBPbmUgcGh5c2ljYWwgdGFibGUgYXMgdGhlIGJ1aWxkIGNsYXNzaWZpZWQgaXQuIGByZWFzb25gIGFuc3dlcnMgYSBzaW5nbGVcbi8vIHF1ZXN0aW9uIOKAlCB3aHkgY2FuJ3QgdGhlIHJlcG9ydCBBSSBzZWUgdGhpcyB0YWJsZT8g4oCUIGFuZCBpcyBudWxsIHdoZW4gaXQgY2FuLlxuLy8gQSBqdW5jdGlvbiB3aXRoIGEgcmVhc29uIGJyaWRnZWQgbm90aGluZywgc28gaXQgaXMganVzdCBhcyBpbnZpc2libGUgYXMgYW5cbi8vIGV4Y2x1ZGVkIHRhYmxlLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkVGFibGUge1xuICB0YWJsZTogc3RyaW5nO1xuICBjbGFzc2lmaWNhdGlvbjogU2VtYW50aWNUYWJsZUNsYXNzaWZpY2F0aW9uO1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgcmVhc29uOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBUaGUgYnVpbGQgc2NvcmVib2FyZCBzaGlwcGVkIGFsb25nc2lkZSB0aGUgYnVpbGQgc3RhdHVzOiB0aGUgc3VtbWFyeSBjb3VudHMsXG4vLyB0aGUgZnVsbCBicmVha2Rvd24gdGhlIHNldHRpbmdzIGRpYWxvZyBkcmlsbHMgaW50byDigJQgQk9USCBraW5kcyBvZiB1bml0IHRoZVxuLy8gYnVpbGQgY2FjaGVzLCB0YWJsZS1iYWNrZWQgZW50aXRpZXMgYW5kIHN0YW5kYWxvbmUgY29kZSBjbGFzc2VzIOKAlCBhbmQgdGhlXG4vLyBjYXRhbG9nIG9mIGV2ZXJ5IHRhYmxlIHRoZSBidWlsZCBzYXcsIHNvIHRoZSB0YWIgY2FuIHNob3cgd2hhdCB0aGUgcmVwb3J0IEFJXG4vLyBjYW4ndCBzZWUsIG5vdCBqdXN0IHdoYXQgaXQgY2FuLlxuLy9cbi8vIGBmdW5jdGlvbkNvdW50YCBzcGFucyBlbnRpdGllcyBhbmQgY2xhc3NlcyBhbGlrZTogaXQgaXMgdGhlIHNhbWUgdG90YWwgdGhlXG4vLyBidWlsZCBpdHNlbGYgcmVwb3J0cyB3aGVuIGl0IGZpbmlzaGVzLlxuLy9cbi8vIGB0YWJsZXNgIGlzIGVtcHR5IGZvciBhbiBhcnRpZmFjdCBidWlsdCBiZWZvcmUgdGhlIGNhdGFsb2cgZXhpc3RlZC4gUmVhZCB0aGF0XG4vLyBhcyBcIm5vIGNhdGFsb2dcIiwgbmV2ZXIgYXMgXCJub3RoaW5nIHdhcyBleGNsdWRlZFwiLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRGV0YWlsIHtcbiAgLy8gV2hldGhlciB0aGUgYXJ0aWZhY3Qgd2FzIHByb2R1Y2VkIGJ5IGEgYnVpbGQgdGhhdCByYW4gdG8gdGhlIGVuZC4gUmVhZCBpdFxuICAvLyBiZXNpZGUgYGdlbmVyYXRlZEF0YCwgbmV2ZXIgaW5zdGVhZCBvZiBpdDogdGhlIHN0cnVjdHVyYWwgYXJ0aWZhY3QgaXNcbiAgLy8gcHVibGlzaGVkIEJFRk9SRSB0aGUgQUkgZnVuY3Rpb24gcGFzcywgc28gYSBidWlsZCB3aG9zZSBBSSBwYXNzIGZhaWxlZCBzdGlsbFxuICAvLyBjYXJyaWVzIGEgZGF0ZSBhbmQgYSBmdWxsIHNldCBvZiBjb3VudHMuIFRoZSBkYXRlIHNheXMgc29tZXRoaW5nIHdhc1xuICAvLyB3cml0dGVuOyBvbmx5IHRoaXMgc2F5cyB0aGUgYnVpbGQgZmluaXNoZWQgd3JpdGluZyBpdC5cbiAgY29tcGxldGU6IGJvb2xlYW47XG4gIGdlbmVyYXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgZW50aXR5Q291bnQ6IG51bWJlcjtcbiAgY2xhc3NDb3VudDogbnVtYmVyO1xuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIGVudGl0aWVzOiBTZW1hbnRpY0J1aWxkRW50aXR5W107XG4gIGNsYXNzZXM6IFNlbWFudGljQnVpbGRDbGFzc1tdO1xuICB0YWJsZUNvdW50OiBudW1iZXI7XG4gIGp1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgdW5saW5rZWRKdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIGV4Y2x1ZGVkQ291bnQ6IG51bWJlcjtcbiAgdGFibGVzOiBTZW1hbnRpY0J1aWxkVGFibGVbXTtcbn1cblxuLy8gV2hpY2ggY2xhc3MgYSBjYWNoZWQgZnVuY3Rpb24gd2FzIHJlYWQgZnJvbS4gQW4gZW50aXR5J3MgY2FjaGUgc3BsaXRzIGludG9cbi8vICdtb2RlbCcgYW5kICdoYW5kbGVyJzsgYSBzdGFuZGFsb25lIGNvZGUgY2xhc3MgaGFzIG9uZSBncm91cCwgJ2NsYXNzJy5cbmV4cG9ydCB0eXBlIFNlbWFudGljRnVuY3Rpb25Tb3VyY2UgPSAnbW9kZWwnIHwgJ2hhbmRsZXInIHwgJ2NsYXNzJztcblxuLy8gT25lIEFJLWNsYXNzaWZpZWQgY29kZSBmdW5jdGlvbiBmcm9tIGEgbW9kZWwsIGhhbmRsZXIgb3Igc3RhbmRhbG9uZSBjbGFzczpcbi8vIHdoYXQga2luZCBvZiBsb2dpYyBpdCBpcywgd2hhdCBpdCBkb2VzLCBhbmQgd2hhdCBpdCBwcm9kdWNlcyDigJQgdGhlIGJ1aWxkJ3Ncbi8vIGNhY2hlZCBcIndoYXQgdGhlIGNvZGUgZG9lc1wiIGtub3dsZWRnZSBzaG93biBpbiB0aGUgZnVuY3Rpb25zIGRpYWxvZy5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNFbnRpdHlGdW5jdGlvbiB7XG4gIGNsYXNzOiBzdHJpbmc7XG4gIG1ldGhvZDogc3RyaW5nO1xuICBzaWduYXR1cmU6IHN0cmluZztcbiAga2luZDogc3RyaW5nO1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIHByb2R1Y2VzOiBzdHJpbmc7XG4gIHNvdXJjZTogU2VtYW50aWNGdW5jdGlvblNvdXJjZTtcbn1cblxuLy8gT25lIGVudGl0eSdzIGNhY2hlZCBjb2RlLWZ1bmN0aW9uIGtub3dsZWRnZSwgZmV0Y2hlZCB3aGVuIGEgZnVuY3Rpb25zIGRpYWxvZ1xuLy8gb3BlbnMgKHRoZSBmdWxsIHNldCBhY3Jvc3MgYWxsIGVudGl0aWVzIGlzIHRvbyBiaWcgdG8gc2hpcCB3aXRoIHRoZVxuLy8gc2NvcmVib2FyZCkuIE9uZSBwYXlsb2FkIHNlcnZlcyBib3RoIGRpYWxvZ3Mg4oCUIGNvbnN1bWVycyBmaWx0ZXIgYnkgc291cmNlLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0VudGl0eUZ1bmN0aW9ucyB7XG4gIGVudGl0eTogc3RyaW5nO1xuICBnZW5lcmF0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIG1vZGVsQ2xhc3M6IHN0cmluZyB8IG51bGw7XG4gIGhhbmRsZXJDbGFzczogc3RyaW5nIHwgbnVsbDtcbiAgZnVuY3Rpb25zOiBTZW1hbnRpY0VudGl0eUZ1bmN0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZFN0YXR1cyB7XG4gIGJ1aWxkOiBTZW1hbnRpY0J1aWxkIHwgbnVsbDtcbiAgZGV0YWlsOiBTZW1hbnRpY0J1aWxkRGV0YWlsO1xufVxuXG4vLyBUaGUgcmVwb3J0IG1vZHVsZSdzIEdlbmVyYWwgc2V0dGluZ3MgKGEgc21hbGwgZ2xvYmFsIGtleS92YWx1ZSBzdG9yZSwgdGhlXG4vLyByZXBvcnRpbmcgY291bnRlcnBhcnQgb2YgdGhlIGFwcC13aWRlIHNldHRpbmdzKS4gRWFjaCB2YWx1ZSBzaGlwcyB3aXRoIHRoZVxuLy8gc2FmZSBiYW5kIGl0cyBlZGl0b3IgZmllbGQgaXMgYm91bmRlZCB0by5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U2V0dGluZ3Mge1xuICAvLyBIb3cgbWFueSBzdW1tYXJ5IGNhbGxzIHRoZSBzZW1hbnRpYyBidWlsZCBydW5zIGF0IG9uY2UuXG4gIHNlbWFudGljQnVpbGRDb25jdXJyZW5jeTogbnVtYmVyO1xuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3lNaW46IG51bWJlcjtcbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5TWF4OiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// The most leading columns a list can keep in view while it scrolls sideways.
|
|
2
|
+
// Mirrors the server's ListConfig::MAX_PINNED_COLUMNS, which refuses more.
|
|
3
|
+
export const MAX_PINNED_COLUMNS = 3;
|
|
4
|
+
// A list's authored sort, most important first. A list sort is a list of
|
|
5
|
+
// terms, but a list saved before multi-key sorting stores one object and is
|
|
6
|
+
// never rewritten, so both shapes are read here. This is the one reader of a
|
|
7
|
+
// list's config.sort: the config type intersects the chart and list configs,
|
|
8
|
+
// so a direct `config.sort.column` still compiles and silently misreads an
|
|
9
|
+
// array. A term without a column orders nothing and is dropped.
|
|
10
|
+
export function listSortTerms(config) {
|
|
11
|
+
const sort = config?.sort;
|
|
12
|
+
if (!sort) {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
return (Array.isArray(sort) ? sort : [sort])
|
|
16
|
+
.filter((term) => !!term?.column);
|
|
17
|
+
}
|
|
18
|
+
// The columns a viewer can hide on a list, by name: a plain list's configured
|
|
19
|
+
// columns. A cross-tab offers none, since its columns are pivot values that
|
|
20
|
+
// come and go with the data.
|
|
21
|
+
export function listHideableColumns(config) {
|
|
22
|
+
return config?.pivotBy?.column
|
|
23
|
+
? []
|
|
24
|
+
: (config?.columns ?? []).map((column) => column.column);
|
|
25
|
+
}
|
|
26
|
+
// The hidden column names a list honors: only columns it can hide, each once,
|
|
27
|
+
// in the list's own order, and none at all when they would hide every column
|
|
28
|
+
// (a list always shows one, and the server ignores such a CSV list too). The
|
|
29
|
+
// filter state, the screen and every export read this one rule.
|
|
30
|
+
export function listHiddenColumns(config, names) {
|
|
31
|
+
const hideable = listHideableColumns(config);
|
|
32
|
+
const hidden = hideable.filter((name) => names.includes(name));
|
|
33
|
+
return hidden.length < hideable.length ? hidden : [];
|
|
34
|
+
}
|
|
35
|
+
// How many leading columns stay in view while a wide list scrolls sideways.
|
|
36
|
+
// Unset, a cross-tab pins its row-key column and a plain list pins none. A
|
|
37
|
+
// cross-tab pins at most that one column, since the rest are pivot values; a
|
|
38
|
+
// stored config that asks for more is clamped here, as the server refuses it
|
|
39
|
+
// only on save.
|
|
40
|
+
export function listPinnedColumns(config) {
|
|
41
|
+
const crossTab = !!config?.pivotBy?.column;
|
|
42
|
+
const pinned = config?.pinnedColumns ?? (crossTab ? 1 : 0);
|
|
43
|
+
return Math.min(Math.max(Math.floor(Number(pinned) || 0), 0), crossTab ? 1 : MAX_PINNED_COLUMNS);
|
|
44
|
+
}
|
|
45
|
+
// The classes a list column carries on its header, cells and footer. fs-list
|
|
46
|
+
// copies a column's classes once, when it builds the column, so they are
|
|
47
|
+
// static: `report-pin-{index}` names the column's place among the pinned ones
|
|
48
|
+
// (its left offset is a CSS variable the list measures), `report-pin-last`
|
|
49
|
+
// draws the separator after the last pinned column, and `report-nowrap` keeps
|
|
50
|
+
// the column's cells on one line.
|
|
51
|
+
export function columnClasses(column, index, pinned) {
|
|
52
|
+
const classes = [];
|
|
53
|
+
if (index < pinned) {
|
|
54
|
+
classes.push('report-pinned', `report-pin-${index}`);
|
|
55
|
+
if (index === pinned - 1) {
|
|
56
|
+
classes.push('report-pin-last');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (column.wrap === false) {
|
|
60
|
+
classes.push('report-nowrap');
|
|
61
|
+
}
|
|
62
|
+
return classes.join(' ');
|
|
63
|
+
}
|
|
64
|
+
// The label a list's totals row writes, on screen and in the PDF and deck.
|
|
65
|
+
export const LIST_TOTAL_LABEL = 'Total';
|
|
66
|
+
// The column of a totals row that carries LIST_TOTAL_LABEL, among the columns
|
|
67
|
+
// shown, in order: the first one, unless it holds a total itself, in which
|
|
68
|
+
// case the row has no label. A cross-tab's first column is its row key, which
|
|
69
|
+
// never holds one.
|
|
70
|
+
export function listTotalsLabelColumn(columns, totals) {
|
|
71
|
+
const first = columns[0];
|
|
72
|
+
return first && totals?.[first.column] === undefined ? first.column : null;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvbGlzdC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsOEVBQThFO0FBQzlFLDJFQUEyRTtBQUMzRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFFcEMseUVBQXlFO0FBQ3pFLDRFQUE0RTtBQUM1RSw2RUFBNkU7QUFDN0UsNkVBQTZFO0FBQzdFLDJFQUEyRTtBQUMzRSxnRUFBZ0U7QUFDaEUsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFxQztJQUNqRSxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBRTFCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsNEVBQTRFO0FBQzVFLDZCQUE2QjtBQUM3QixNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBcUM7SUFDdkUsT0FBTyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07UUFDNUIsQ0FBQyxDQUFDLEVBQUU7UUFDSixDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSxnRUFBZ0U7QUFDaEUsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQXFDLEVBQUUsS0FBd0I7SUFDL0YsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRS9ELE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN2RCxDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSw2RUFBNkU7QUFDN0UsNkVBQTZFO0FBQzdFLGdCQUFnQjtBQUNoQixNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBcUM7SUFDckUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxhQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFM0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDbkcsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSx5RUFBeUU7QUFDekUsOEVBQThFO0FBQzlFLDJFQUEyRTtBQUMzRSw4RUFBOEU7QUFDOUUsa0NBQWtDO0FBQ2xDLE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBa0IsRUFBRSxLQUFhLEVBQUUsTUFBYztJQUM3RSxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFN0IsSUFBSSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsY0FBYyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXJELElBQUksS0FBSyxLQUFLLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0FBRXhDLDhFQUE4RTtBQUM5RSwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLG1CQUFtQjtBQUNuQixNQUFNLFVBQVUscUJBQXFCLENBQ25DLE9BQThCLEVBQzlCLE1BQWtEO0lBRWxELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6QixPQUFPLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpc3RDb2x1bW4sIExpc3RDb25maWcsIFJlcG9ydFNvcnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5cblxuLy8gVGhlIG1vc3QgbGVhZGluZyBjb2x1bW5zIGEgbGlzdCBjYW4ga2VlcCBpbiB2aWV3IHdoaWxlIGl0IHNjcm9sbHMgc2lkZXdheXMuXG4vLyBNaXJyb3JzIHRoZSBzZXJ2ZXIncyBMaXN0Q29uZmlnOjpNQVhfUElOTkVEX0NPTFVNTlMsIHdoaWNoIHJlZnVzZXMgbW9yZS5cbmV4cG9ydCBjb25zdCBNQVhfUElOTkVEX0NPTFVNTlMgPSAzO1xuXG4vLyBBIGxpc3QncyBhdXRob3JlZCBzb3J0LCBtb3N0IGltcG9ydGFudCBmaXJzdC4gQSBsaXN0IHNvcnQgaXMgYSBsaXN0IG9mXG4vLyB0ZXJtcywgYnV0IGEgbGlzdCBzYXZlZCBiZWZvcmUgbXVsdGkta2V5IHNvcnRpbmcgc3RvcmVzIG9uZSBvYmplY3QgYW5kIGlzXG4vLyBuZXZlciByZXdyaXR0ZW4sIHNvIGJvdGggc2hhcGVzIGFyZSByZWFkIGhlcmUuIFRoaXMgaXMgdGhlIG9uZSByZWFkZXIgb2YgYVxuLy8gbGlzdCdzIGNvbmZpZy5zb3J0OiB0aGUgY29uZmlnIHR5cGUgaW50ZXJzZWN0cyB0aGUgY2hhcnQgYW5kIGxpc3QgY29uZmlncyxcbi8vIHNvIGEgZGlyZWN0IGBjb25maWcuc29ydC5jb2x1bW5gIHN0aWxsIGNvbXBpbGVzIGFuZCBzaWxlbnRseSBtaXNyZWFkcyBhblxuLy8gYXJyYXkuIEEgdGVybSB3aXRob3V0IGEgY29sdW1uIG9yZGVycyBub3RoaW5nIGFuZCBpcyBkcm9wcGVkLlxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RTb3J0VGVybXMoY29uZmlnOiBMaXN0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFJlcG9ydFNvcnRbXSB7XG4gIGNvbnN0IHNvcnQgPSBjb25maWc/LnNvcnQ7XG5cbiAgaWYgKCFzb3J0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIChBcnJheS5pc0FycmF5KHNvcnQpID8gc29ydCA6IFtzb3J0XSlcbiAgICAuZmlsdGVyKCh0ZXJtKSA9PiAhIXRlcm0/LmNvbHVtbik7XG59XG5cbi8vIFRoZSBjb2x1bW5zIGEgdmlld2VyIGNhbiBoaWRlIG9uIGEgbGlzdCwgYnkgbmFtZTogYSBwbGFpbiBsaXN0J3MgY29uZmlndXJlZFxuLy8gY29sdW1ucy4gQSBjcm9zcy10YWIgb2ZmZXJzIG5vbmUsIHNpbmNlIGl0cyBjb2x1bW5zIGFyZSBwaXZvdCB2YWx1ZXMgdGhhdFxuLy8gY29tZSBhbmQgZ28gd2l0aCB0aGUgZGF0YS5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0SGlkZWFibGVDb2x1bW5zKGNvbmZpZzogTGlzdENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBjb25maWc/LnBpdm90Qnk/LmNvbHVtblxuICAgID8gW11cbiAgICA6IChjb25maWc/LmNvbHVtbnMgPz8gW10pLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uY29sdW1uKTtcbn1cblxuLy8gVGhlIGhpZGRlbiBjb2x1bW4gbmFtZXMgYSBsaXN0IGhvbm9yczogb25seSBjb2x1bW5zIGl0IGNhbiBoaWRlLCBlYWNoIG9uY2UsXG4vLyBpbiB0aGUgbGlzdCdzIG93biBvcmRlciwgYW5kIG5vbmUgYXQgYWxsIHdoZW4gdGhleSB3b3VsZCBoaWRlIGV2ZXJ5IGNvbHVtblxuLy8gKGEgbGlzdCBhbHdheXMgc2hvd3Mgb25lLCBhbmQgdGhlIHNlcnZlciBpZ25vcmVzIHN1Y2ggYSBDU1YgbGlzdCB0b28pLiBUaGVcbi8vIGZpbHRlciBzdGF0ZSwgdGhlIHNjcmVlbiBhbmQgZXZlcnkgZXhwb3J0IHJlYWQgdGhpcyBvbmUgcnVsZS5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0SGlkZGVuQ29sdW1ucyhjb25maWc6IExpc3RDb25maWcgfCBudWxsIHwgdW5kZWZpbmVkLCBuYW1lczogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGhpZGVhYmxlID0gbGlzdEhpZGVhYmxlQ29sdW1ucyhjb25maWcpO1xuICBjb25zdCBoaWRkZW4gPSBoaWRlYWJsZS5maWx0ZXIoKG5hbWUpID0+IG5hbWVzLmluY2x1ZGVzKG5hbWUpKTtcblxuICByZXR1cm4gaGlkZGVuLmxlbmd0aCA8IGhpZGVhYmxlLmxlbmd0aCA/IGhpZGRlbiA6IFtdO1xufVxuXG4vLyBIb3cgbWFueSBsZWFkaW5nIGNvbHVtbnMgc3RheSBpbiB2aWV3IHdoaWxlIGEgd2lkZSBsaXN0IHNjcm9sbHMgc2lkZXdheXMuXG4vLyBVbnNldCwgYSBjcm9zcy10YWIgcGlucyBpdHMgcm93LWtleSBjb2x1bW4gYW5kIGEgcGxhaW4gbGlzdCBwaW5zIG5vbmUuIEFcbi8vIGNyb3NzLXRhYiBwaW5zIGF0IG1vc3QgdGhhdCBvbmUgY29sdW1uLCBzaW5jZSB0aGUgcmVzdCBhcmUgcGl2b3QgdmFsdWVzOyBhXG4vLyBzdG9yZWQgY29uZmlnIHRoYXQgYXNrcyBmb3IgbW9yZSBpcyBjbGFtcGVkIGhlcmUsIGFzIHRoZSBzZXJ2ZXIgcmVmdXNlcyBpdFxuLy8gb25seSBvbiBzYXZlLlxuZXhwb3J0IGZ1bmN0aW9uIGxpc3RQaW5uZWRDb2x1bW5zKGNvbmZpZzogTGlzdENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICBjb25zdCBjcm9zc1RhYiA9ICEhY29uZmlnPy5waXZvdEJ5Py5jb2x1bW47XG4gIGNvbnN0IHBpbm5lZCA9IGNvbmZpZz8ucGlubmVkQ29sdW1ucyA/PyAoY3Jvc3NUYWIgPyAxIDogMCk7XG5cbiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KE1hdGguZmxvb3IoTnVtYmVyKHBpbm5lZCkgfHwgMCksIDApLCBjcm9zc1RhYiA/IDEgOiBNQVhfUElOTkVEX0NPTFVNTlMpO1xufVxuXG4vLyBUaGUgY2xhc3NlcyBhIGxpc3QgY29sdW1uIGNhcnJpZXMgb24gaXRzIGhlYWRlciwgY2VsbHMgYW5kIGZvb3Rlci4gZnMtbGlzdFxuLy8gY29waWVzIGEgY29sdW1uJ3MgY2xhc3NlcyBvbmNlLCB3aGVuIGl0IGJ1aWxkcyB0aGUgY29sdW1uLCBzbyB0aGV5IGFyZVxuLy8gc3RhdGljOiBgcmVwb3J0LXBpbi17aW5kZXh9YCBuYW1lcyB0aGUgY29sdW1uJ3MgcGxhY2UgYW1vbmcgdGhlIHBpbm5lZCBvbmVzXG4vLyAoaXRzIGxlZnQgb2Zmc2V0IGlzIGEgQ1NTIHZhcmlhYmxlIHRoZSBsaXN0IG1lYXN1cmVzKSwgYHJlcG9ydC1waW4tbGFzdGBcbi8vIGRyYXdzIHRoZSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIGxhc3QgcGlubmVkIGNvbHVtbiwgYW5kIGByZXBvcnQtbm93cmFwYCBrZWVwc1xuLy8gdGhlIGNvbHVtbidzIGNlbGxzIG9uIG9uZSBsaW5lLlxuZXhwb3J0IGZ1bmN0aW9uIGNvbHVtbkNsYXNzZXMoY29sdW1uOiBMaXN0Q29sdW1uLCBpbmRleDogbnVtYmVyLCBwaW5uZWQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGluZGV4IDwgcGlubmVkKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdyZXBvcnQtcGlubmVkJywgYHJlcG9ydC1waW4tJHtpbmRleH1gKTtcblxuICAgIGlmIChpbmRleCA9PT0gcGlubmVkIC0gMSkge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdyZXBvcnQtcGluLWxhc3QnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29sdW1uLndyYXAgPT09IGZhbHNlKSB7XG4gICAgY2xhc3Nlcy5wdXNoKCdyZXBvcnQtbm93cmFwJyk7XG4gIH1cblxuICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG59XG5cbi8vIFRoZSBsYWJlbCBhIGxpc3QncyB0b3RhbHMgcm93IHdyaXRlcywgb24gc2NyZWVuIGFuZCBpbiB0aGUgUERGIGFuZCBkZWNrLlxuZXhwb3J0IGNvbnN0IExJU1RfVE9UQUxfTEFCRUwgPSAnVG90YWwnO1xuXG4vLyBUaGUgY29sdW1uIG9mIGEgdG90YWxzIHJvdyB0aGF0IGNhcnJpZXMgTElTVF9UT1RBTF9MQUJFTCwgYW1vbmcgdGhlIGNvbHVtbnNcbi8vIHNob3duLCBpbiBvcmRlcjogdGhlIGZpcnN0IG9uZSwgdW5sZXNzIGl0IGhvbGRzIGEgdG90YWwgaXRzZWxmLCBpbiB3aGljaFxuLy8gY2FzZSB0aGUgcm93IGhhcyBubyBsYWJlbC4gQSBjcm9zcy10YWIncyBmaXJzdCBjb2x1bW4gaXMgaXRzIHJvdyBrZXksIHdoaWNoXG4vLyBuZXZlciBob2xkcyBvbmUuXG5leHBvcnQgZnVuY3Rpb24gbGlzdFRvdGFsc0xhYmVsQ29sdW1uKFxuICBjb2x1bW5zOiByZWFkb25seSBMaXN0Q29sdW1uW10sXG4gIHRvdGFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGZpcnN0ID0gY29sdW1uc1swXTtcblxuICByZXR1cm4gZmlyc3QgJiYgdG90YWxzPy5bZmlyc3QuY29sdW1uXSA9PT0gdW5kZWZpbmVkID8gZmlyc3QuY29sdW1uIDogbnVsbDtcbn1cbiJdfQ==
|