@sumaris-net/ngx-components 18.2.26 → 18.2.27-alpha1

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.
@@ -26,6 +26,7 @@ export { MatDateShort } from './src/app/shared/material/datetime/material.datesh
26
26
  export { MatDateTime } from './src/app/shared/material/datetime/material.datetime';
27
27
  export { MatDate } from './src/app/shared/material/datetime/material.date';
28
28
  export { MatLatLongField } from './src/app/shared/material/latlong/material.latlong';
29
+ export { MatLatLongField2 } from './src/app/shared/material/latlong/material.latlong2';
29
30
  export * from './src/app/shared/material/latlong/material.latlong.module';
30
31
  export * from './src/app/shared/material/duration/duration.module';
31
32
  export { MatDuration } from './src/app/shared/material/duration/material.duration';
@@ -360,4 +361,4 @@ export * from './src/app/social/job/testing/job.testing.module';
360
361
  export * from './src/app/social/job/testing/job-progression.testing';
361
362
  export * from './src/app/social/job/testing/job-progression.testing.service';
362
363
  export * from './src/app/core/table/testing/table-validator.service';
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUVkLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx1Q0FBdUMsQ0FBQztBQUV0RCxTQUFTO0FBQ1QsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxRSxjQUFjLCtDQUErQyxDQUFDO0FBRTlELGtCQUFrQjtBQUNsQixjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixjQUFjLHFFQUFxRSxDQUFDO0FBQ3BGLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxxRUFBcUUsQ0FBQztBQUNwRixjQUFjLG9FQUFvRSxDQUFDO0FBQ25GLGNBQWMsOENBQThDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQy9FLGNBQWMsNkRBQTZELENBQUM7QUFDNUUsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixjQUFjLDJEQUEyRCxDQUFD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QzVFLGNBQWMsdUVBQXVFLENBQUM7QUFDdEYsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLGNBQWMscUVBQXFFLENBQUM7QUFDcEYsY0FBYyxtRUFBbUUsQ0FBQztBQUVsRixpQkFBaUI7QUFDakIsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsd0RBQXdELENBQUM7QUFDdkUsY0FBYyxnRUFBZ0UsQ0FBQztBQUMvRSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyw4REFBOEQsQ0FBQztBQUM3RSxjQUFjLHNEQUFzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRW52aXJvbm1lbnRcblxuZXhwb3J0ICogZnJvbSAnLi9zcmMvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5sb2FkZXInO1xuXG4vLyBTaGFyZWRcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc2hhcmVkLm1vZHVsZSc7XG5leHBvcnQgeyBTaGFyZWRSb3V0aW5nTW9kdWxlIH0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zaGFyZWQtcm91dGluZy5tb2R1bGUnO1xuZXhwb3J0IHsgUnhTdGF0ZU1vZHVsZSB9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcngtc3RhdGUvcngtc3RhdGUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcngtc3RhdGUvcngtc3RhdGUuZGVjb3JhdG9ycyc7XG5cbi8vIFNoYXJlZCBtYXRlcmlhbFxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5hbmltYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYm9vbGVhbi9ib29sZWFuLm1vZHVsZSc7XG5leHBvcnQgeyBNYXRCb29sZWFuRmllbGQgfSBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwuYm9vbGVhbic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2NoaXBzL2NoaXBzLm1vZHVsZSc7XG5leHBvcnQgeyBNYXRDaGlwc0ZpZWxkIH0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9jaGlwcy9tYXRlcmlhbC5jaGlwcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL3BhZ2luYXRvci9tYXRlcmlhbC5wYWdpbmF0b3ItaTE4bic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL3N0ZXBwZXIvbWF0ZXJpYWwuc3RlcHBlci1pMThuJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZGF0ZXRpbWUvZGF0ZXRpbWUubW9kdWxlJztcbmV4cG9ydCB7IE1hdERhdGVTaG9ydCB9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZGF0ZXRpbWUvbWF0ZXJpYWwuZGF0ZXNob3J0JztcbmV4cG9ydCB7IE1hdERhdGVUaW1lIH0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRldGltZSc7XG5leHBvcnQgeyBNYXREYXRlIH0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRlJztcbmV4cG9ydCB7IE1hdExhdExvbmdGaWVsZCB9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvbGF0bG9uZy9tYXRlcmlhbC5sYXRsb25nJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvbGF0bG9uZy9tYXRlcmlhbC5sYXRsb25nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2R1cmF0aW9uL2R1cmF0aW9uLm1vZHVsZSc7XG5leHBvcnQgeyBNYXREdXJhdGlvbiB9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZHVyYXRpb24vbWF0ZXJpYWwuZHVyYXRpb24nO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9udW1wYWQvbnVtcGFkLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL251bXBhZC9udW1wYWQuZGlyZWN0aXZlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvbnVtcGFkL251bXBhZC5hcHBlbmQtdG8taW5wdXQuZGlyZWN0aXZlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvbnVtcGFkL251bXBhZC5jb250YWluZXInO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9udW1wYWQvbnVtcGFkLmNvbnRlbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9udW1wYWQvbnVtcGFkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL3N3aXBlL3N3aXBlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL3N3aXBlL21hdGVyaWFsLnN3aXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYmFkZ2UvYmFkZ2UubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYmFkZ2UvYmFkZ2UuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvdGV4dC90ZXh0LWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvdGV4dC90ZXh0LWZvcm0ubW9kdWxlJztcblxuLy8gU2hhcmVkIGNvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvaW5wdXRzJztcbmV4cG9ydCB7IEFwcEZvcm1GaWVsZCB9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZm9ybS9maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9mb3JtL2xvYWRpbmctc3Bpbm5lcic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC90b29sYmFyL3Rvb2xiYXInO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC90b29sYmFyL21vZGFsLXRvb2xiYXInO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC90b29sYmFyL3Rvb2xiYXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvaW50ZXJjZXB0b3JzL3Byb2dlc3MuaW50ZXJjZXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9oZWxwL2hlbHAubW9kYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9ndWFyZC9jb21wb25lbnQtZGlydHkuZ3VhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC91cGxvYWQtZmlsZS91cGxvYWQtZmlsZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3VwbG9hZC1maWxlLXBvcG92ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdXBsb2FkLWZpbGUvdXBsb2FkLWZpbGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvaW1hZ2UvZ2FsbGVyeS9pbWFnZS1nYWxsZXJ5LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2ltYWdlL2dhbGxlcnkvaW1hZ2UtZ2FsbGVyeS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9pbWFnZS9pbWFnZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2ltYWdlL2ltYWdlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3N0b3JhZ2Uvc3RvcmFnZS1leHBsb3Jlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zdG9yYWdlL3N0b3JhZ2UtZXhwbG9yZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbG9nZ2luZy9sb2ctbGV2ZWwubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2xvZ2dpbmcvbG9nZ2luZy1zZXJ2aWNlLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbG9nZ2luZy9sb2dnaW5nLXNlcnZpY2UuY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbG9nZ2luZy9sb2dnaW5nLXNlcnZpY2UubW9kdWxlJztcblxuLy8gU2hhcmVkIGRpcmVjdGl2ZXNcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZGlyZWN0aXZlcy9kaXJlY3RpdmVzLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvYXV0b2ZvY3VzLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvbmctdmFyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvZHJhZy1hbmQtZHJvcC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9kaXJlY3RpdmVzL2F1dG90aXRsZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9kaXJlY3RpdmVzL3Jlc2l6YWJsZS9yZXNpemFibGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZGlyZWN0aXZlcy9yZXNpemFibGUvcmVzaXphYmxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvcmVzaXphYmxlL3Jlc2l6YWJsZS5tb2R1bGUnO1xuXG4vLyBTaGFyZWQgcGlwZXNcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvcGlwZXMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvZGF0ZS1mb3JtYXQucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL2RhdGUtZnJvbS1ub3cucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL2RhdGUtZGlmZi1kdXJhdGlvbi5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvZGF0ZXMucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL2xhdGxvbmctZm9ybWF0LnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9oaWdobGlnaHQucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL251bWJlci1mb3JtYXQucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL2R1cmF0aW9uLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9maWxlLXNpemUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL3Byb3BlcnR5LnBpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvbWF0aC5waXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL2FycmF5cy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvbWFwcy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvc3RyaW5nLnBpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvdHJhbnNsYXRlLWNvbnRleHQucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL25nLWluaXQucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL2Zvcm0ucGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9jb2xvcnMucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL3R5cGVzLnBpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvbWFza2l0by5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvc2VsZWN0aW9uLnBpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvYmFkZ2UucGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9odG1sLnBpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvZGlzcGxheS13aXRoLnBpcGUnO1xuXG4vLyBTaGFyZWQgc2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc2VydmljZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9hdWRpby9hdWRpbyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2ZpbGUvZmlsZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvaW1hZ2UvaW1hZ2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcy9tZW1vcnktZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcy9wcm9ncmVzcy1iYXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3NlcnZpY2VzL3RyYW5zbGF0ZS1jb250ZXh0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcy9qb2IudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zdG9yYWdlL3N0b3JhZ2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3N0b3JhZ2Uvc3RvcmFnZS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3N0b3JhZ2Uvc3RvcmFnZS1leHBsb3Jlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zdG9yYWdlL3N0b3JhZ2UtZXhwbG9yZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdmFsaWRhdG9yL2Zvcm0tZXJyb3ItYWRhcHRlci5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2RlYnVnL2RlYnVnLXNlcnZpY2UuY2xhc3MnO1xuXG4vLyBTaGFyZWQgb3RoZXJcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9kYXRlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2Z1bmN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3JlZ2V4cHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2Zvcm1zJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9ldmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9hbGVydHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9wbGF0Zm9ybXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9nZW9sb2NhdGlvbi9nZW9sb2NhdGlvbi51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2ZpbGUvZmlsZS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2ZpbGUvY3N2LnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZmlsZS9pbWFnZXMudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9maWxlL2pzb24udXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9maWxlL3VyaS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2hvdGtleXMvc2hhcmVkLWhvdGtleXMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvaG90a2V5cy9ob3RrZXlzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9ob3RrZXlzL2RpYWxvZy9ob3RrZXlzLWRpYWxvZy5jb21wb25lbnQnO1xuZXhwb3J0IHtcbiAgQ29sb3IsXG4gIENvbG9yTmFtZSxcbiAgQ29sb3JTY2FsZSxcbiAgQ29sb3JTY2FsZUxlZ2VuZCxcbiAgQ29sb3JTY2FsZU9wdGlvbnMsXG4gIENvbG9yR3JhZGllbnRPcHRpb25zLFxuICBDb2xvclNjYWxlTGVnZW5kSXRlbSxcbn0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9ncmFwaC9ncmFwaC1jb2xvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9ncmFwaC9jb2xvcnMudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9nZXN0dXJlL2dlc3R1cmUtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZ2VzdHVyZS9oYW1tZXIudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC92YWxpZGF0b3IvdmFsaWRhdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3ZhbGlkYXRvci9mb3JtLWVycm9yLWFkYXB0ZXIuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL2xhdGxvbmcudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9kZWJ1Zy9kZWJ1Zy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9kZWJ1Zy9kZWJ1Zy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9uYW1lZC1maWx0ZXIvbmFtZWQtZmlsdGVyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL25hbWVkLWZpbHRlci9uYW1lZC1maWx0ZXIubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9uYW1lZC1maWx0ZXIvbmFtZWQtZmlsdGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9uYW1lZC1maWx0ZXIvbmFtZWQtZmlsdGVyLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbi8vIENvcmVcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2NvcmUubW9kdWxlJztcblxuLy8gQ29yZSBtb2RlbFxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC90b2tlbi5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9jb25maWcubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvZGVwYXJ0bWVudC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvdHJlZS1pdGVtLWVudGl0eS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9maWx0ZXIubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvaGlzdG9yeS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9tb2RlbC5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL3BlZXIubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvcGVyc29uLm1vZGVsJztcbmV4cG9ydCB7XG4gIElSZWZlcmVudGlhbFJlZixcbiAgUmVmZXJlbnRpYWxSZWYsXG4gIEJhc2VSZWZlcmVudGlhbCxcbiAgUmVmZXJlbnRpYWwsXG4gIFJlZmVyZW50aWFsVXRpbHMsXG4gIFJlZmVyZW50aWFsQXNPYmplY3RPcHRpb25zLFxuICByZWZlcmVudGlhbFRvU3RyaW5nLFxuICByZWZlcmVudGlhbHNUb1N0cmluZyxcbiAgSVN0YXR1cyxcbiAgU3RhdHVzTGlzdCxcbiAgU3RhdHVzQnlJZCxcbiAgTUlOSUZZX0VOVElUWV9GT1JfTE9DQUxfU1RPUkFHRSxcbiAgTUlOSUZZX0VOVElUWV9GT1JfUE9ELFxufSBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9yZWZlcmVudGlhbC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5cbi8vIEdyYXBoUUxcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2dyYXBocWwvZ3JhcGhxbC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuXG4vLyBDb3JlIHBpcGVzXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9waXBlcy9hY2NvdW50LnBpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3BpcGVzL2RlcGFydG1lbnQtdG8tc3RyaW5nLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvcGlwZXMvcGVyc29uLXRvLXN0cmluZy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3BpcGVzL3VzYWdlLW1vZGUucGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvcGlwZXMvcmVmZXJlbnRpYWwtdG8tc3RyaW5nLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvcGlwZXMvcGlwZXMubW9kdWxlJztcblxuLy8gQ29yZSBzZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvYmFzZTU4JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2Vycm9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmV4cG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY3J5cHRvLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvYXV0aC1ndWFyZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2Jhc2UtZ3JhcGhxbC1zZXJ2aWNlLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2Jhc2UtZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvc3RvcmFnZS9lbnRpdGllcy1zdG9yYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvc3RvcmFnZS9lbnRpdHktc3RvcmUuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvdmFsaWRhdG9yL2Jhc2UudmFsaWRhdG9yLmNsYXNzJztcblxuLy8gQ29yZSBjb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL2Zvcm0uY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9mb3JtLnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vZm9ybS1jb250YWluZXIuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9mb3JtLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL2J1dHRvbnMvZm9ybS1idXR0b25zLWJhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9idXR0b25zL2Zvcm0tYnV0dG9ucy1iYXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vZW50aXR5L2VkaXRvci5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS90YWItZWRpdG9yLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vZW50aXR5L2VudGl0eS1lZGl0b3IuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9lbnRpdHkvZW50aXR5LWVkaXRvci1tb2RhbC5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS9lbnRpdHktbWV0YWRhdGEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vZW50aXR5L2VudGl0eS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9saXN0L2xpc3QuZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL2xpc3QvbGlzdC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy50YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS90ZXh0LXBvcG92ZXIvdGV4dC1wb3BvdmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL3RleHQtcG9wb3Zlci90ZXh0LXBvcG92ZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vYXJyYXkvZm9ybS1hcnJheSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS90YWJsZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS90YWJsZS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS9hc3luYy10YWJsZS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS90YWJsZS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS90YWJsZS5waXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS90YWJsZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvdGFibGUvbWVtb3J5LXRhYmxlLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2UuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvdGFibGUvZW50aXRpZXMtYXN5bmMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS90YWJsZS1zZWxlY3QtY29sdW1ucy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvdGFibGUvY29sdW1uL2FjdGlvbnMtY29sdW1uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS9jb2x1bW4vbmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS9jb2x1bW4vcm93LWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9pY29uL2ljb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2ljb24vaWNvbi5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvaG9tZS9ob21lJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2hvbWUvaG9tZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2V0dGluZ3Mvc2V0dGluZ3MucGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXR0aW5ncy9zZXR0aW5ncy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvYWNjb3VudC9hY2NvdW50LnBhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvYWNjb3VudC9hY2NvdW50Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hY2NvdW50L2FjY291bnQucGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hY2NvdW50L3Rva2VuLnRhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2FjY291bnQvbmV3LXRva2VuLmZvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvYWNjb3VudC9uZXctdG9rZW4ubW9kYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvYWNjb3VudC9wYXNzd29yZC9jaGFuZ2UtcGFzc3dvcmQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2FjY291bnQvcGFzc3dvcmQvY2hhbmdlLXBhc3N3b3JkLmZvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvYWNjb3VudC9wYXNzd29yZC9jaGFuZ2UtcGFzc3dvcmQucGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hdXRoL2F1dGguZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hdXRoL2F1dGgubW9kYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvYXV0aC9hdXRoLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hdXRoL3Jlc2V0LXBhc3N3b3JkLm1vZGFsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3JlZ2lzdGVyL3JlZ2lzdGVyLWNvbmZpcm0ucGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9yZWdpc3Rlci9yZWdpc3Rlci5mb3JtJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3JlZ2lzdGVyL3JlZ2lzdGVyLm1vZGFsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3JlZ2lzdGVyL3JlZ2lzdGVyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hYm91dC9hYm91dC5tb2RhbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hYm91dC9hYm91dC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvcGVlci9zZWxlY3QtcGVlci5tb2RhbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9wZWVyL3NlbGVjdC1wZWVyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9pbnN0YWxsL2luc3RhbGwtdXBncmFkZS1jYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9pbnN0YWxsL2luc3RhbGwtdXBncmFkZS1jYXJkLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9tZW51L21lbnUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9tZW51L21lbnUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL21lbnUvc3ViLW1lbnUtdGFiLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9vZmZsaW5lL3VwZGF0ZS1vZmZsaW5lLW1vZGUtY2FyZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvb2ZmbGluZS91cGRhdGUtb2ZmbGluZS1tb2RlLWNhcmQubW9kdWxlJztcblxuLy8gQ29yZSBkZWNvcmF0b3JcbmV4cG9ydCB7IEVudGl0eUNsYXNzLCBFbnRpdHlDbGFzc2VzIH0gZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5LmRlY29yYXRvcnMnO1xuXG4vLyBTb2NpYWxcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvc29jaWFsLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL3NvY2lhbC5lcnJvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L3VzZXItZXZlbnQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvdXNlci1ldmVudC91c2VyLWV2ZW50Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvdXNlci1ldmVudC91c2VyLWV2ZW50LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L25vdGlmaWNhdGlvbi91c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi5pY29uJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvdXNlci1ldmVudC9ub3RpZmljYXRpb24vdXNlci1ldmVudC1ub3RpZmljYXRpb24ubGlzdCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL2pvYi9qb2IubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvam9iL3Byb2dyZXNzaW9uL2pvYi1wcm9ncmVzc2lvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvam9iL3Byb2dyZXNzaW9uL2pvYi1wcm9ncmVzc2lvbi5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL2pvYi9wcm9ncmVzc2lvbi9qb2ItcHJvZ3Jlc3Npb24uaWNvbic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL2pvYi9wcm9ncmVzc2lvbi9qb2ItcHJvZ3Jlc3Npb24ubGlzdCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL2pvYi9wcm9ncmVzc2lvbi9qb2ItcHJvZ3Jlc3Npb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvbWVzc2FnZS9tZXNzYWdlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL21lc3NhZ2UvbWVzc2FnZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL21lc3NhZ2UvbWVzc2FnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvbWVzc2FnZS9tZXNzYWdlLmZvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC9tZXNzYWdlL21lc3NhZ2UubW9kYWwnO1xuXG4vLyBBZG1pblxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2FkbWluL2FkbWluLm1vZHVsZSc7XG5leHBvcnQgeyBBZG1pblJvdXRpbmdNb2R1bGUgfSBmcm9tICcuL3NyYy9hcHAvYWRtaW4vYWRtaW4tcm91dGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2FkbWluL3NlcnZpY2VzL2ZpbHRlci9wZXJzb24uZmlsdGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9hZG1pbi9zZXJ2aWNlcy92YWxpZGF0b3IvcGVyc29uLnZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvYWRtaW4vc2VydmljZXMvcGVyc29uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2FkbWluL3VzZXJzL3VzZXJzLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvYWRtaW4vdXNlcnMvdXNlcnMnO1xuXG4vLyBTaGFyZWQgdGVzdHMgcGFnZVxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC90ZXN0aW5nL3Rlc3RzLnBhZ2UnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRlc3RpbmcgbW9kdWxlIGFuZCBjb21wb25lbnRzXG4vL1xuLy8gVE9ETzogdG8gcmVtb3ZlIHdoZW4gbmd4LWNvbXBvbmVudHMgd2lsbCBiZSB3ZWxsIHRlc3RlZFxuLy8gKG9yIGV4cG9ydCBpbnRvIGEgc3ViIHBhY2thZ2UsIGxpa2UgJ0BzdW1hcmlzLW5ldC9uZ3gtY29tcG9uZW50cy90ZXN0aW5nJylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBTaGFyZWQgbWF0ZXJpYWwgdGVzdFxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC50ZXN0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS90ZXN0aW5nL2F1dG9jb21wbGV0ZS50ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvbGF0bG9uZy90ZXN0aW5nL2xhdGxvbmcudGVzdCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL3N3aXBlL3Rlc3Rpbmcvc3dpcGUudGVzdCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2RhdGV0aW1lL3Rlc3RpbmcvbWF0LWRhdGUtdGltZS50ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZGF0ZXRpbWUvdGVzdGluZy9tYXQtZGF0ZS50ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZGF0ZXRpbWUvdGVzdGluZy9tYXQtZGF0ZXNob3J0LnRlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9jaGlwcy90ZXN0aW5nL2NoaXBzLnRlc3QnO1xuLy9leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL251bXBhZC90ZXN0aW5nL251bXBhZC50ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvdGV4dC90ZXN0aW5nL3RleHQtZm9ybS50ZXN0aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdGVzdGluZy9vYnNlcnZhYmxlLnRlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9iYWRnZS9iYWRnZS50ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvdGVzdGluZy9jb21tb24udGVzdCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vdGVzdGluZy9ib29sZWFuLnRlc3QucGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2R1cmF0aW9uL3Rlc3RpbmcvbWF0LWR1cmF0aW9uLnRlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC90ZXN0aW5nL21hc2tpdG8udGVzdCc7XG5cbi8vIFNoYXJlZCBvdGhlciB0ZXN0XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3NoYXJlZC50ZXN0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3Rlc3RpbmcvdXBsb2FkLWZpbGUudGVzdGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3Rlc3RpbmcvdXBsb2FkLWZpbGUudGVzdGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC90b2FzdC90b2FzdC50ZXN0aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdG9hc3QvdG9hc3QudGVzdGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9pbWFnZS9nYWxsZXJ5L3Rlc3RpbmcvZ2FsbGVyeS5zZXJ2aWNlLnRlc3RpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9pbWFnZS9nYWxsZXJ5L3Rlc3RpbmcvZ2FsbGVyeS50ZXN0aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvaW1hZ2UvZ2FsbGVyeS90ZXN0aW5nL2dhbGxlcnkudGVzdGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zdG9yYWdlL3N0b3JhZ2UtZXhwbG9yZXIudGVzdGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zdG9yYWdlL3N0b3JhZ2UtZXhwbG9yZXIudGVzdGluZy1yb3V0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2F1ZGlvL2F1ZGlvLnRlc3RpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9hdWRpby9hdWRpby50ZXN0aW5nLm1vZHVsZSc7XG5cbi8vIENvcmUgdGVzdGluZ1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvY29yZS50ZXN0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy90ZXN0aW5nL3JlZmVyZW50aWFsLWZpbHRlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy90ZXN0aW5nL3JlZmVyZW50aWFsLnZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS90ZXN0aW5nL3RhYmxlLnRlc3RpbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL3Rlc3RpbmcvdGFibGUudGVzdGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS90ZXN0aW5nL3RhYmxlMi50ZXN0aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vdGV4dC1wb3BvdmVyL3Rlc3RpbmcvdGV4dC1wb3BvdmVyLnRlc3RpbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vdGV4dC1wb3BvdmVyL3Rlc3RpbmcvdGV4dC1wb3BvdmVyLnRlc3RpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9wcm9wZXJ0aWVzL3Rlc3RpbmcvcHJvcGVydGllcy1mb3JtLnRlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9wcm9wZXJ0aWVzL3Rlc3RpbmcvcHJvcGVydGllcy1mb3JtLnRlc3RpbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL21lbnUvdGVzdGluZy9tZW51LnRlc3RpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvbWVudS90ZXN0aW5nL21lbnUudGVzdGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvbWVudS90ZXN0aW5nL21lbnUtb3RoZXIudGVzdGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL2FycmF5L3Rlc3RpbmcvZm9ybS1hcnJheS50ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vYXJyYXkvdGVzdGluZy9mb3JtLWFycmF5LXRlc3QubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbmFtZWQtZmlsdGVyL3Rlc3RpbmcvbmFtZWQtZmlsdGVyLXNlbGVjdG9yLnRlc3RpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9uYW1lZC1maWx0ZXIvdGVzdGluZy9uYW1lZC1maWx0ZXIudGVzdGluZy5tb2R1bGUnO1xuXG4vLyBTb2NpYWwgdGVzdGluZ1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC9zb2NpYWwudGVzdGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L3Rlc3RpbmcvdXNlci1ldmVudC50ZXN0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL3VzZXItZXZlbnQvdGVzdGluZy91c2VyLWV2ZW50LnRlc3RpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L3Rlc3RpbmcvdXNlci1ldmVudC50ZXN0aW5nLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC9qb2IvdGVzdGluZy9qb2IudGVzdGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC9qb2IvdGVzdGluZy9qb2ItcHJvZ3Jlc3Npb24udGVzdGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL2pvYi90ZXN0aW5nL2pvYi1wcm9ncmVzc2lvbi50ZXN0aW5nLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvdGFibGUvdGVzdGluZy90YWJsZS12YWxpZGF0b3Iuc2VydmljZSc7XG4iXX0=
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUVkLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx1Q0FBdUMsQ0FBQztBQUV0RCxTQUFTO0FBQ1QsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxRSxjQUFjLCtDQUErQyxDQUFDO0FBRTlELGtCQUFrQjtBQUNsQixjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixjQUFjLHFFQUFxRSxDQUFDO0FBQ3BGLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxxRUFBcUUsQ0FBQztBQUNwRixjQUFjLG9FQUFvRSxDQUFDO0FBQ25GLGNBQWMsOENBQThDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQy9FLGNBQWMsNkRBQTZELENBQUM7QUFDNUUsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0JBQWdC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ckYsY0FBYywrREFBK0QsQ0FBQztBQUM5RSxjQUFjLDZEQUE2RCxDQUFDO0FBQzVFLGNBQWMsdUVBQXVFLENBQUM7QUFDdEYsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLGNBQWMscUVBQXFFLENBQUM7QUFDcEYsY0FBYyxtRUFBbUUsQ0FBQztBQUVsRixpQkFBaUI7QUFDakIsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsd0RBQXdELENBQUM7QUFDdkUsY0FBYyxnRUFBZ0UsQ0FBQztBQUMvRSxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyw4REFBOEQsQ0FBQztBQUM3RSxjQUFjLHNEQUFzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRW52aXJvbm1lbnRcblxuZXhwb3J0ICogZnJvbSAnLi9zcmMvZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5sb2FkZXInO1xuXG4vLyBTaGFyZWRcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc2hhcmVkLm1vZHVsZSc7XG5leHBvcnQgeyBTaGFyZWRSb3V0aW5nTW9kdWxlIH0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zaGFyZWQtcm91dGluZy5tb2R1bGUnO1xuZXhwb3J0IHsgUnhTdGF0ZU1vZHVsZSB9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcngtc3RhdGUvcngtc3RhdGUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcngtc3RhdGUvcngtc3RhdGUuZGVjb3JhdG9ycyc7XG5cbi8vIFNoYXJlZCBtYXRlcmlhbFxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5hbmltYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYm9vbGVhbi9ib29sZWFuLm1vZHVsZSc7XG5leHBvcnQgeyBNYXRCb29sZWFuRmllbGQgfSBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwuYm9vbGVhbic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2NoaXBzL2NoaXBzLm1vZHVsZSc7XG5leHBvcnQgeyBNYXRDaGlwc0ZpZWxkIH0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9jaGlwcy9tYXRlcmlhbC5jaGlwcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL3BhZ2luYXRvci9tYXRlcmlhbC5wYWdpbmF0b3ItaTE4bic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL3N0ZXBwZXIvbWF0ZXJpYWwuc3RlcHBlci1pMThuJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZGF0ZXRpbWUvZGF0ZXRpbWUubW9kdWxlJztcbmV4cG9ydCB7IE1hdERhdGVTaG9ydCB9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZGF0ZXRpbWUvbWF0ZXJpYWwuZGF0ZXNob3J0JztcbmV4cG9ydCB7IE1hdERhdGVUaW1lIH0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRldGltZSc7XG5leHBvcnQgeyBNYXREYXRlIH0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRlJztcbmV4cG9ydCB7IE1hdExhdExvbmdGaWVsZCB9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvbGF0bG9uZy9tYXRlcmlhbC5sYXRsb25nJztcbmV4cG9ydCB7IE1hdExhdExvbmdGaWVsZDIgfSBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZzInO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL21hdGVyaWFsLmxhdGxvbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZHVyYXRpb24vZHVyYXRpb24ubW9kdWxlJztcbmV4cG9ydCB7IE1hdER1cmF0aW9uIH0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kdXJhdGlvbi9tYXRlcmlhbC5kdXJhdGlvbic7XG4vLyBleHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL251bXBhZC9udW1wYWQubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvbnVtcGFkL251bXBhZC5kaXJlY3RpdmUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9udW1wYWQvbnVtcGFkLmFwcGVuZC10by1pbnB1dC5kaXJlY3RpdmUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9udW1wYWQvbnVtcGFkLmNvbnRhaW5lcic7XG4vLyBleHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL251bXBhZC9udW1wYWQuY29udGVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL251bXBhZC9udW1wYWQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvc3dpcGUvc3dpcGUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvc3dpcGUvbWF0ZXJpYWwuc3dpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9iYWRnZS9iYWRnZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9iYWRnZS9iYWRnZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC90ZXh0L3RleHQtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC90ZXh0L3RleHQtZm9ybS5tb2R1bGUnO1xuXG4vLyBTaGFyZWQgY29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9pbnB1dHMnO1xuZXhwb3J0IHsgQXBwRm9ybUZpZWxkIH0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9mb3JtL2ZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2Zvcm0vbG9hZGluZy1zcGlubmVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvdG9vbGJhcic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvbW9kYWwtdG9vbGJhcic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvdG9vbGJhci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9pbnRlcmNlcHRvcnMvcHJvZ2Vzcy5pbnRlcmNlcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2hlbHAvaGVscC5tb2RhbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2d1YXJkL2NvbXBvbmVudC1kaXJ0eS5ndWFyZCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3VwbG9hZC1maWxlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdXBsb2FkLWZpbGUvdXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC91cGxvYWQtZmlsZS91cGxvYWQtZmlsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9pbWFnZS9nYWxsZXJ5L2ltYWdlLWdhbGxlcnkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvaW1hZ2UvZ2FsbGVyeS9pbWFnZS1nYWxsZXJ5Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2ltYWdlL2ltYWdlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvaW1hZ2UvaW1hZ2UubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc3RvcmFnZS9zdG9yYWdlLWV4cGxvcmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3N0b3JhZ2Uvc3RvcmFnZS1leHBsb3Jlci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9sb2dnaW5nL2xvZy1sZXZlbC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2xvZ2dpbmcvbG9nZ2VyLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbG9nZ2luZy9sb2dnaW5nLXNlcnZpY2UuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9sb2dnaW5nL2xvZ2dpbmctc2VydmljZS5jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9sb2dnaW5nL2xvZ2dpbmctc2VydmljZS5tb2R1bGUnO1xuXG4vLyBTaGFyZWQgZGlyZWN0aXZlc1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9kaXJlY3RpdmVzL2RpcmVjdGl2ZXMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZGlyZWN0aXZlcy9hdXRvZm9jdXMuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZGlyZWN0aXZlcy9uZy12YXIuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZGlyZWN0aXZlcy9kcmFnLWFuZC1kcm9wLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvYXV0b3RpdGxlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2RpcmVjdGl2ZXMvcmVzaXphYmxlL3Jlc2l6YWJsZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9kaXJlY3RpdmVzL3Jlc2l6YWJsZS9yZXNpemFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZGlyZWN0aXZlcy9yZXNpemFibGUvcmVzaXphYmxlLm1vZHVsZSc7XG5cbi8vIFNoYXJlZCBwaXBlc1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9waXBlcy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9kYXRlLWZvcm1hdC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvZGF0ZS1mcm9tLW5vdy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvZGF0ZS1kaWZmLWR1cmF0aW9uLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9kYXRlcy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvbGF0bG9uZy1mb3JtYXQucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL2hpZ2hsaWdodC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvbnVtYmVyLWZvcm1hdC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvZHVyYXRpb24ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL2ZpbGUtc2l6ZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvcHJvcGVydHkucGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9tYXRoLnBpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvYXJyYXlzLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9tYXBzLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9zdHJpbmcucGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy90cmFuc2xhdGUtY29udGV4dC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvbmctaW5pdC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvZm9ybS5waXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL2NvbG9ycy5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcGlwZXMvdHlwZXMucGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9tYXNraXRvLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9zZWxlY3Rpb24ucGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9iYWRnZS5waXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BpcGVzL2h0bWwucGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9kaXNwbGF5LXdpdGgucGlwZSc7XG5cbi8vIFNoYXJlZCBzZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2F1ZGlvL2F1ZGlvJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZmlsZS9maWxlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9pbWFnZS9pbWFnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3NlcnZpY2VzL21lbW9yeS1lbnRpdHktc2VydmljZS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3NlcnZpY2VzL3Byb2dyZXNzLWJhci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc2VydmljZXMvdHJhbnNsYXRlLWNvbnRleHQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3NlcnZpY2VzL2pvYi51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3N0b3JhZ2Uvc3RvcmFnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc3RvcmFnZS9zdG9yYWdlLnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc3RvcmFnZS9zdG9yYWdlLWV4cGxvcmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3N0b3JhZ2Uvc3RvcmFnZS1leHBsb3Jlci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC92YWxpZGF0b3IvZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZGVidWcvZGVidWctc2VydmljZS5jbGFzcyc7XG5cbi8vIFNoYXJlZCBvdGhlclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2RhdGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZnVuY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvcmVnZXhwcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZm9ybXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2V2ZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2FsZXJ0cyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3BsYXRmb3Jtcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2dlb2xvY2F0aW9uL2dlb2xvY2F0aW9uLnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZmlsZS9maWxlLnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvZmlsZS9jc3YudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9maWxlL2ltYWdlcy51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2ZpbGUvanNvbi51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2ZpbGUvdXJpLnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvaG90a2V5cy9zaGFyZWQtaG90a2V5cy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9ob3RrZXlzL2hvdGtleXMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2hvdGtleXMvZGlhbG9nL2hvdGtleXMtZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQge1xuICBDb2xvcixcbiAgQ29sb3JOYW1lLFxuICBDb2xvclNjYWxlLFxuICBDb2xvclNjYWxlTGVnZW5kLFxuICBDb2xvclNjYWxlT3B0aW9ucyxcbiAgQ29sb3JHcmFkaWVudE9wdGlvbnMsXG4gIENvbG9yU2NhbGVMZWdlbmRJdGVtLFxufSBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2dyYXBoL2dyYXBoLWNvbG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2dyYXBoL2NvbG9ycy51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2dlc3R1cmUvZ2VzdHVyZS1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9nZXN0dXJlL2hhbW1lci51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdmFsaWRhdG9yL2Zvcm0tZXJyb3ItYWRhcHRlci5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbGF0bG9uZy51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2RlYnVnL2RlYnVnLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2RlYnVnL2RlYnVnLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL25hbWVkLWZpbHRlci9uYW1lZC1maWx0ZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbmFtZWQtZmlsdGVyL25hbWVkLWZpbHRlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL25hbWVkLWZpbHRlci9uYW1lZC1maWx0ZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL25hbWVkLWZpbHRlci9uYW1lZC1maWx0ZXItc2VsZWN0b3IuY29tcG9uZW50JztcblxuLy8gQ29yZVxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvY29yZS5tb2R1bGUnO1xuXG4vLyBDb3JlIG1vZGVsXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL3Rva2VuLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9kZXBhcnRtZW50Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC90cmVlLWl0ZW0tZW50aXR5Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL2ZpbHRlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9oaXN0b3J5Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL21vZGVsLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvcGVlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9wZXJzb24ubW9kZWwnO1xuZXhwb3J0IHtcbiAgSVJlZmVyZW50aWFsUmVmLFxuICBSZWZlcmVudGlhbFJlZixcbiAgQmFzZVJlZmVyZW50aWFsLFxuICBSZWZlcmVudGlhbCxcbiAgUmVmZXJlbnRpYWxVdGlscyxcbiAgUmVmZXJlbnRpYWxBc09iamVjdE9wdGlvbnMsXG4gIHJlZmVyZW50aWFsVG9TdHJpbmcsXG4gIHJlZmVyZW50aWFsc1RvU3RyaW5nLFxuICBJU3RhdHVzLFxuICBTdGF0dXNMaXN0LFxuICBTdGF0dXNCeUlkLFxuICBNSU5JRllfRU5USVRZX0ZPUl9MT0NBTF9TVE9SQUdFLFxuICBNSU5JRllfRU5USVRZX0ZPUl9QT0QsXG59IGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL3JlZmVyZW50aWFsLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL3NldHRpbmdzLm1vZGVsJztcblxuLy8gR3JhcGhRTFxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZ3JhcGhxbC9ncmFwaHFsLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5cbi8vIENvcmUgcGlwZXNcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3BpcGVzL2FjY291bnQucGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvcGlwZXMvZGVwYXJ0bWVudC10by1zdHJpbmcucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9waXBlcy9wZXJzb24tdG8tc3RyaW5nLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvcGlwZXMvdXNhZ2UtbW9kZS5waXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9waXBlcy9yZWZlcmVudGlhbC10by1zdHJpbmcucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9waXBlcy9waXBlcy5tb2R1bGUnO1xuXG4vLyBDb3JlIHNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9iYXNlNTgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvZXJyb3JzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuZXhwb3J0IHsgQ09SRV9DT05GSUdfT1BUSU9OUyB9IGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9jcnlwdG8uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9hdXRoLWd1YXJkLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvYmFzZS1lbnRpdHktc2VydmljZS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9zdG9yYWdlL2VudGl0aWVzLXN0b3JhZ2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9zdG9yYWdlL2VudGl0eS1zdG9yZS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy92YWxpZGF0b3IvYmFzZS52YWxpZGF0b3IuY2xhc3MnO1xuXG4vLyBDb3JlIGNvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vZm9ybS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL2Zvcm0udXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9mb3JtLWNvbnRhaW5lci5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL2Zvcm0ubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vYnV0dG9ucy9mb3JtLWJ1dHRvbnMtYmFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL2J1dHRvbnMvZm9ybS1idXR0b25zLWJhci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9lbnRpdHkvZWRpdG9yLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vZW50aXR5L3RhYi1lZGl0b3IuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9lbnRpdHkvZW50aXR5LWVkaXRvci5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS9lbnRpdHktZWRpdG9yLW1vZGFsLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vZW50aXR5L2VudGl0eS1tZXRhZGF0YS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9lbnRpdHkvZW50aXR5Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL2xpc3QvbGlzdC5mb3JtJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vbGlzdC9saXN0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvcHJvcGVydGllcy5mb3JtJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLnRhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL3RleHQtcG9wb3Zlci90ZXh0LXBvcG92ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vdGV4dC1wb3BvdmVyL3RleHQtcG9wb3Zlci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9hcnJheS9mb3JtLWFycmF5JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL3RhYmxlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL3RhYmxlLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL2FzeW5jLXRhYmxlLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL3RhYmxlLnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL3RhYmxlLnBpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL3RhYmxlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS9tZW1vcnktdGFibGUuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvdGFibGUvZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS9lbnRpdGllcy1hc3luYy10YWJsZS1kYXRhc291cmNlLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL3RhYmxlLXNlbGVjdC1jb2x1bW5zLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS9jb2x1bW4vYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL2NvbHVtbi9uYXYtYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL2NvbHVtbi9yb3ctZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2ljb24vaWNvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvaWNvbi9pY29uLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9ob21lL2hvbWUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvaG9tZS9ob21lLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXR0aW5ncy9zZXR0aW5ncy5wYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NldHRpbmdzL3NldHRpbmdzLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hY2NvdW50L2FjY291bnQucGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hY2NvdW50L2FjY291bnQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2FjY291bnQvYWNjb3VudC5wYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2FjY291bnQvdG9rZW4udGFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvYWNjb3VudC9uZXctdG9rZW4uZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hY2NvdW50L25ldy10b2tlbi5tb2RhbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hY2NvdW50L3Bhc3N3b3JkL2NoYW5nZS1wYXNzd29yZC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvYWNjb3VudC9wYXNzd29yZC9jaGFuZ2UtcGFzc3dvcmQuZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hY2NvdW50L3Bhc3N3b3JkL2NoYW5nZS1wYXNzd29yZC5wYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2F1dGgvYXV0aC5mb3JtJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2F1dGgvYXV0aC5tb2RhbCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9hdXRoL2F1dGgubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2F1dGgvcmVzZXQtcGFzc3dvcmQubW9kYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvcmVnaXN0ZXIvcmVnaXN0ZXItY29uZmlybS5wYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3JlZ2lzdGVyL3JlZ2lzdGVyLmZvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvcmVnaXN0ZXIvcmVnaXN0ZXIubW9kYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvcmVnaXN0ZXIvcmVnaXN0ZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Fib3V0L2Fib3V0Lm1vZGFsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Fib3V0L2Fib3V0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9wZWVyL3NlbGVjdC1wZWVyLm1vZGFsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3BlZXIvc2VsZWN0LXBlZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvbWVudS9zdWItbWVudS10YWIuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL29mZmxpbmUvdXBkYXRlLW9mZmxpbmUtbW9kZS1jYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9vZmZsaW5lL3VwZGF0ZS1vZmZsaW5lLW1vZGUtY2FyZC5tb2R1bGUnO1xuXG4vLyBDb3JlIGRlY29yYXRvclxuZXhwb3J0IHsgRW50aXR5Q2xhc3MsIEVudGl0eUNsYXNzZXMgfSBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkuZGVjb3JhdG9ycyc7XG5cbi8vIFNvY2lhbFxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC9zb2NpYWwubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvc29jaWFsLmVycm9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL3VzZXItZXZlbnQvdXNlci1ldmVudC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L3VzZXItZXZlbnQubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L3VzZXItZXZlbnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL3VzZXItZXZlbnQvbm90aWZpY2F0aW9uL3VzZXItZXZlbnQtbm90aWZpY2F0aW9uLmljb24nO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC91c2VyLWV2ZW50L25vdGlmaWNhdGlvbi91c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi5saXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvam9iL2pvYi5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC9qb2IvcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC9qb2IvcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvam9iL3Byb2dyZXNzaW9uL2pvYi1wcm9ncmVzc2lvbi5pY29uJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvam9iL3Byb2dyZXNzaW9uL2pvYi1wcm9ncmVzc2lvbi5saXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvam9iL3Byb2dyZXNzaW9uL2pvYi1wcm9ncmVzc2lvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC9tZXNzYWdlL21lc3NhZ2UubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvbWVzc2FnZS9tZXNzYWdlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvbWVzc2FnZS9tZXNzYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NvY2lhbC9tZXNzYWdlL21lc3NhZ2UuZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL21lc3NhZ2UvbWVzc2FnZS5tb2RhbCc7XG5cbi8vIEFkbWluXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvYWRtaW4vYWRtaW4ubW9kdWxlJztcbmV4cG9ydCB7IEFkbWluUm91dGluZ01vZHVsZSB9IGZyb20gJy4vc3JjL2FwcC9hZG1pbi9hZG1pbi1yb3V0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvYWRtaW4vc2VydmljZXMvZmlsdGVyL3BlcnNvbi5maWx0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2FkbWluL3NlcnZpY2VzL3ZhbGlkYXRvci9wZXJzb24udmFsaWRhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9hZG1pbi9zZXJ2aWNlcy9wZXJzb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvYWRtaW4vdXNlcnMvdXNlcnMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9hZG1pbi91c2Vycy91c2Vycyc7XG5cbi8vIFNoYXJlZCB0ZXN0cyBwYWdlXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3Rlc3RpbmcvdGVzdHMucGFnZSc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGVzdGluZyBtb2R1bGUgYW5kIGNvbXBvbmVudHNcbi8vXG4vLyBUT0RPOiB0byByZW1vdmUgd2hlbiBuZ3gtY29tcG9uZW50cyB3aWxsIGJlIHdlbGwgdGVzdGVkXG4vLyAob3IgZXhwb3J0IGludG8gYSBzdWIgcGFja2FnZSwgbGlrZSAnQHN1bWFyaXMtbmV0L25neC1jb21wb25lbnRzL3Rlc3RpbmcnKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNoYXJlZCBtYXRlcmlhbCB0ZXN0XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL21hdGVyaWFsLnRlc3RpbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL3Rlc3RpbmcvYXV0b2NvbXBsZXRlLnRlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL3Rlc3RpbmcvbGF0bG9uZy50ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvc3dpcGUvdGVzdGluZy9zd2lwZS50ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZGF0ZXRpbWUvdGVzdGluZy9tYXQtZGF0ZS10aW1lLnRlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS90ZXN0aW5nL21hdC1kYXRlLnRlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS90ZXN0aW5nL21hdC1kYXRlc2hvcnQudGVzdCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2NoaXBzL3Rlc3RpbmcvY2hpcHMudGVzdCc7XG4vL2V4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvbnVtcGFkL3Rlc3RpbmcvbnVtcGFkLnRlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC90ZXh0L3Rlc3RpbmcvdGV4dC1mb3JtLnRlc3RpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC90ZXN0aW5nL29ic2VydmFibGUudGVzdCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2JhZGdlL2JhZGdlLnRlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC90ZXN0aW5nL2NvbW1vbi50ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYm9vbGVhbi90ZXN0aW5nL2Jvb2xlYW4udGVzdC5wYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvZHVyYXRpb24vdGVzdGluZy9tYXQtZHVyYXRpb24udGVzdCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3Rlc3RpbmcvbWFza2l0by50ZXN0JztcblxuLy8gU2hhcmVkIG90aGVyIHRlc3RcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc2hhcmVkLnRlc3RpbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdXBsb2FkLWZpbGUvdGVzdGluZy91cGxvYWQtZmlsZS50ZXN0aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdXBsb2FkLWZpbGUvdGVzdGluZy91cGxvYWQtZmlsZS50ZXN0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3RvYXN0L3RvYXN0LnRlc3RpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC90b2FzdC90b2FzdC50ZXN0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2ltYWdlL2dhbGxlcnkvdGVzdGluZy9nYWxsZXJ5LnNlcnZpY2UudGVzdGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2ltYWdlL2dhbGxlcnkvdGVzdGluZy9nYWxsZXJ5LnRlc3RpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9pbWFnZS9nYWxsZXJ5L3Rlc3RpbmcvZ2FsbGVyeS50ZXN0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3N0b3JhZ2Uvc3RvcmFnZS1leHBsb3Jlci50ZXN0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL3N0b3JhZ2Uvc3RvcmFnZS1leHBsb3Jlci50ZXN0aW5nLXJvdXRpbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvYXVkaW8vYXVkaW8udGVzdGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL2F1ZGlvL2F1ZGlvLnRlc3RpbmcubW9kdWxlJztcblxuLy8gQ29yZSB0ZXN0aW5nXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9jb3JlLnRlc3RpbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3Rlc3RpbmcvcmVmZXJlbnRpYWwtZmlsdGVyLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3Rlc3RpbmcvcmVmZXJlbnRpYWwudmFsaWRhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL3Rlc3RpbmcvdGFibGUudGVzdGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvdGFibGUvdGVzdGluZy90YWJsZS50ZXN0aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL3RhYmxlL3Rlc3RpbmcvdGFibGUyLnRlc3RpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS90ZXh0LXBvcG92ZXIvdGVzdGluZy90ZXh0LXBvcG92ZXIudGVzdGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS90ZXh0LXBvcG92ZXIvdGVzdGluZy90ZXh0LXBvcG92ZXIudGVzdGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvdGVzdGluZy9wcm9wZXJ0aWVzLWZvcm0udGVzdCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9mb3JtL3Byb3BlcnRpZXMvdGVzdGluZy9wcm9wZXJ0aWVzLWZvcm0udGVzdGluZy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvbWVudS90ZXN0aW5nL21lbnUudGVzdGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9tZW51L3Rlc3RpbmcvbWVudS50ZXN0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS9tZW51L3Rlc3RpbmcvbWVudS1vdGhlci50ZXN0aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9jb3JlL2Zvcm0vYXJyYXkvdGVzdGluZy9mb3JtLWFycmF5LnRlc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2NvcmUvZm9ybS9hcnJheS90ZXN0aW5nL2Zvcm0tYXJyYXktdGVzdC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9uYW1lZC1maWx0ZXIvdGVzdGluZy9uYW1lZC1maWx0ZXItc2VsZWN0b3IudGVzdGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL25hbWVkLWZpbHRlci90ZXN0aW5nL25hbWVkLWZpbHRlci50ZXN0aW5nLm1vZHVsZSc7XG5cbi8vIFNvY2lhbCB0ZXN0aW5nXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL3NvY2lhbC50ZXN0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL3VzZXItZXZlbnQvdGVzdGluZy91c2VyLWV2ZW50LnRlc3RpbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvdXNlci1ldmVudC90ZXN0aW5nL3VzZXItZXZlbnQudGVzdGluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL3VzZXItZXZlbnQvdGVzdGluZy91c2VyLWV2ZW50LnRlc3Rpbmcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL2pvYi90ZXN0aW5nL2pvYi50ZXN0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvc29jaWFsL2pvYi90ZXN0aW5nL2pvYi1wcm9ncmVzc2lvbi50ZXN0aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9zb2NpYWwvam9iL3Rlc3Rpbmcvam9iLXByb2dyZXNzaW9uLnRlc3Rpbmcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvY29yZS90YWJsZS90ZXN0aW5nL3RhYmxlLXZhbGlkYXRvci5zZXJ2aWNlJztcbiJdfQ==
@@ -36,7 +36,7 @@ import * as i17 from "@angular/material/core";
36
36
  import * as i18 from "@angular/material/badge";
37
37
  import * as i19 from "@angular/cdk/a11y";
38
38
  import * as i20 from "../../../shared/material/autocomplete/material.autocomplete";
39
- import * as i21 from "../../../shared/material/latlong/material.latlong";
39
+ import * as i21 from "../../../shared/material/latlong/material.latlong2";
40
40
  import * as i22 from "../../../shared/material/datetime/material.datetime";
41
41
  import * as i23 from "../../../shared/material/boolean/material.boolean";
42
42
  import * as i24 from "../../../shared/directives/autofocus.directive";
@@ -297,7 +297,7 @@ export class TableTestPage extends AppTable {
297
297
  provide: AppTable,
298
298
  useExisting: forwardRef(() => TableTestPage),
299
299
  },
300
- ], viewQueries: [{ propertyName: "filterExpansionPanel", first: true, predicate: MatExpansionPanel, descendants: true, static: true }, { propertyName: "infiniteScroll", first: true, predicate: IonInfiniteScroll, descendants: true }], usesInheritance: true, ngImport: i0, template: "<app-toolbar\n color=\"primary\"\n [canGoBack]=\"true\"\n [hasValidate]=\"(loadingSubject | async) !== true && (dirtySubject | async) === true\"\n (onValidate)=\"save()\"\n [backHref]=\"'/testing'\"\n>\n <ion-title>Table (click to edit)</ion-title>\n <ion-buttons slot=\"end\">\n @if (selection | isEmptySelection) {\n <input matInput type=\"number\" step=\"1\" style=\"color: black; width: 50px\" [(ngModel)]=\"rowHeight\" />\n\n <!-- Add -->\n <button mat-icon-button *ngIf=\"canEdit && !mobile\" [title]=\"'COMMON.BTN_ADD' | translate\" (click)=\"addRow()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- reset filter -->\n <button mat-icon-button (click)=\"resetFilter()\" *ngIf=\"filterCriteriaCount\">\n <mat-icon color=\"accent\">filter_list_alt</mat-icon>\n <mat-icon class=\"icon-secondary\" style=\"left: 16px; top: 5px; font-weight: bold\">close</mat-icon>\n </button>\n\n <!-- show filter -->\n <button mat-icon-button (click)=\"filterExpansionPanel.toggle()\">\n <mat-icon\n *ngIf=\"filterCriteriaCount; else emptyFilter\"\n [matBadge]=\"filterCriteriaCount\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n aria-hidden=\"false\"\n >\n filter_list_alt\n </mat-icon>\n <ng-template #emptyFilter>\n <mat-icon>filter_list_alt</mat-icon>\n </ng-template>\n </button>\n\n <!-- save -->\n <button mat-icon-button *ngIf=\"mobile\" [disabled]=\"(dirtySubject | async) !== true\" (click)=\"save()\">\n <mat-icon>save</mat-icon>\n </button>\n\n <!-- start/stop timer to auto-load data -->\n <ion-button *ngIf=\"!timer\" (click)=\"startTimer()\">Start reload</ion-button>\n <ion-button *ngIf=\"timer\" (click)=\"stopTimer()\" color=\"accent\">Stop reload</ion-button>\n } @else {\n <!-- if row selection -->\n <!-- delete -->\n <button\n mat-icon-button\n *ngIf=\"canEdit\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"deleteSelection($event)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <!-- duplicate -->\n <button\n mat-icon-button\n *ngIf=\"canEdit && selection.selected | isArrayLength: { equals: 1 }\"\n [title]=\"'COMMON.BTN_DUPLICATE' | translate\"\n (click)=\"duplicateRow($event, selection.selected[0])\"\n >\n <mat-icon>file_copy</mat-icon>\n </button>\n }\n </ion-buttons>\n</app-toolbar>\n<ion-content class=\"ion-no-padding\">\n <ion-refresher slot=\"fixed\" *ngIf=\"mobile\" (ionRefresh)=\"doRefresh($event)\">\n <ion-refresher-content></ion-refresher-content>\n </ion-refresher>\n\n <!-- error -->\n <ion-item *ngIf=\"mobile && error\" lines=\"none\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n\n <!-- search -->\n <mat-expansion-panel\n #filterExpansionPanel\n class=\"filter-panel\"\n [class.filter-panel-floating]=\"filterPanelFloating\"\n [class.filter-panel-pinned]=\"!filterPanelFloating\"\n >\n <form class=\"form-container ion-padding-top\" [formGroup]=\"filterForm\" (ngSubmit)=\"applyFilterAndClosePanel($event)\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <!-- search text -->\n <mat-form-field>\n <mat-label>{{ 'TABLE.TESTING.SEARCH_TEXT' | translate }}</mat-label>\n <ion-icon matPrefix name=\"search\"></ion-icon>\n <input matInput formControlName=\"searchText\" autocomplete=\"off\" />\n <button\n mat-icon-button\n matSuffix\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.searchText)\"\n [hidden]=\"filterForm.controls.searchText.disabled || !filterForm.controls.searchText.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <mat-action-row>\n <!-- Counter -->\n <ion-label\n [hidden]=\"(loadingSubject | async) || filterForm.dirty\"\n [color]=\"empty && 'danger'\"\n class=\"ion-padding\"\n >\n {{\n (totalRowCount ? 'COMMON.RESULT_COUNT' : 'COMMON.NO_RESULT')\n | translate\n : {\n count: (totalRowCount | numberFormat)\n }\n }}\n </ion-label>\n\n <div class=\"toolbar-spacer\"></div>\n\n <button\n mat-icon-button\n color=\"accent\"\n *ngIf=\"filterPanelFloating\"\n (click)=\"toggleFilterPanelFloating()\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(filterPanelFloating ? 'COMMON.BTN_EXPAND' : 'COMMON.BTN_HIDE') | translate\"\n >\n <mat-icon>\n <span style=\"transform: rotate(90deg)\">{{ filterPanelFloating ? '&#xbb;' : '&#xab;' }}</span>\n </mat-icon>\n </button>\n\n <!-- Close panel -->\n <ion-button mat-button fill=\"clear\" color=\"dark\" (click)=\"closeFilterPanel()\" [disabled]=\"loadingSubject | async\">\n <ion-text translate>COMMON.BTN_CLOSE</ion-text>\n </ion-button>\n\n <!-- Search button -->\n <ion-button\n mat-button\n [color]=\"filterForm.dirty ? 'tertiary' : 'dark'\"\n [fill]=\"filterForm.dirty ? 'solid' : 'clear'\"\n (click)=\"applyFilterAndClosePanel($event)\"\n >\n <ion-text translate>COMMON.BTN_APPLY</ion-text>\n </ion-button>\n </mat-action-row>\n </mat-expansion-panel>\n\n <!-- table -->\n <div [class.table-container]=\"!enableInfiniteScroll\">\n <table\n #table\n mat-table\n matSort\n matSortDisableClear\n [dataSource]=\"dataSource\"\n [matSortActive]=\"defaultSortBy\"\n [matSortDirection]=\"defaultSortDirection\"\n [trackBy]=\"trackByFn\"\n [style.--mat-row-height]=\"rowHeight + 'px'\"\n >\n <!-- group header cells -->\n <ng-container matColumnDef=\"top-start\" [sticky]=\"sticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\" [attr.colspan]=\"2\">\n <!-- start spacer -->\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"group-1\">\n <th mat-header-cell *matHeaderCellDef [attr.colspan]=\"3\">\n <ion-label translate>{{ i18nColumnPrefix + 'GROUP_1' }}</ion-label>\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"group-2\">\n <th mat-header-cell *matHeaderCellDef [attr.colspan]=\"displayedColumns.length - 6\">\n <ion-label translate>{{ i18nColumnPrefix + 'GROUP_2' }}</ion-label>\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"top-end\" [stickyEnd]=\"stickyEnd\">\n <th mat-header-cell *matHeaderCellDef>\n <!-- end spacer -->\n <ion-label></ion-label>\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"select\" [sticky]=\"sticky\" [class.mat-column-sticky]=\"sticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\">\n @if (selection | isMultipleSelection) {\n <mat-checkbox\n [checked]=\"this | isAllSelected\"\n [indeterminate]=\"this | isNotAllSelected\"\n (change)=\"$event ? masterToggle() : null\"\n ></mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox\n (click)=\"toggleSelectRow($event, row)\"\n [checked]=\"selection | isSelected: row\"\n tabindex=\"-1\"\n ></mat-checkbox>\n </td>\n </ng-container>\n\n <!-- Id column -->\n <ng-container matColumnDef=\"id\" [sticky]=\"sticky\" [class.mat-column-sticky]=\"sticky\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label>#</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">{{ row.currentData?.id }}</td>\n </ng-container>\n\n <!-- Label column -->\n <ng-container matColumnDef=\"label\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.LABEL</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn = 'label'\">\n @if (row.editing) {\n <mat-form-field>\n <input\n matInput\n autocomplete=\"off\"\n [formControl]=\"row.validator.controls['label']\"\n [placeholder]=\"'TABLE.TESTING.LABEL' | translate\"\n [appAutofocus]=\"focusColumn === 'label'\"\n [readonly]=\"!row.editing\"\n />\n <mat-error *ngIf=\"row.validator.controls['label'].hasError('required')\" translate>\n ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.validator | formGetValue: 'label' }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- Name column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.NAME</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn = 'name'\">\n @if (row.editing) {\n <mat-form-field>\n <input\n matInput\n [formControl]=\"row.validator?.controls.name\"\n [placeholder]=\"'TABLE.TESTING.NAME' | translate\"\n [appAutofocus]=\"focusColumn === 'name'\"\n />\n <mat-error *ngIf=\"row.validator?.controls.name.hasError('required')\" translate>\n ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.validator | formGetValue: 'name' }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- Level column -->\n <ng-container matColumnDef=\"levelId\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.LEVEL_ID</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn = 'levelId'\">\n @if (row.editing) {\n <mat-autocomplete-field\n [formControl]=\"row.validator.controls.levelId\"\n [placeholder]=\"'TABLE.TESTING.LEVEL_ID' | translate\"\n floatLabel=\"never\"\n [config]=\"autocompleteFields.level\"\n [readonly]=\"!row.editing\"\n [autofocus]=\"focusColumn === 'levelId'\"\n [required]=\"true\"\n ></mat-autocomplete-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.validator | formGetValue: 'levelId' | referentialToString: autocompleteFields.level.attributes }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- Status column -->\n <ng-container matColumnDef=\"statusId\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.STATUS</span>\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n [class.mat-form-field-disabled]=\"!row.editing\"\n (click)=\"focusColumn = 'statusId'\"\n >\n <mat-form-field>\n <mat-select\n [formControl]=\"row.validator.controls['statusId']\"\n [placeholder]=\"i18nColumnPrefix + 'STATUS_ID' | translate\"\n >\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <mat-icon><ion-icon [name]=\"item.icon\"></ion-icon></mat-icon>\n <mat-label>{{ item.label | translate }}</mat-label>\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['statusId'].hasError('required')\" translate>\n ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Enum column -->\n <!-- NOTE : Never used in table -->\n <!-- <ng-container matColumnDef=\"values\">-->\n <!-- <th mat-header-cell *matHeaderCellDef>-->\n <!-- <span translate>Enums</span>-->\n <!-- </th>-->\n <!-- <td mat-cell *matCellDef=\"let row\" [class.mat-form-field-disabled]=\"!row.editing\">-->\n <!-- <app-form-field-->\n <!-- [formControl]=\"row.validator|formGetControl:'properties.values'\"-->\n <!-- [definition]=\"columnDefinitions['values']\"-->\n <!-- ></app-form-field>-->\n <!-- </td>-->\n <!-- </ng-container>-->\n\n <!-- boolean (as checkbox) -->\n <ng-container matColumnDef=\"boolean\">\n <th mat-header-cell *matHeaderCellDef cdkDrag [resizable]=\"true\">\n <!-- if sortable, wrap the header with a mat-sort-header -->\n <span mat-sort-header>\n <ion-label>Boolean</ion-label>\n </span>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n @if (!readOnly && row.editing) {\n <mat-boolean-field\n floatLabel=\"never\"\n [style]=\"'checkbox'\"\n placeholder=\"Oui/Non\"\n [formControl]=\"row.validator | formGetControl: 'properties.boolean'\"\n [compact]=\"true\"\n ></mat-boolean-field>\n } @else {\n <ion-label appAutoTitle>\n {{ (row.validator | formGetValue: 'properties.boolean') ? '&#x2714;' : '&#x2718;' }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- date -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef cdkDrag [resizable]=\"true\" class=\"mat-cell-date-time\">\n <!-- if sortable, wrap the header with a mat-sort-header -->\n <span mat-sort-header>\n <ion-label>Date</ion-label>\n </span>\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"mat-cell-date-time\" (click)=\"focusColumn = 'date'\">\n @if (!readOnly && row.editing) {\n <mat-date-time-field\n floatLabel=\"never\"\n [formControl]=\"row.validator | formGetControl: 'properties.date'\"\n [autofocus]=\"focusColumn === 'date'\"\n placeholder=\"Date/Time\"\n [compact]=\"true\"\n ></mat-date-time-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.validator | formGetValue: 'properties.date' | dateFormat: { time: true } }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- latitude -->\n <ng-container matColumnDef=\"latitude\">\n <th mat-header-cell *matHeaderCellDef cdkDrag [resizable]=\"true\">\n <!-- if sortable, wrap the header with a mat-sort-header -->\n <span mat-sort-header>\n <ion-label>Latitude</ion-label>\n </span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn = 'latitude'\">\n @if (!readOnly && row.editing) {\n <mat-latlong-field\n floatLabel=\"never\"\n [formControl]=\"row.validator | formGetControl: 'properties.latitude'\"\n placeholder=\"Latitude\"\n [latLongPattern]=\"'DDMM'\"\n [autofocus]=\"focusColumn === 'latitude'\"\n ></mat-latlong-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.validator | formGetValue: 'properties.latitude' | latitudeFormat: { pattern: 'DDMM', placeholderChar: '0' } }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- Creation date column -->\n <ng-container matColumnDef=\"updateDate\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.UPDATE_DATE</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"mat-form-field-disabled\">\n <ion-text color=\"medium\" *ngIf=\"row.id !== -1\">\n <small>\n {{ row.validator | formGetValue: 'creationDate' | dateFormat: { time: true } }}\n </small>\n </ion-text>\n </td>\n </ng-container>\n\n <!-- Comment column -->\n <ng-container matColumnDef=\"comments\">\n <th mat-header-cell *matHeaderCellDef>\n <ion-label translate>TABLE.TESTING.COMMENTS</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-form-field *ngIf=\"row.editing; else iconComment\">\n <!--<textarea matInput [formControl]=\"row.validator?.controls.comments\"\n [placeholder]=\"'TABLE.TESTING.COMMENTS'|translate\"\n [readonly]=\"!row.editing\"></textarea>-->\n\n <input\n type=\"text\"\n matInput\n [formControl]=\"row.validator?.controls.comments\"\n [placeholder]=\"'TABLE.TESTING.COMMENTS' | translate\"\n [readonly]=\"!row.editing\"\n />\n </mat-form-field>\n\n <ng-template #iconComment>\n <ion-icon\n [color]=\"row.validator?.controls.comments.value ? 'tertiary' : 'medium'\"\n name=\"chatbox\"\n slot=\"icon-only\"\n ></ion-icon>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Actions column -->\n <app-nav-actions-column\n [stickyEnd]=\"stickyEnd\"\n (optionsClick)=\"openSelectColumnsModal($event)\"\n [cellTemplate]=\"cellInjection\"\n [showPending]=\"true\"\n >\n <!-- cell injection-->\n <ng-template #cellInjection let-row>\n <span *ngIf=\"row.editing && !row.validator.dirty\">-</span>\n </ng-template>\n </app-nav-actions-column>\n\n <tr mat-header-row *matHeaderRowDef=\"groupColumns\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n [class.mat-mdc-row-selected]=\"row.editing\"\n [class.mat-mdc-row-error]=\"row.invalid\"\n [class.mat-mdc-row-disabled]=\"!row.editing\"\n [class.mat-mdc-row-dirty]=\"row.dirty\"\n (click)=\"clickRow($event, row)\"\n (keydown.escape)=\"escapeEditingRow($event)\"\n [cdkTrapFocus]=\"row.invalid\"\n ></tr>\n </table>\n\n <ng-container *ngIf=\"loadingSubject | async; else noResult\">\n <ion-item>\n <ion-skeleton-text animated></ion-skeleton-text>\n </ion-item>\n </ng-container>\n\n <ng-template #noResult>\n <ion-item *ngIf=\"totalRowCount === 0\">\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n </ng-template>\n\n <ion-infinite-scroll\n *ngIf=\"enableInfiniteScroll\"\n [threshold]=\"mobile ? '10%' : '2%'\"\n position=\"bottom\"\n (ionInfinite)=\"fetchMore($event)\"\n >\n <ion-infinite-scroll-content\n loadingSpinner=\"circles\"\n [loadingText]=\"'COMMON.LOADING_DOTS' | translate\"\n ></ion-infinite-scroll-content>\n </ion-infinite-scroll>\n </div>\n</ion-content>\n\n<ion-footer>\n <!-- Paginator -->\n <mat-paginator\n *ngIf=\"!enableInfiniteScroll\"\n [length]=\"totalRowCount\"\n [pageSize]=\"defaultPageSize\"\n [pageSizeOptions]=\"defaultPageSizeOptions\"\n showFirstLastButtons\n ></mat-paginator>\n\n <app-form-buttons-bar\n *ngIf=\"canEdit && !mobile\"\n (onCancel)=\"load()\"\n (onSave)=\"save()\"\n [disabled]=\"(loadingSubject | async) || !dirty\"\n >\n <!-- error -->\n <ion-item *ngIf=\"error$ | async\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n </app-form-buttons-bar>\n</ion-footer>\n\n<ion-fab slot=\"fixed\" vertical=\"bottom\" horizontal=\"end\" *ngIf=\"canEdit && mobile\">\n <ion-fab-button color=\"tertiary\" (click)=\"addRow($event)\">\n <ion-icon name=\"add\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n", styles: [".table-container .mat-mdc-table{--mat-column-actions-min-width: 62px;--mat-column-actions-max-width: 62px}.table-container .mat-mdc-table .mat-row-selected{padding:3px}.table-container .mat-mdc-table .mat-column-select{min-width:30px}.table-container .mat-mdc-table .mat-column-id{min-width:30px;max-width:30px}.table-container .mat-mdc-table .mat-column-label,.table-container .mat-mdc-table .mat-column-name,.table-container .mat-mdc-table .mat-column-levelId,.table-container .mat-mdc-table .mat-column-statusId{min-width:150px}.table-container .mat-mdc-table .mat-column-comments{min-width:100px;max-width:100px}.table-container .mat-mdc-table .mat-column-updateDate{min-width:110px;max-width:110px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i4.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i4.IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { kind: "component", type: i4.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i4.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i4.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonInfiniteScroll, selector: "ion-infinite-scroll", inputs: ["disabled", "position", "threshold"] }, { kind: "component", type: i4.IonInfiniteScrollContent, selector: "ion-infinite-scroll-content", inputs: ["loadingSpinner", "loadingText"] }, { kind: "component", type: i4.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "mode", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: i4.IonRefresherContent, selector: "ion-refresher-content", inputs: ["pullingIcon", "pullingText", "refreshingSpinner", "refreshingText"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }, { kind: "component", type: i4.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i4.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i4.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i9.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i12.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "directive", type: i13.MatExpansionPanelActionRow, selector: "mat-action-row" }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i15.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i16.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i17.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i18.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i19.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i20.MatAutocompleteField, selector: "mat-autocomplete-field", inputs: ["equals", "logPrefix", "formControl", "formControlName", "floatLabel", "label", "appearance", "subscriptSizing", "placeholder", "suggestFn", "required", "hideRequiredMarker", "mobile", "clearable", "debounceTime", "displaySeparator", "displayWith", "displayAttributes", "displayColumnSizes", "displayColumnNames", "highlightAccent", "showAllOnFocus", "showPanelOnFocus", "reloadItemsOnFocus", "clearInvalidValueOnBlur", "autofocus", "config", "i18nPrefix", "noResultMessage", "panelClass", "panelWidth", "disableRipple", "matAutocompletePosition", "multiple", "fetchMoreThreshold", "suggestLengthThreshold", "showLoadingSpinner", "debug", "showSearchBar", "stickySearchBar", "applyImplicitValue", "dropButtonTitle", "clearButtonTitle", "trimSearchText", "splitSearchText", "selectInputContentOnFocus", "selectInputContentOnFocusDelay", "previewImplicitValue", "class", "filter", "readonly", "tabindex", "items"], outputs: ["click", "blur", "focus", "dropButtonClick", "keydown.escape", "keydown.backspace", "keyup.enter", "selectionChange"] }, { kind: "component", type: i21.MatLatLongField, selector: "mat-latlong-field", inputs: ["formControl", "formControlName", "type", "latLongPattern", "required", "floatLabel", "placeholder", "tabindex", "defaultSign", "maxDecimals", "placeholderChar", "autofocus", "mobile", "appearance", "readonly", "subscriptSizing"], outputs: ["onBlur", "onFocus"] }, { kind: "component", type: i22.MatDateTime, selector: "mat-date-time-field", inputs: ["placeholder", "floatLabel", "mobile", "compact", "autofocus", "clearable", "startDate", "datePickerFilter", "allowNoTime", "appearance", "subscriptSizing", "formControl", "formControlName", "required", "readonly", "tabindex"] }, { kind: "component", type: i23.MatBooleanField, selector: "mat-boolean-field", inputs: ["disabled", "formControl", "formControlName", "placeholder", "floatLabel", "appearance", "subscriptSizing", "readonly", "required", "compact", "style", "buttonsColCount", "class", "yesLabel", "noLabel", "showButtonIcons", "yesIcon", "noIcon", "clearable", "labelPosition", "tabindex", "showRadio", "value"], outputs: ["keyup.enter", "blur"] }, { kind: "directive", type: i24.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "directive", type: i25.AutoTitleDirective, selector: "[appAutoTitle]" }, { kind: "component", type: i26.ToolbarComponent, selector: "app-toolbar", inputs: ["progressBarMode", "title", "color", "class", "backHref", "defaultBackHref", "hasValidate", "hasClose", "hasSearch", "canGoBack", "canShowMenu"], outputs: ["onValidate", "onClose", "onValidateAndClose", "onBackClick", "onSearch"] }, { kind: "component", type: i27.FormButtonsBarComponent, selector: "app-form-buttons-bar", inputs: ["disabled", "disabledCancel", "disabledEscape", "classList", "saveButtonColor", "backText", "cancelText", "nextText", "showBack", "showCancel", "showNext", "showSave"], outputs: ["onCancel", "onSave", "onNext", "onBack", "onSaveAndClose", "onSaveAndNext"] }, { kind: "component", type: i28.NavActionsColumnComponent, selector: "app-nav-actions-column", inputs: ["appTable", "matColumnDef", "style", "stickyEnd", "showPending", "dirtyIcon", "optionsTitle", "class", "cellTemplate", "throttleTime"], outputs: ["optionsClick"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i29.ResizableComponent, selector: "th[resizable]", inputs: ["resizable"], outputs: ["sizeChanged"] }, { kind: "directive", type: i30.ResizableDirective, selector: "[resizable]", outputs: ["resizable", "fit"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i31.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i32.LatitudeFormatPipe, name: "latitudeFormat" }, { kind: "pipe", type: i33.NumberFormatPipe, name: "numberFormat" }, { kind: "pipe", type: i34.ArrayLengthPipe, name: "isArrayLength" }, { kind: "pipe", type: i35.FormGetControlPipe, name: "formGetControl" }, { kind: "pipe", type: i35.FormGetValuePipe, name: "formGetValue" }, { kind: "pipe", type: i36.IsSelectedPipe, name: "isSelected" }, { kind: "pipe", type: i36.IsEmptySelectionPipe, name: "isEmptySelection" }, { kind: "pipe", type: i36.IsMultipleSelectionPipe, name: "isMultipleSelection" }, { kind: "pipe", type: i37.IsAllSelectedPipe, name: "isAllSelected" }, { kind: "pipe", type: i37.IsNotAllSelectedPipe, name: "isNotAllSelected" }, { kind: "pipe", type: i38.ReferentialToStringPipe, name: "referentialToString" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
300
+ ], viewQueries: [{ propertyName: "filterExpansionPanel", first: true, predicate: MatExpansionPanel, descendants: true, static: true }, { propertyName: "infiniteScroll", first: true, predicate: IonInfiniteScroll, descendants: true }], usesInheritance: true, ngImport: i0, template: "<app-toolbar\n color=\"primary\"\n [canGoBack]=\"true\"\n [hasValidate]=\"(loadingSubject | async) !== true && (dirtySubject | async) === true\"\n (onValidate)=\"save()\"\n [backHref]=\"'/testing'\"\n>\n <ion-title>Table (click to edit)</ion-title>\n <ion-buttons slot=\"end\">\n @if (selection | isEmptySelection) {\n <input matInput type=\"number\" step=\"1\" style=\"color: black; width: 50px\" [(ngModel)]=\"rowHeight\" />\n\n <!-- Add -->\n <button mat-icon-button *ngIf=\"canEdit && !mobile\" [title]=\"'COMMON.BTN_ADD' | translate\" (click)=\"addRow()\">\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- reset filter -->\n <button mat-icon-button (click)=\"resetFilter()\" *ngIf=\"filterCriteriaCount\">\n <mat-icon color=\"accent\">filter_list_alt</mat-icon>\n <mat-icon class=\"icon-secondary\" style=\"left: 16px; top: 5px; font-weight: bold\">close</mat-icon>\n </button>\n\n <!-- show filter -->\n <button mat-icon-button (click)=\"filterExpansionPanel.toggle()\">\n <mat-icon\n *ngIf=\"filterCriteriaCount; else emptyFilter\"\n [matBadge]=\"filterCriteriaCount\"\n matBadgeColor=\"accent\"\n matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n aria-hidden=\"false\"\n >\n filter_list_alt\n </mat-icon>\n <ng-template #emptyFilter>\n <mat-icon>filter_list_alt</mat-icon>\n </ng-template>\n </button>\n\n <!-- save -->\n <button mat-icon-button *ngIf=\"mobile\" [disabled]=\"(dirtySubject | async) !== true\" (click)=\"save()\">\n <mat-icon>save</mat-icon>\n </button>\n\n <!-- start/stop timer to auto-load data -->\n <ion-button *ngIf=\"!timer\" (click)=\"startTimer()\">Start reload</ion-button>\n <ion-button *ngIf=\"timer\" (click)=\"stopTimer()\" color=\"accent\">Stop reload</ion-button>\n } @else {\n <!-- if row selection -->\n <!-- delete -->\n <button\n mat-icon-button\n *ngIf=\"canEdit\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"deleteSelection($event)\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <!-- duplicate -->\n <button\n mat-icon-button\n *ngIf=\"canEdit && selection.selected | isArrayLength: { equals: 1 }\"\n [title]=\"'COMMON.BTN_DUPLICATE' | translate\"\n (click)=\"duplicateRow($event, selection.selected[0])\"\n >\n <mat-icon>file_copy</mat-icon>\n </button>\n }\n </ion-buttons>\n</app-toolbar>\n<ion-content class=\"ion-no-padding\">\n <ion-refresher slot=\"fixed\" *ngIf=\"mobile\" (ionRefresh)=\"doRefresh($event)\">\n <ion-refresher-content></ion-refresher-content>\n </ion-refresher>\n\n <!-- error -->\n <ion-item *ngIf=\"mobile && error\" lines=\"none\" @slideUpDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n\n <!-- search -->\n <mat-expansion-panel\n #filterExpansionPanel\n class=\"filter-panel\"\n [class.filter-panel-floating]=\"filterPanelFloating\"\n [class.filter-panel-pinned]=\"!filterPanelFloating\"\n >\n <form class=\"form-container ion-padding-top\" [formGroup]=\"filterForm\" (ngSubmit)=\"applyFilterAndClosePanel($event)\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <!-- search text -->\n <mat-form-field>\n <mat-label>{{ 'TABLE.TESTING.SEARCH_TEXT' | translate }}</mat-label>\n <ion-icon matPrefix name=\"search\"></ion-icon>\n <input matInput formControlName=\"searchText\" autocomplete=\"off\" />\n <button\n mat-icon-button\n matSuffix\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearControlValue($event, filterForm.controls.searchText)\"\n [hidden]=\"filterForm.controls.searchText.disabled || !filterForm.controls.searchText.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <mat-action-row>\n <!-- Counter -->\n <ion-label\n [hidden]=\"(loadingSubject | async) || filterForm.dirty\"\n [color]=\"empty && 'danger'\"\n class=\"ion-padding\"\n >\n {{\n (totalRowCount ? 'COMMON.RESULT_COUNT' : 'COMMON.NO_RESULT')\n | translate\n : {\n count: (totalRowCount | numberFormat)\n }\n }}\n </ion-label>\n\n <div class=\"toolbar-spacer\"></div>\n\n <button\n mat-icon-button\n color=\"accent\"\n *ngIf=\"filterPanelFloating\"\n (click)=\"toggleFilterPanelFloating()\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(filterPanelFloating ? 'COMMON.BTN_EXPAND' : 'COMMON.BTN_HIDE') | translate\"\n >\n <mat-icon>\n <span style=\"transform: rotate(90deg)\">{{ filterPanelFloating ? '&#xbb;' : '&#xab;' }}</span>\n </mat-icon>\n </button>\n\n <!-- Close panel -->\n <ion-button mat-button fill=\"clear\" color=\"dark\" (click)=\"closeFilterPanel()\" [disabled]=\"loadingSubject | async\">\n <ion-text translate>COMMON.BTN_CLOSE</ion-text>\n </ion-button>\n\n <!-- Search button -->\n <ion-button\n mat-button\n [color]=\"filterForm.dirty ? 'tertiary' : 'dark'\"\n [fill]=\"filterForm.dirty ? 'solid' : 'clear'\"\n (click)=\"applyFilterAndClosePanel($event)\"\n >\n <ion-text translate>COMMON.BTN_APPLY</ion-text>\n </ion-button>\n </mat-action-row>\n </mat-expansion-panel>\n\n <!-- table -->\n <div [class.table-container]=\"!enableInfiniteScroll\">\n <table\n #table\n mat-table\n matSort\n matSortDisableClear\n [dataSource]=\"dataSource\"\n [matSortActive]=\"defaultSortBy\"\n [matSortDirection]=\"defaultSortDirection\"\n [trackBy]=\"trackByFn\"\n [style.--mat-row-height]=\"rowHeight + 'px'\"\n >\n <!-- group header cells -->\n <ng-container matColumnDef=\"top-start\" [sticky]=\"sticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\" [attr.colspan]=\"2\">\n <!-- start spacer -->\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"group-1\">\n <th mat-header-cell *matHeaderCellDef [attr.colspan]=\"3\">\n <ion-label translate>{{ i18nColumnPrefix + 'GROUP_1' }}</ion-label>\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"group-2\">\n <th mat-header-cell *matHeaderCellDef [attr.colspan]=\"displayedColumns.length - 6\">\n <ion-label translate>{{ i18nColumnPrefix + 'GROUP_2' }}</ion-label>\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"top-end\" [stickyEnd]=\"stickyEnd\">\n <th mat-header-cell *matHeaderCellDef>\n <!-- end spacer -->\n <ion-label></ion-label>\n </th>\n </ng-container>\n\n <ng-container matColumnDef=\"select\" [sticky]=\"sticky\" [class.mat-column-sticky]=\"sticky\">\n <th mat-header-cell *matHeaderCellDef [class.cdk-visually-hidden]=\"!canEdit\">\n @if (selection | isMultipleSelection) {\n <mat-checkbox\n [checked]=\"this | isAllSelected\"\n [indeterminate]=\"this | isNotAllSelected\"\n (change)=\"$event ? masterToggle() : null\"\n ></mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row\" [class.cdk-visually-hidden]=\"!canEdit\">\n <mat-checkbox\n (click)=\"toggleSelectRow($event, row)\"\n [checked]=\"selection | isSelected: row\"\n tabindex=\"-1\"\n ></mat-checkbox>\n </td>\n </ng-container>\n\n <!-- Id column -->\n <ng-container matColumnDef=\"id\" [sticky]=\"sticky\" [class.mat-column-sticky]=\"sticky\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label>#</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">{{ row.currentData?.id }}</td>\n </ng-container>\n\n <!-- Label column -->\n <ng-container matColumnDef=\"label\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.LABEL</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn = 'label'\">\n @if (row.editing) {\n <mat-form-field>\n <input\n matInput\n autocomplete=\"off\"\n [formControl]=\"row.validator.controls['label']\"\n [placeholder]=\"'TABLE.TESTING.LABEL' | translate\"\n [appAutofocus]=\"focusColumn === 'label'\"\n [readonly]=\"!row.editing\"\n />\n <mat-error *ngIf=\"row.validator.controls['label'].hasError('required')\" translate>\n ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.validator | formGetValue: 'label' }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- Name column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.NAME</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn = 'name'\">\n @if (row.editing) {\n <mat-form-field>\n <input\n matInput\n [formControl]=\"row.validator?.controls.name\"\n [placeholder]=\"'TABLE.TESTING.NAME' | translate\"\n [appAutofocus]=\"focusColumn === 'name'\"\n />\n <mat-error *ngIf=\"row.validator?.controls.name.hasError('required')\" translate>\n ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.validator | formGetValue: 'name' }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- Level column -->\n <ng-container matColumnDef=\"levelId\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.LEVEL_ID</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn = 'levelId'\">\n @if (row.editing) {\n <mat-autocomplete-field\n [formControl]=\"row.validator.controls.levelId\"\n [placeholder]=\"'TABLE.TESTING.LEVEL_ID' | translate\"\n floatLabel=\"never\"\n [config]=\"autocompleteFields.level\"\n [readonly]=\"!row.editing\"\n [autofocus]=\"focusColumn === 'levelId'\"\n [required]=\"true\"\n ></mat-autocomplete-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.validator | formGetValue: 'levelId' | referentialToString: autocompleteFields.level.attributes }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- Status column -->\n <ng-container matColumnDef=\"statusId\">\n <th mat-header-cell *matHeaderCellDef>\n <span translate>USER.STATUS</span>\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n [class.mat-form-field-disabled]=\"!row.editing\"\n (click)=\"focusColumn = 'statusId'\"\n >\n <mat-form-field>\n <mat-select\n [formControl]=\"row.validator.controls['statusId']\"\n [placeholder]=\"i18nColumnPrefix + 'STATUS_ID' | translate\"\n >\n <mat-option *ngFor=\"let item of statusList\" [value]=\"item.id\">\n <mat-icon><ion-icon [name]=\"item.icon\"></ion-icon></mat-icon>\n <mat-label>{{ item.label | translate }}</mat-label>\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"row.validator.controls['statusId'].hasError('required')\" translate>\n ERROR.FIELD_REQUIRED\n </mat-error>\n </mat-form-field>\n </td>\n </ng-container>\n\n <!-- Enum column -->\n <!-- NOTE : Never used in table -->\n <!-- <ng-container matColumnDef=\"values\">-->\n <!-- <th mat-header-cell *matHeaderCellDef>-->\n <!-- <span translate>Enums</span>-->\n <!-- </th>-->\n <!-- <td mat-cell *matCellDef=\"let row\" [class.mat-form-field-disabled]=\"!row.editing\">-->\n <!-- <app-form-field-->\n <!-- [formControl]=\"row.validator|formGetControl:'properties.values'\"-->\n <!-- [definition]=\"columnDefinitions['values']\"-->\n <!-- ></app-form-field>-->\n <!-- </td>-->\n <!-- </ng-container>-->\n\n <!-- boolean (as checkbox) -->\n <ng-container matColumnDef=\"boolean\">\n <th mat-header-cell *matHeaderCellDef cdkDrag [resizable]=\"true\">\n <!-- if sortable, wrap the header with a mat-sort-header -->\n <span mat-sort-header>\n <ion-label>Boolean</ion-label>\n </span>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n @if (!readOnly && row.editing) {\n <mat-boolean-field\n floatLabel=\"never\"\n [style]=\"'checkbox'\"\n placeholder=\"Oui/Non\"\n [formControl]=\"row.validator | formGetControl: 'properties.boolean'\"\n [compact]=\"true\"\n ></mat-boolean-field>\n } @else {\n <ion-label appAutoTitle>\n {{ (row.validator | formGetValue: 'properties.boolean') ? '&#x2714;' : '&#x2718;' }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- date -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef cdkDrag [resizable]=\"true\" class=\"mat-cell-date-time\">\n <!-- if sortable, wrap the header with a mat-sort-header -->\n <span mat-sort-header>\n <ion-label>Date</ion-label>\n </span>\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"mat-cell-date-time\" (click)=\"focusColumn = 'date'\">\n @if (!readOnly && row.editing) {\n <mat-date-time-field\n floatLabel=\"never\"\n [formControl]=\"row.validator | formGetControl: 'properties.date'\"\n [autofocus]=\"focusColumn === 'date'\"\n placeholder=\"Date/Time\"\n [compact]=\"true\"\n ></mat-date-time-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.validator | formGetValue: 'properties.date' | dateFormat: { time: true } }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- latitude -->\n <ng-container matColumnDef=\"latitude\">\n <th mat-header-cell *matHeaderCellDef cdkDrag [resizable]=\"true\">\n <!-- if sortable, wrap the header with a mat-sort-header -->\n <span mat-sort-header>\n <ion-label>Latitude</ion-label>\n </span>\n </th>\n <td mat-cell *matCellDef=\"let row\" (click)=\"focusColumn = 'latitude'\">\n @if (!readOnly && row.editing) {\n <mat-latlong-field\n floatLabel=\"never\"\n [formControl]=\"row.validator | formGetControl: 'properties.latitude'\"\n placeholder=\"Latitude\"\n [latLongPattern]=\"'DDMM'\"\n [autofocus]=\"focusColumn === 'latitude'\"\n ></mat-latlong-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.validator | formGetValue: 'properties.latitude' | latitudeFormat: { pattern: 'DDMM', placeholderChar: '0' } }}\n </ion-label>\n }\n </td>\n </ng-container>\n\n <!-- Creation date column -->\n <ng-container matColumnDef=\"updateDate\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>\n <ion-label translate>TABLE.TESTING.UPDATE_DATE</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"mat-form-field-disabled\">\n <ion-text color=\"medium\" *ngIf=\"row.id !== -1\">\n <small>\n {{ row.validator | formGetValue: 'creationDate' | dateFormat: { time: true } }}\n </small>\n </ion-text>\n </td>\n </ng-container>\n\n <!-- Comment column -->\n <ng-container matColumnDef=\"comments\">\n <th mat-header-cell *matHeaderCellDef>\n <ion-label translate>TABLE.TESTING.COMMENTS</ion-label>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-form-field *ngIf=\"row.editing; else iconComment\">\n <!--<textarea matInput [formControl]=\"row.validator?.controls.comments\"\n [placeholder]=\"'TABLE.TESTING.COMMENTS'|translate\"\n [readonly]=\"!row.editing\"></textarea>-->\n\n <input\n type=\"text\"\n matInput\n [formControl]=\"row.validator?.controls.comments\"\n [placeholder]=\"'TABLE.TESTING.COMMENTS' | translate\"\n [readonly]=\"!row.editing\"\n />\n </mat-form-field>\n\n <ng-template #iconComment>\n <ion-icon\n [color]=\"row.validator?.controls.comments.value ? 'tertiary' : 'medium'\"\n name=\"chatbox\"\n slot=\"icon-only\"\n ></ion-icon>\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Actions column -->\n <app-nav-actions-column\n [stickyEnd]=\"stickyEnd\"\n (optionsClick)=\"openSelectColumnsModal($event)\"\n [cellTemplate]=\"cellInjection\"\n [showPending]=\"true\"\n >\n <!-- cell injection-->\n <ng-template #cellInjection let-row>\n <span *ngIf=\"row.editing && !row.validator.dirty\">-</span>\n </ng-template>\n </app-nav-actions-column>\n\n <tr mat-header-row *matHeaderRowDef=\"groupColumns\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n [class.mat-mdc-row-selected]=\"row.editing\"\n [class.mat-mdc-row-error]=\"row.invalid\"\n [class.mat-mdc-row-disabled]=\"!row.editing\"\n [class.mat-mdc-row-dirty]=\"row.dirty\"\n (click)=\"clickRow($event, row)\"\n (keydown.escape)=\"escapeEditingRow($event)\"\n [cdkTrapFocus]=\"row.invalid\"\n ></tr>\n </table>\n\n <ng-container *ngIf=\"loadingSubject | async; else noResult\">\n <ion-item>\n <ion-skeleton-text animated></ion-skeleton-text>\n </ion-item>\n </ng-container>\n\n <ng-template #noResult>\n <ion-item *ngIf=\"totalRowCount === 0\">\n <ion-text color=\"danger\" class=\"text-italic\" translate>COMMON.NO_RESULT</ion-text>\n </ion-item>\n </ng-template>\n\n <ion-infinite-scroll\n *ngIf=\"enableInfiniteScroll\"\n [threshold]=\"mobile ? '10%' : '2%'\"\n position=\"bottom\"\n (ionInfinite)=\"fetchMore($event)\"\n >\n <ion-infinite-scroll-content\n loadingSpinner=\"circles\"\n [loadingText]=\"'COMMON.LOADING_DOTS' | translate\"\n ></ion-infinite-scroll-content>\n </ion-infinite-scroll>\n </div>\n</ion-content>\n\n<ion-footer>\n <!-- Paginator -->\n <mat-paginator\n *ngIf=\"!enableInfiniteScroll\"\n [length]=\"totalRowCount\"\n [pageSize]=\"defaultPageSize\"\n [pageSizeOptions]=\"defaultPageSizeOptions\"\n showFirstLastButtons\n ></mat-paginator>\n\n <app-form-buttons-bar\n *ngIf=\"canEdit && !mobile\"\n (onCancel)=\"load()\"\n (onSave)=\"save()\"\n [disabled]=\"(loadingSubject | async) || !dirty\"\n >\n <!-- error -->\n <ion-item *ngIf=\"error$ | async\" lines=\"none\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n </app-form-buttons-bar>\n</ion-footer>\n\n<ion-fab slot=\"fixed\" vertical=\"bottom\" horizontal=\"end\" *ngIf=\"canEdit && mobile\">\n <ion-fab-button color=\"tertiary\" (click)=\"addRow($event)\">\n <ion-icon name=\"add\"></ion-icon>\n </ion-fab-button>\n</ion-fab>\n", styles: [".table-container .mat-mdc-table{--mat-column-actions-min-width: 62px;--mat-column-actions-max-width: 62px}.table-container .mat-mdc-table .mat-row-selected{padding:3px}.table-container .mat-mdc-table .mat-column-select{min-width:30px}.table-container .mat-mdc-table .mat-column-id{min-width:30px;max-width:30px}.table-container .mat-mdc-table .mat-column-label,.table-container .mat-mdc-table .mat-column-name,.table-container .mat-mdc-table .mat-column-levelId,.table-container .mat-mdc-table .mat-column-statusId{min-width:150px}.table-container .mat-mdc-table .mat-column-comments{min-width:100px;max-width:100px}.table-container .mat-mdc-table .mat-column-updateDate{min-width:110px;max-width:110px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i4.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i4.IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { kind: "component", type: i4.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i4.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i4.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i4.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i4.IonInfiniteScroll, selector: "ion-infinite-scroll", inputs: ["disabled", "position", "threshold"] }, { kind: "component", type: i4.IonInfiniteScrollContent, selector: "ion-infinite-scroll-content", inputs: ["loadingSpinner", "loadingText"] }, { kind: "component", type: i4.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.IonRefresher, selector: "ion-refresher", inputs: ["closeDuration", "disabled", "mode", "pullFactor", "pullMax", "pullMin", "snapbackDuration"] }, { kind: "component", type: i4.IonRefresherContent, selector: "ion-refresher-content", inputs: ["pullingIcon", "pullingText", "refreshingSpinner", "refreshingText"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }, { kind: "component", type: i4.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i4.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i4.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i9.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i12.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "directive", type: i13.MatExpansionPanelActionRow, selector: "mat-action-row" }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i15.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i16.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i17.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i18.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i19.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i20.MatAutocompleteField, selector: "mat-autocomplete-field", inputs: ["equals", "logPrefix", "formControl", "formControlName", "floatLabel", "label", "appearance", "subscriptSizing", "placeholder", "suggestFn", "required", "hideRequiredMarker", "mobile", "clearable", "debounceTime", "displaySeparator", "displayWith", "displayAttributes", "displayColumnSizes", "displayColumnNames", "highlightAccent", "showAllOnFocus", "showPanelOnFocus", "reloadItemsOnFocus", "clearInvalidValueOnBlur", "autofocus", "config", "i18nPrefix", "noResultMessage", "panelClass", "panelWidth", "disableRipple", "matAutocompletePosition", "multiple", "fetchMoreThreshold", "suggestLengthThreshold", "showLoadingSpinner", "debug", "showSearchBar", "stickySearchBar", "applyImplicitValue", "dropButtonTitle", "clearButtonTitle", "trimSearchText", "splitSearchText", "selectInputContentOnFocus", "selectInputContentOnFocusDelay", "previewImplicitValue", "class", "filter", "readonly", "tabindex", "items"], outputs: ["click", "blur", "focus", "dropButtonClick", "keydown.escape", "keydown.backspace", "keyup.enter", "selectionChange"] }, { kind: "component", type: i21.MatLatLongField2, selector: "mat-latlong-field", inputs: ["formControl", "formControlName", "type", "latLongPattern", "required", "floatLabel", "placeholder", "defaultSign", "autofocus", "mobile", "degreesSymbolUnit", "minutesSymbolUnit", "secondsSymbolUnit", "clearable", "tabindex", "appearance", "readonly", "subscriptSizing"], outputs: ["keyup.enter", "blur", "focus"] }, { kind: "component", type: i22.MatDateTime, selector: "mat-date-time-field", inputs: ["placeholder", "floatLabel", "mobile", "compact", "autofocus", "clearable", "startDate", "datePickerFilter", "allowNoTime", "appearance", "subscriptSizing", "formControl", "formControlName", "required", "readonly", "tabindex"] }, { kind: "component", type: i23.MatBooleanField, selector: "mat-boolean-field", inputs: ["disabled", "formControl", "formControlName", "placeholder", "floatLabel", "appearance", "subscriptSizing", "readonly", "required", "compact", "style", "buttonsColCount", "class", "yesLabel", "noLabel", "showButtonIcons", "yesIcon", "noIcon", "clearable", "labelPosition", "tabindex", "showRadio", "value"], outputs: ["keyup.enter", "blur"] }, { kind: "directive", type: i24.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "directive", type: i25.AutoTitleDirective, selector: "[appAutoTitle]" }, { kind: "component", type: i26.ToolbarComponent, selector: "app-toolbar", inputs: ["progressBarMode", "title", "color", "class", "backHref", "defaultBackHref", "hasValidate", "hasClose", "hasSearch", "canGoBack", "canShowMenu"], outputs: ["onValidate", "onClose", "onValidateAndClose", "onBackClick", "onSearch"] }, { kind: "component", type: i27.FormButtonsBarComponent, selector: "app-form-buttons-bar", inputs: ["disabled", "disabledCancel", "disabledEscape", "classList", "saveButtonColor", "backText", "cancelText", "nextText", "showBack", "showCancel", "showNext", "showSave"], outputs: ["onCancel", "onSave", "onNext", "onBack", "onSaveAndClose", "onSaveAndNext"] }, { kind: "component", type: i28.NavActionsColumnComponent, selector: "app-nav-actions-column", inputs: ["appTable", "matColumnDef", "style", "stickyEnd", "showPending", "dirtyIcon", "optionsTitle", "class", "cellTemplate", "throttleTime"], outputs: ["optionsClick"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i29.ResizableComponent, selector: "th[resizable]", inputs: ["resizable"], outputs: ["sizeChanged"] }, { kind: "directive", type: i30.ResizableDirective, selector: "[resizable]", outputs: ["resizable", "fit"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i31.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i32.LatitudeFormatPipe, name: "latitudeFormat" }, { kind: "pipe", type: i33.NumberFormatPipe, name: "numberFormat" }, { kind: "pipe", type: i34.ArrayLengthPipe, name: "isArrayLength" }, { kind: "pipe", type: i35.FormGetControlPipe, name: "formGetControl" }, { kind: "pipe", type: i35.FormGetValuePipe, name: "formGetValue" }, { kind: "pipe", type: i36.IsSelectedPipe, name: "isSelected" }, { kind: "pipe", type: i36.IsEmptySelectionPipe, name: "isEmptySelection" }, { kind: "pipe", type: i36.IsMultipleSelectionPipe, name: "isMultipleSelection" }, { kind: "pipe", type: i37.IsAllSelectedPipe, name: "isAllSelected" }, { kind: "pipe", type: i37.IsNotAllSelectedPipe, name: "isNotAllSelected" }, { kind: "pipe", type: i38.ReferentialToStringPipe, name: "referentialToString" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
301
301
  }
302
302
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: TableTestPage, decorators: [{
303
303
  type: Component,
@@ -239,7 +239,11 @@ export function getInputSelectionRangesFromMask(mask) {
239
239
  let first_index;
240
240
  let last_index;
241
241
  for (let i = 0; i < mask.length; i++) {
242
- if (mask[i] instanceof RegExp) {
242
+ if (i === 0 && mask[i].toString() === '/[+-]/') {
243
+ console.debug('TODO push start mask', { i, mask: mask[i].toString() });
244
+ result.push([0, 0]);
245
+ }
246
+ else if (mask[i] instanceof RegExp) {
243
247
  if (isNil(first_index)) {
244
248
  first_index = i;
245
249
  }
@@ -267,4 +271,4 @@ export function getInputRangeFromCaretIndex(caretIndex, inputRanges) {
267
271
  }
268
272
  return null;
269
273
  }
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaW5wdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0Isa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxHLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxLQUFZO0lBQ3RELElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLGdCQUFnQjtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ25ELE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQTBCLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQW1EO0lBQ3BGLDJDQUEyQztJQUMzQyxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0dBQXdHLENBQUMsQ0FBQztRQUN2SCxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV4QixvQkFBb0I7SUFDcEIsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRTVDLElBQUksT0FBTyxLQUFLLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQztZQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxH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IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9jdXNhYmxlRWxlbWVudCwgaXNGb2N1c2FibGVFbGVtZW50IH0gZnJvbSAnLi9mb2N1c2FibGUnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgdG9Cb29sZWFuLCB0b051bWJlciB9IGZyb20gJy4vZnVuY3Rpb25zJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdElucHV0Q29udGVudEZyb21FdmVudChldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBzZWxlY3RJbnB1dENvbnRlbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0SW5wdXRDb250ZW50KGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IGFueSk6IGJvb2xlYW4ge1xuICAvLyBEZXRlY3QgZGVwcmVjYXRlZCB1c2FnZSAoYmVmb3JlIDE4LjIuMjEpXG4gIGlmIChpbnB1dD8udGFyZ2V0IHx8IGlucHV0IGluc3RhbmNlb2YgRXZlbnQpIHtcbiAgICBjb25zb2xlLndhcm4oJ0RFUFJFQ0FURUQgdXNhZ2Ugc2luY2UgMTguMi4yMSAtIFBsZWFzZSB1c2Ugc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50KCkgaW5zdGVhZCBzZWxlY3RJbnB1dENvbnRlbnQoKScpO1xuICAgIGlucHV0ID0gaW5wdXQudGFyZ2V0O1xuICB9XG4gIGlmICghaW5wdXQpIHJldHVybiB0cnVlO1xuXG4gIC8vIE5vdGhpbmcgdG8gc2VsZWN0XG4gIGlmIChpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBpbnB1dC5zZWxlY3RSYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbnB1dC5zZWxlY3RSYW5nZShpbnB1dC52YWx1ZS5sZW5ndGgsIDApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IGNvbnRlbnQsIHVzaW5nIHNlbGVjdFJhbmdlKCknLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnB1dCAmJiB0eXBlb2YgaW5wdXQuc2VsZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IGNvbnRlbnQsIHVzaW5nIHNlbGVjdCgpJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJbnB1dFJhbmdlKFxuICBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQsXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgZW5kSW5kZXg/OiBudW1iZXIsXG4gIGRpcmVjdGlvbj86ICdiYWNrd2FyZCcgfCAnZm9yd2FyZCcgfCAnbm9uZSdcbikge1xuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0LnNldFNlbGVjdGlvblJhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gTm8gY29udGVudFxuICAgIGlmIChpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnRJbmRleCwgZW5kSW5kZXggPz8gc3RhcnRJbmRleCwgZGlyZWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBzZWxlY3QgaW5wdXQgcmFuZ2UnLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhcmV0UG9zaXRpb24oaW5wdXQ6IGFueSk6IG51bWJlciB7XG4gIGlmIChpbnB1dCAmJiBpbnB1dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGlucHV0LnNlbGVjdGlvbkRpcmVjdGlvbiA/IChpbnB1dC5zZWxlY3Rpb25EaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBpbnB1dC5zZWxlY3Rpb25TdGFydCA6IGlucHV0LnNlbGVjdGlvbkVuZCkgOiBpbnB1dC5zZWxlY3Rpb25TdGFydDtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBzZXBhcmF0b3I6IHN0cmluZywgZm9yd2FyZD86IGJvb2xlYW4pIHtcbiAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIXNlcGFyYXRvcikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBhbnk7XG4gIGlmICghaW5wdXQpIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBnZXRDYXJldFBvc2l0aW9uKGlucHV0KTtcblxuICAvLyBERUJVR1xuICAvL2NvbnNvbGUuZGVidWcoJ2NhcmV0UG9zaXRpb249JywgY2FyZXRQb3NpdGlvbik7XG5cbiAgaWYgKGNhcmV0UG9zaXRpb24gPT09IC0xKSByZXR1cm4gdHJ1ZTsgLy8gQ2FyZXQgcG9zIG5vdCBmb3VuZDogc2tpcFxuXG4gIC8vIEdldCBpbnB1dCB2YWx1ZVxuICBjb25zdCB2YWx1ZSA9IGlucHV0LnZhbHVlIGFzIHN0cmluZztcblxuICAvLyBObyBjb250ZW50OiBza2lwXG4gIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBpZiAodmFsdWUgJiYgY2FyZXRQb3NpdGlvbiA8PSB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJJbnB1dCB0ZXh0IHZhbHVlOiBcIiwgdmFsdWUpO1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ3Vyc29yIGF0OiBcIiwgY2FyZXRQb3NpdGlvbik7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJUZXh0IGFmdGVyIGN1cnNvcjogXCIsIHZhbHVlLnN1YnN0cihjYXJldFBvc2l0aW9uKSk7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJOZXh0IHNlcGFyYXRvciBhdDogXCIsIHZhbHVlLmluZGV4T2Yoc2VwYXJhdG9yLCBjYXJldFBvc2l0aW9uKSk7XG5cbiAgICAgIGZvcndhcmQgPSBmb3J3YXJkICE9PSBmYWxzZTtcblxuICAgICAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSBmb3J3YXJkID8gdmFsdWUuaW5kZXhPZihzZXBhcmF0b3IsIGNhcmV0UG9zaXRpb24pIDogdmFsdWUubGFzdEluZGV4T2Yoc2VwYXJhdG9yLCBjYXJldFBvc2l0aW9uKTtcbiAgICAgIGlmIChzZXBhcmF0b3JJbmRleCAhPT0gLTEgJiYgKChmb3J3YXJkICYmIHNlcGFyYXRvckluZGV4ICsgMSA8IHZhbHVlLmxlbmd0aCkgfHwgKCFmb3J3YXJkICYmIHNlcGFyYXRvckluZGV4ID4gMCkpKSB7XG4gICAgICAgIGlmIChpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgIC8vIE1vdmUgYWZ0ZXIgdGhlIG5leHQgc2VwYXJhdG9yXG4gICAgICAgICAgaWYgKHNlbGVjdElucHV0UmFuZ2UoaW5wdXQsIHNlcGFyYXRvckluZGV4ICsgKGZvcndhcmQgPyAxIDogLTEpKSkge1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUga2V5Ym9hcmQgZXZlbnRcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBtb3ZlIGNhcmV0IHRvIG5leHQgc2VwYXJhdG9yJywgZXJyKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOdW1iZXJJbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCwgYWxsb3dEZWNpbWFsczogYm9vbGVhbiwgZGVjaW1hbFNlcGFyYXRvcj86IHN0cmluZykge1xuICAvL2lucHV0IG51bWJlciBlbnRlcmVkIG9yIG9uZSBvZiB0aGUgNCBkaXJlY3Rpb24gdXAsIGRvd24sIGxlZnQgYW5kIHJpZ2h0XG4gIGlmICgoZXZlbnQud2hpY2ggPj0gNDggJiYgZXZlbnQud2hpY2ggPD0gNTcpIHx8IChldmVudC53aGljaCA+PSAzNyAmJiBldmVudC53aGljaCA8PSA0MCkpIHtcbiAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG51bWJlciBlbnRlcmVkIDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuICAgIC8vIE9LXG4gIH1cbiAgLy8gRGVjaW1hbCBzZXBhcmF0b3JcbiAgZWxzZSBpZiAoXG4gICAgYWxsb3dEZWNpbWFscyAmJlxuICAgICgoIWRlY2ltYWxTZXBhcmF0b3IgJiYgKGV2ZW50LmtleSA9PT0gJy4nIHx8IGV2ZW50LmtleSA9PT0gJywnKSkgfHwgKGRlY2ltYWxTZXBhcmF0b3IgJiYgZXZlbnQua2V5ID09PSBkZWNpbWFsU2VwYXJhdG9yKSlcbiAgKSB7XG4gICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBkZWNpbWFsIHNlcGFyYXRvciBlbnRlcmVkIDonICsgZXZlbnQuY29kZSk7XG4gICAgLy8gT0tcbiAgfSBlbHNlIHtcbiAgICAvL2lucHV0IGNvbW1hbmQgZW50ZXJlZCBvZiBkZWxldGUsIGJhY2tzcGFjZSBvciBvbmUgb2YgdGhlIDQgZGlyZWN0aW9uIHVwLCBkb3duLCBsZWZ0IGFuZCByaWdodCwgb3IgbmVnYXRpdmUgc2lnblxuICAgIGlmICgoZXZlbnQua2V5Q29kZSA+PSAzNyAmJiBldmVudC5rZXlDb2RlIDw9IDQwKSB8fCBldmVudC5rZXlDb2RlID09IDQ2IHx8IGV2ZW50LndoaWNoID09IDggfHwgZXZlbnQua2V5Q29kZSA9PSA5IHx8IGV2ZW50LmtleUNvZGUgPT0gNDUpIHtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnaW5wdXQgY29tbWFuZCBlbnRlcmVkIDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuICAgICAgLy8gT0tcbiAgICB9XG4gICAgLy8gQ2FuY2VsIG90aGVyIGtleWJvYXJkIGV2ZW50c1xuICAgIGVsc2Uge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBub3QgbnVtYmVyIGVudGVyZWQgOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSArICcgJyArIGV2ZW50LmNvZGUgKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c0lucHV0PFQgPSBhbnk+KGVsZW1lbnQ6IEVsZW1lbnRSZWY8VD4pIHtcbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gYXNJbnB1dEVsZW1lbnQoZWxlbWVudCk7XG4gIGlmIChpbnB1dEVsZW1lbnQpIGlucHV0RWxlbWVudC5mb2N1cygpO1xuICBlbHNlIHtcbiAgICBjb25zb2xlLndhcm4oJ1RyeWluZyB0byBmb2N1cyBvbiB0aGlzIGVsZW1lbnQ6JywgZWxlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRhYkluZGV4PFQgPSBhbnk+KGVsZW1lbnQ6IEVsZW1lbnRSZWY8VD4sIHRhYkluZGV4OiBudW1iZXIpIHtcbiAgaWYgKGlzSW5wdXRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgZWxlbWVudC50YWJpbmRleCA9IHRhYkluZGV4O1xuICB9IGVsc2UgaWYgKGVsZW1lbnQgJiYgaXNJbnB1dEVsZW1lbnQoZWxlbWVudC5uYXRpdmVFbGVtZW50KSkge1xuICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRhYkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIGNoYW5nZSB0YWJpbmRleCBvbiB0aGlzIGVsZW1lbnQ6JywgZWxlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dEVsZW1lbnQgZXh0ZW5kcyBGb2N1c2FibGVFbGVtZW50IHtcbiAgdGFiaW5kZXg/OiBudW1iZXI7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHZhbHVlOiBhbnk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnB1dEVsZW1lbnQob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgSW5wdXRFbGVtZW50IHtcbiAgcmV0dXJuIChcbiAgICBpc0ZvY3VzYWJsZUVsZW1lbnQob2JqZWN0KSAmJlxuICAgICgndmFsdWUnIGluIG9iamVjdCB8fFxuICAgICAgLy8gaGFzIHZhbHVlIGlzIG5vdCBhbHdheXMgc2V0IChuZWl0aGVyIHRhYmluZGV4KSBjaGVjayBvbiAyIHByb3BlcnRpZXMgd2l0aCBhIGxvZ2ljYWwgT1JcbiAgICAgICd0YWJpbmRleCcgaW4gb2JqZWN0IHx8XG4gICAgICAndGFiSW5kZXgnIGluIG9iamVjdClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzSW5wdXRFbGVtZW50PFQgPSBhbnk+KG9iamVjdDogRWxlbWVudFJlZjxUPik6IElucHV0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmplY3QpIHtcbiAgICBpZiAoaXNJbnB1dEVsZW1lbnQob2JqZWN0KSkgcmV0dXJuIG9iamVjdDtcbiAgICBpZiAob2JqZWN0Lm5hdGl2ZUVsZW1lbnQgJiYgaXNJbnB1dEVsZW1lbnQob2JqZWN0Lm5hdGl2ZUVsZW1lbnQpKSByZXR1cm4gb2JqZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmluZGV4Q29tcGFyYXRvcihhOiBJbnB1dEVsZW1lbnQsIGI6IElucHV0RWxlbWVudCkge1xuICBjb25zdCB2YWx1ZUEgPSBhLnRhYmluZGV4IHx8IGEudGFiSW5kZXg7XG4gIGNvbnN0IHZhbHVlQiA9IGIudGFiaW5kZXggfHwgYi50YWJJbmRleDtcbiAgcmV0dXJuIHZhbHVlQSA9PT0gdmFsdWVCID8gMCA6IHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAtMTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5HYWluRm9jdXNPcHRpb25zIHtcbiAgbWluVGFiaW5kZXg/OiBudW1iZXI7XG4gIG1heFRhYmluZGV4PzogbnVtYmVyO1xuICBleGNsdWRlRW1wdHlJbnB1dD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Rm9jdXNhYmxlSW5wdXRPcHRpb25zIGV4dGVuZHMgQ2FuR2FpbkZvY3VzT3B0aW9ucyB7XG4gIHNvcnRCeVRhYkluZGV4PzogYm9vbGVhbjtcbiAgZGVidWc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FuSGF2ZUZvY3VzKGlucHV0OiBJbnB1dEVsZW1lbnQsIG9wdHM/OiBDYW5HYWluRm9jdXNPcHRpb25zKTogYm9vbGVhbiB7XG4gIGlmICghaW5wdXQpIHJldHVybiBmYWxzZTtcbiAgLy8gRXhjbHVkZSBkaXNhYmxlZCBlbGVtZW50XG4gIHJldHVybiAoXG4gICAgIXRvQm9vbGVhbihpbnB1dC5kaXNhYmxlZCwgZmFsc2UpICYmXG4gICAgLy8gRXhjbHVkZSBoaWRkZW4gZWxlbWVudFxuICAgICF0b0Jvb2xlYW4oaW5wdXQuaGlkZGVuLCBmYWxzZSkgJiZcbiAgICAvLyBFeGNsdWRlIG1pblRhYkluZGV4IDwgZWxlbWVudC50YWJJbmRleFxuICAgIChpc05pbChvcHRzLm1pblRhYmluZGV4KSB8fCB0b051bWJlcihpbnB1dC50YWJJbmRleCwgaW5wdXQudGFiaW5kZXgpID4gb3B0cy5taW5UYWJpbmRleCkgJiZcbiAgICAvLyBFeGNsdWRlIG1heFRhYkluZGV4ID4gZWxlbWVudC50YWJJbmRleFxuICAgIChpc05pbChvcHRzLm1heFRhYmluZGV4KSB8fCB0b051bWJlcihpbnB1dC50YWJJbmRleCwgaW5wdXQudGFiaW5kZXgpIDwgb3B0cy5tYXhUYWJpbmRleCkgJiZcbiAgICAvLyBFeGNsdWRlIG5pbCBpbnB1dCB2YWx1ZVxuICAgICghb3B0cy5leGNsdWRlRW1wdHlJbnB1dCB8fCBpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlSW5wdXRFbGVtZW50cyhlbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+LCBvcHRzPzogR2V0Rm9jdXNhYmxlSW5wdXRPcHRpb25zKTogSW5wdXRFbGVtZW50W10ge1xuICBvcHRzID0geyBzb3J0QnlUYWJJbmRleDogZmFsc2UsIGV4Y2x1ZGVFbXB0eUlucHV0OiBmYWxzZSwgLi4ub3B0cyB9O1xuXG4gIC8vIEZvY3VzIHRvIGZpcnN0IGlucHV0XG4gIGNvbnN0IGZpbHRlcmVkRWxlbWVudHM6IElucHV0RWxlbWVudFtdID0gZWxlbWVudHNcblxuICAgIC8vIFRyYW5zZm9ybSB0byBpbnB1dFxuICAgIC5tYXAoYXNJbnB1dEVsZW1lbnQpXG5cbiAgICAuZmlsdGVyKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZWQgPSBjYW5IYXZlRm9jdXMoaW5wdXQsIG9wdHMpO1xuICAgICAgLy8gREVCVUdcbiAgICAgIGlmIChpbnB1dCAmJiBvcHRzLmRlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKGBbaW5wdXRzXSBGb2N1c2FibGUgaW5wdXQge2NhbkZvY3VzOiAke2luY2x1ZGVkfSwgdGFiSW5kZXg6ICR7aW5wdXQudGFiSW5kZXggfHwgaW5wdXQudGFiaW5kZXh9fWAsIGlucHV0KTtcbiAgICAgIHJldHVybiBpbmNsdWRlZDtcbiAgICB9KTtcblxuICAvLyBTb3J0IGJ5IHRhYkluZGV4XG4gIGlmIChvcHRzLnNvcnRCeVRhYkluZGV4KSB7XG4gICAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHMuc29ydCh0YWJpbmRleENvbXBhcmF0b3IpO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c05leHRJbnB1dDxUID0gYW55PihldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIGVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxUPj4sIG9wdHM/OiBHZXRGb2N1c2FibGVJbnB1dE9wdGlvbnMpOiBib29sZWFuIHtcbiAgLy8gQ2FuY2VsbGluZyBldmVudCAoZS5nLiB3aGVuIGVtaXR0ZWQgYnkgKGtleWRvd24udGFiKSApXG4gIGlmIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvLyBHZXQgY3VycmVudCBpbmRleFxuICBjb25zdCBtaW5UYWJpbmRleCA9IGV2ZW50ICYmIGlzSW5wdXRFbGVtZW50KGV2ZW50LnRhcmdldCkgPyBldmVudC50YXJnZXQudGFiSW5kZXggfHwgZXZlbnQudGFyZ2V0LnRhYmluZGV4IDogdW5kZWZpbmVkO1xuXG4gIC8vIEdldCBmb2N1c2FibGUgaW5wdXQgZWxlbWVudHNcbiAgY29uc3QgZm9jdXNhYmxlSW5wdXRzOiBJbnB1dEVsZW1lbnRbXSA9IGdldEZvY3VzYWJsZUlucHV0RWxlbWVudHMoZWxlbWVudHMsIHsgbWluVGFiaW5kZXgsIC4uLm9wdHMgfSk7XG5cbiAgaWYgKGlzTm90RW1wdHlBcnJheShmb2N1c2FibGVJbnB1dHMpKSB7XG4gICAgLy8gRm9jdXMgb24gZmlyc3QgaW5wdXRzXG4gICAgZm9jdXNhYmxlSW5wdXRzWzBdLmZvY3VzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c1ByZXZpb3VzSW5wdXQ8VCA9IGFueT4oZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCBlbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY8VD4+LCBvcHRzPzogR2V0Rm9jdXNhYmxlSW5wdXRPcHRpb25zKTogYm9vbGVhbiB7XG4gIC8vIENhbmNlbGxpbmcgZXZlbnQgKGUuZy4gd2hlbiBlbWl0dGVkIGJ5IChrZXlkb3duLnRhYikgKVxuICBpZiAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLy8gR2V0IGN1cnJlbnQgaW5kZXhcbiAgY29uc3QgbWF4VGFiaW5kZXggPSBldmVudCAmJiBpc0lucHV0RWxlbWVudChldmVudC50YXJnZXQpID8gZXZlbnQudGFyZ2V0LnRhYkluZGV4IHx8IGV2ZW50LnRhcmdldC50YWJpbmRleCA6IHVuZGVmaW5lZDtcblxuICAvLyBHZXQgZm9jdXNhYmxlIGlucHV0IGVsZW1lbnRzXG4gIGNvbnN0IGZvY3VzYWJsZUlucHV0czogSW5wdXRFbGVtZW50W10gPSBnZXRGb2N1c2FibGVJbnB1dEVsZW1lbnRzKGVsZW1lbnRzLCB7IG1heFRhYmluZGV4LCAuLi5vcHRzIH0pO1xuXG4gIGlmIChpc05vdEVtcHR5QXJyYXkoZm9jdXNhYmxlSW5wdXRzKSkge1xuICAgIC8vIEZvY3VzIG9uIGxhc3QgaW5wdXRzXG4gICAgZm9jdXNhYmxlSW5wdXRzW2ZvY3VzYWJsZUlucHV0cy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRTZWxlY3Rpb25SYW5nZXNGcm9tTWFzayhtYXNrOiAoc3RyaW5nIHwgUmVnRXhwKVtdKTogbnVtYmVyW11bXSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBsZXQgZmlyc3RfaW5kZXg6IG51bWJlcjtcbiAgbGV0IGxhc3RfaW5kZXg6IG51bWJlcjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG1hc2tbaV0gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGlmIChpc05pbChmaXJzdF9pbmRleCkpIHtcbiAgICAgICAgZmlyc3RfaW5kZXggPSBpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNOb3ROaWwoZmlyc3RfaW5kZXgpKSB7XG4gICAgICAgIGxhc3RfaW5kZXggPSBpIC0gMTtcbiAgICAgICAgcmVzdWx0LnB1c2goW2ZpcnN0X2luZGV4LCBsYXN0X2luZGV4XSk7XG4gICAgICAgIGZpcnN0X2luZGV4ID0gbnVsbDtcbiAgICAgICAgbGFzdF9pbmRleCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChtYXNrW21hc2subGVuZ3RoIC0gMV0gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICBsYXN0X2luZGV4ID0gbWFzay5sZW5ndGggLSAxO1xuICAgIHJlc3VsdC5wdXNoKFtmaXJzdF9pbmRleCwgbGFzdF9pbmRleF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dFJhbmdlRnJvbUNhcmV0SW5kZXgoY2FyZXRJbmRleDogbnVtYmVyLCBpbnB1dFJhbmdlczogbnVtYmVyW11bXSk6IG51bWJlcltdIHtcbiAgZm9yIChjb25zdCBpbnB1dFJhbmdlIG9mIGlucHV0UmFuZ2VzKSB7XG4gICAgaWYgKGNhcmV0SW5kZXggPj0gaW5wdXRSYW5nZVswXSAmJiBjYXJldEluZGV4IDw9IGlucHV0UmFuZ2VbMV0gKyAxKSB7XG4gICAgICByZXR1cm4gaW5wdXRSYW5nZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaW5wdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0Isa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxHLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxLQUFZO0lBQ3RELElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLGdCQUFnQjtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ25ELE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQTBCLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQW1EO0lBQ3BGLDJDQUEyQztJQUMzQyxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0dBQXdHLENBQUMsQ0FBQztRQUN2SCxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV4QixvQkFBb0I7SUFDcEIsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRTVDLElBQUksT0FBTyxLQUFLLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQztZQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxH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O0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLFVBQWtCLEVBQUUsV0FBdUI7SUFDckYsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNyQyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9jdXNhYmxlRWxlbWVudCwgaXNGb2N1c2FibGVFbGVtZW50IH0gZnJvbSAnLi9mb2N1c2FibGUnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgdG9Cb29sZWFuLCB0b051bWJlciB9IGZyb20gJy4vZnVuY3Rpb25zJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdElucHV0Q29udGVudEZyb21FdmVudChldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBzZWxlY3RJbnB1dENvbnRlbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0SW5wdXRDb250ZW50KGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IGFueSk6IGJvb2xlYW4ge1xuICAvLyBEZXRlY3QgZGVwcmVjYXRlZCB1c2FnZSAoYmVmb3JlIDE4LjIuMjEpXG4gIGlmIChpbnB1dD8udGFyZ2V0IHx8IGlucHV0IGluc3RhbmNlb2YgRXZlbnQpIHtcbiAgICBjb25zb2xlLndhcm4oJ0RFUFJFQ0FURUQgdXNhZ2Ugc2luY2UgMTguMi4yMSAtIFBsZWFzZSB1c2Ugc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50KCkgaW5zdGVhZCBzZWxlY3RJbnB1dENvbnRlbnQoKScpO1xuICAgIGlucHV0ID0gaW5wdXQudGFyZ2V0O1xuICB9XG4gIGlmICghaW5wdXQpIHJldHVybiB0cnVlO1xuXG4gIC8vIE5vdGhpbmcgdG8gc2VsZWN0XG4gIGlmIChpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBpbnB1dC5zZWxlY3RSYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbnB1dC5zZWxlY3RSYW5nZShpbnB1dC52YWx1ZS5sZW5ndGgsIDApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IGNvbnRlbnQsIHVzaW5nIHNlbGVjdFJhbmdlKCknLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnB1dCAmJiB0eXBlb2YgaW5wdXQuc2VsZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IGNvbnRlbnQsIHVzaW5nIHNlbGVjdCgpJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJbnB1dFJhbmdlKFxuICBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQsXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgZW5kSW5kZXg/OiBudW1iZXIsXG4gIGRpcmVjdGlvbj86ICdiYWNrd2FyZCcgfCAnZm9yd2FyZCcgfCAnbm9uZSdcbikge1xuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0LnNldFNlbGVjdGlvblJhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gTm8gY29udGVudFxuICAgIGlmIChpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnRJbmRleCwgZW5kSW5kZXggPz8gc3RhcnRJbmRleCwgZGlyZWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBzZWxlY3QgaW5wdXQgcmFuZ2UnLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhcmV0UG9zaXRpb24oaW5wdXQ6IGFueSk6IG51bWJlciB7XG4gIGlmIChpbnB1dCAmJiBpbnB1dC5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGlucHV0LnNlbGVjdGlvbkRpcmVjdGlvbiA/IChpbnB1dC5zZWxlY3Rpb25EaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBpbnB1dC5zZWxlY3Rpb25TdGFydCA6IGlucHV0LnNlbGVjdGlvbkVuZCkgOiBpbnB1dC5zZWxlY3Rpb25TdGFydDtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBzZXBhcmF0b3I6IHN0cmluZywgZm9yd2FyZD86IGJvb2xlYW4pIHtcbiAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIXNlcGFyYXRvcikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBhbnk7XG4gIGlmICghaW5wdXQpIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBnZXRDYXJldFBvc2l0aW9uKGlucHV0KTtcblxuICAvLyBERUJVR1xuICAvL2NvbnNvbGUuZGVidWcoJ2NhcmV0UG9zaXRpb249JywgY2FyZXRQb3NpdGlvbik7XG5cbiAgaWYgKGNhcmV0UG9zaXRpb24gPT09IC0xKSByZXR1cm4gdHJ1ZTsgLy8gQ2FyZXQgcG9zIG5vdCBmb3VuZDogc2tpcFxuXG4gIC8vIEdldCBpbnB1dCB2YWx1ZVxuICBjb25zdCB2YWx1ZSA9IGlucHV0LnZhbHVlIGFzIHN0cmluZztcblxuICAvLyBObyBjb250ZW50OiBza2lwXG4gIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBpZiAodmFsdWUgJiYgY2FyZXRQb3NpdGlvbiA8PSB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJJbnB1dCB0ZXh0IHZhbHVlOiBcIiwgdmFsdWUpO1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ3Vyc29yIGF0OiBcIiwgY2FyZXRQb3NpdGlvbik7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJUZXh0IGFmdGVyIGN1cnNvcjogXCIsIHZhbHVlLnN1YnN0cihjYXJldFBvc2l0aW9uKSk7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJOZXh0IHNlcGFyYXRvciBhdDogXCIsIHZhbHVlLmluZGV4T2Yoc2VwYXJhdG9yLCBjYXJldFBvc2l0aW9uKSk7XG5cbiAgICAgIGZvcndhcmQgPSBmb3J3YXJkICE9PSBmYWxzZTtcblxuICAgICAgY29uc3Qgc2VwYXJhdG9ySW5kZXggPSBmb3J3YXJkID8gdmFsdWUuaW5kZXhPZihzZXBhcmF0b3IsIGNhcmV0UG9zaXRpb24pIDogdmFsdWUubGFzdEluZGV4T2Yoc2VwYXJhdG9yLCBjYXJldFBvc2l0aW9uKTtcbiAgICAgIGlmIChzZXBhcmF0b3JJbmRleCAhPT0gLTEgJiYgKChmb3J3YXJkICYmIHNlcGFyYXRvckluZGV4ICsgMSA8IHZhbHVlLmxlbmd0aCkgfHwgKCFmb3J3YXJkICYmIHNlcGFyYXRvckluZGV4ID4gMCkpKSB7XG4gICAgICAgIGlmIChpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgIC8vIE1vdmUgYWZ0ZXIgdGhlIG5leHQgc2VwYXJhdG9yXG4gICAgICAgICAgaWYgKHNlbGVjdElucHV0UmFuZ2UoaW5wdXQsIHNlcGFyYXRvckluZGV4ICsgKGZvcndhcmQgPyAxIDogLTEpKSkge1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUga2V5Ym9hcmQgZXZlbnRcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBtb3ZlIGNhcmV0IHRvIG5leHQgc2VwYXJhdG9yJywgZXJyKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOdW1iZXJJbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCwgYWxsb3dEZWNpbWFsczogYm9vbGVhbiwgZGVjaW1hbFNlcGFyYXRvcj86IHN0cmluZykge1xuICAvL2lucHV0IG51bWJlciBlbnRlcmVkIG9yIG9uZSBvZiB0aGUgNCBkaXJlY3Rpb24gdXAsIGRvd24sIGxlZnQgYW5kIHJpZ2h0XG4gIGlmICgoZXZlbnQud2hpY2ggPj0gNDggJiYgZXZlbnQud2hpY2ggPD0gNTcpIHx8IChldmVudC53aGljaCA+PSAzNyAmJiBldmVudC53aGljaCA8PSA0MCkpIHtcbiAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG51bWJlciBlbnRlcmVkIDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuICAgIC8vIE9LXG4gIH1cbiAgLy8gRGVjaW1hbCBzZXBhcmF0b3JcbiAgZWxzZSBpZiAoXG4gICAgYWxsb3dEZWNpbWFscyAmJlxuICAgICgoIWRlY2ltYWxTZXBhcmF0b3IgJiYgKGV2ZW50LmtleSA9PT0gJy4nIHx8IGV2ZW50LmtleSA9PT0gJywnKSkgfHwgKGRlY2ltYWxTZXBhcmF0b3IgJiYgZXZlbnQua2V5ID09PSBkZWNpbWFsU2VwYXJhdG9yKSlcbiAgKSB7XG4gICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBkZWNpbWFsIHNlcGFyYXRvciBlbnRlcmVkIDonICsgZXZlbnQuY29kZSk7XG4gICAgLy8gT0tcbiAgfSBlbHNlIHtcbiAgICAvL2lucHV0IGNvbW1hbmQgZW50ZXJlZCBvZiBkZWxldGUsIGJhY2tzcGFjZSBvciBvbmUgb2YgdGhlIDQgZGlyZWN0aW9uIHVwLCBkb3duLCBsZWZ0IGFuZCByaWdodCwgb3IgbmVnYXRpdmUgc2lnblxuICAgIGlmICgoZXZlbnQua2V5Q29kZSA+PSAzNyAmJiBldmVudC5rZXlDb2RlIDw9IDQwKSB8fCBldmVudC5rZXlDb2RlID09IDQ2IHx8IGV2ZW50LndoaWNoID09IDggfHwgZXZlbnQua2V5Q29kZSA9PSA5IHx8IGV2ZW50LmtleUNvZGUgPT0gNDUpIHtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnaW5wdXQgY29tbWFuZCBlbnRlcmVkIDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuICAgICAgLy8gT0tcbiAgICB9XG4gICAgLy8gQ2FuY2VsIG90aGVyIGtleWJvYXJkIGV2ZW50c1xuICAgIGVsc2Uge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBub3QgbnVtYmVyIGVudGVyZWQgOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSArICcgJyArIGV2ZW50LmNvZGUgKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c0lucHV0PFQgPSBhbnk+KGVsZW1lbnQ6IEVsZW1lbnRSZWY8VD4pIHtcbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gYXNJbnB1dEVsZW1lbnQoZWxlbWVudCk7XG4gIGlmIChpbnB1dEVsZW1lbnQpIGlucHV0RWxlbWVudC5mb2N1cygpO1xuICBlbHNlIHtcbiAgICBjb25zb2xlLndhcm4oJ1RyeWluZyB0byBmb2N1cyBvbiB0aGlzIGVsZW1lbnQ6JywgZWxlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRhYkluZGV4PFQgPSBhbnk+KGVsZW1lbnQ6IEVsZW1lbnRSZWY8VD4sIHRhYkluZGV4OiBudW1iZXIpIHtcbiAgaWYgKGlzSW5wdXRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgZWxlbWVudC50YWJpbmRleCA9IHRhYkluZGV4O1xuICB9IGVsc2UgaWYgKGVsZW1lbnQgJiYgaXNJbnB1dEVsZW1lbnQoZWxlbWVudC5uYXRpdmVFbGVtZW50KSkge1xuICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRhYkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIGNoYW5nZSB0YWJpbmRleCBvbiB0aGlzIGVsZW1lbnQ6JywgZWxlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dEVsZW1lbnQgZXh0ZW5kcyBGb2N1c2FibGVFbGVtZW50IHtcbiAgdGFiaW5kZXg/OiBudW1iZXI7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHZhbHVlOiBhbnk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnB1dEVsZW1lbnQob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgSW5wdXRFbGVtZW50IHtcbiAgcmV0dXJuIChcbiAgICBpc0ZvY3VzYWJsZUVsZW1lbnQob2JqZWN0KSAmJlxuICAgICgndmFsdWUnIGluIG9iamVjdCB8fFxuICAgICAgLy8gaGFzIHZhbHVlIGlzIG5vdCBhbHdheXMgc2V0IChuZWl0aGVyIHRhYmluZGV4KSBjaGVjayBvbiAyIHByb3BlcnRpZXMgd2l0aCBhIGxvZ2ljYWwgT1JcbiAgICAgICd0YWJpbmRleCcgaW4gb2JqZWN0IHx8XG4gICAgICAndGFiSW5kZXgnIGluIG9iamVjdClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzSW5wdXRFbGVtZW50PFQgPSBhbnk+KG9iamVjdDogRWxlbWVudFJlZjxUPik6IElucHV0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmplY3QpIHtcbiAgICBpZiAoaXNJbnB1dEVsZW1lbnQob2JqZWN0KSkgcmV0dXJuIG9iamVjdDtcbiAgICBpZiAob2JqZWN0Lm5hdGl2ZUVsZW1lbnQgJiYgaXNJbnB1dEVsZW1lbnQob2JqZWN0Lm5hdGl2ZUVsZW1lbnQpKSByZXR1cm4gb2JqZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmluZGV4Q29tcGFyYXRvcihhOiBJbnB1dEVsZW1lbnQsIGI6IElucHV0RWxlbWVudCkge1xuICBjb25zdCB2YWx1ZUEgPSBhLnRhYmluZGV4IHx8IGEudGFiSW5kZXg7XG4gIGNvbnN0IHZhbHVlQiA9IGIudGFiaW5kZXggfHwgYi50YWJJbmRleDtcbiAgcmV0dXJuIHZhbHVlQSA9PT0gdmFsdWVCID8gMCA6IHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAtMTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5HYWluRm9jdXNPcHRpb25zIHtcbiAgbWluVGFiaW5kZXg/OiBudW1iZXI7XG4gIG1heFRhYmluZGV4PzogbnVtYmVyO1xuICBleGNsdWRlRW1wdHlJbnB1dD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Rm9jdXNhYmxlSW5wdXRPcHRpb25zIGV4dGVuZHMgQ2FuR2FpbkZvY3VzT3B0aW9ucyB7XG4gIHNvcnRCeVRhYkluZGV4PzogYm9vbGVhbjtcbiAgZGVidWc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FuSGF2ZUZvY3VzKGlucHV0OiBJbnB1dEVsZW1lbnQsIG9wdHM/OiBDYW5HYWluRm9jdXNPcHRpb25zKTogYm9vbGVhbiB7XG4gIGlmICghaW5wdXQpIHJldHVybiBmYWxzZTtcbiAgLy8gRXhjbHVkZSBkaXNhYmxlZCBlbGVtZW50XG4gIHJldHVybiAoXG4gICAgIXRvQm9vbGVhbihpbnB1dC5kaXNhYmxlZCwgZmFsc2UpICYmXG4gICAgLy8gRXhjbHVkZSBoaWRkZW4gZWxlbWVudFxuICAgICF0b0Jvb2xlYW4oaW5wdXQuaGlkZGVuLCBmYWxzZSkgJiZcbiAgICAvLyBFeGNsdWRlIG1pblRhYkluZGV4IDwgZWxlbWVudC50YWJJbmRleFxuICAgIChpc05pbChvcHRzLm1pblRhYmluZGV4KSB8fCB0b051bWJlcihpbnB1dC50YWJJbmRleCwgaW5wdXQudGFiaW5kZXgpID4gb3B0cy5taW5UYWJpbmRleCkgJiZcbiAgICAvLyBFeGNsdWRlIG1heFRhYkluZGV4ID4gZWxlbWVudC50YWJJbmRleFxuICAgIChpc05pbChvcHRzLm1heFRhYmluZGV4KSB8fCB0b051bWJlcihpbnB1dC50YWJJbmRleCwgaW5wdXQudGFiaW5kZXgpIDwgb3B0cy5tYXhUYWJpbmRleCkgJiZcbiAgICAvLyBFeGNsdWRlIG5pbCBpbnB1dCB2YWx1ZVxuICAgICghb3B0cy5leGNsdWRlRW1wdHlJbnB1dCB8fCBpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlSW5wdXRFbGVtZW50cyhlbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+LCBvcHRzPzogR2V0Rm9jdXNhYmxlSW5wdXRPcHRpb25zKTogSW5wdXRFbGVtZW50W10ge1xuICBvcHRzID0geyBzb3J0QnlUYWJJbmRleDogZmFsc2UsIGV4Y2x1ZGVFbXB0eUlucHV0OiBmYWxzZSwgLi4ub3B0cyB9O1xuXG4gIC8vIEZvY3VzIHRvIGZpcnN0IGlucHV0XG4gIGNvbnN0IGZpbHRlcmVkRWxlbWVudHM6IElucHV0RWxlbWVudFtdID0gZWxlbWVudHNcblxuICAgIC8vIFRyYW5zZm9ybSB0byBpbnB1dFxuICAgIC5tYXAoYXNJbnB1dEVsZW1lbnQpXG5cbiAgICAuZmlsdGVyKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZWQgPSBjYW5IYXZlRm9jdXMoaW5wdXQsIG9wdHMpO1xuICAgICAgLy8gREVCVUdcbiAgICAgIGlmIChpbnB1dCAmJiBvcHRzLmRlYnVnKVxuICAgICAgICBjb25zb2xlLmRlYnVnKGBbaW5wdXRzXSBGb2N1c2FibGUgaW5wdXQge2NhbkZvY3VzOiAke2luY2x1ZGVkfSwgdGFiSW5kZXg6ICR7aW5wdXQudGFiSW5kZXggfHwgaW5wdXQudGFiaW5kZXh9fWAsIGlucHV0KTtcbiAgICAgIHJldHVybiBpbmNsdWRlZDtcbiAgICB9KTtcblxuICAvLyBTb3J0IGJ5IHRhYkluZGV4XG4gIGlmIChvcHRzLnNvcnRCeVRhYkluZGV4KSB7XG4gICAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHMuc29ydCh0YWJpbmRleENvbXBhcmF0b3IpO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c05leHRJbnB1dDxUID0gYW55PihldmVudDogRXZlbnQgfCB1bmRlZmluZWQsIGVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxUPj4sIG9wdHM/OiBHZXRGb2N1c2FibGVJbnB1dE9wdGlvbnMpOiBib29sZWFuIHtcbiAgLy8gQ2FuY2VsbGluZyBldmVudCAoZS5nLiB3aGVuIGVtaXR0ZWQgYnkgKGtleWRvd24udGFiKSApXG4gIGlmIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvLyBHZXQgY3VycmVudCBpbmRleFxuICBjb25zdCBtaW5UYWJpbmRleCA9IGV2ZW50ICYmIGlzSW5wdXRFbGVtZW50KGV2ZW50LnRhcmdldCkgPyBldmVudC50YXJnZXQudGFiSW5kZXggfHwgZXZlbnQudGFyZ2V0LnRhYmluZGV4IDogdW5kZWZpbmVkO1xuXG4gIC8vIEdldCBmb2N1c2FibGUgaW5wdXQgZWxlbWVudHNcbiAgY29uc3QgZm9jdXNhYmxlSW5wdXRzOiBJbnB1dEVsZW1lbnRbXSA9IGdldEZvY3VzYWJsZUlucHV0RWxlbWVudHMoZWxlbWVudHMsIHsgbWluVGFiaW5kZXgsIC4uLm9wdHMgfSk7XG5cbiAgaWYgKGlzTm90RW1wdHlBcnJheShmb2N1c2FibGVJbnB1dHMpKSB7XG4gICAgLy8gRm9jdXMgb24gZmlyc3QgaW5wdXRzXG4gICAgZm9jdXNhYmxlSW5wdXRzWzBdLmZvY3VzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c1ByZXZpb3VzSW5wdXQ8VCA9IGFueT4oZXZlbnQ6IEV2ZW50IHwgdW5kZWZpbmVkLCBlbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY8VD4+LCBvcHRzPzogR2V0Rm9jdXNhYmxlSW5wdXRPcHRpb25zKTogYm9vbGVhbiB7XG4gIC8vIENhbmNlbGxpbmcgZXZlbnQgKGUuZy4gd2hlbiBlbWl0dGVkIGJ5IChrZXlkb3duLnRhYikgKVxuICBpZiAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLy8gR2V0IGN1cnJlbnQgaW5kZXhcbiAgY29uc3QgbWF4VGFiaW5kZXggPSBldmVudCAmJiBpc0lucHV0RWxlbWVudChldmVudC50YXJnZXQpID8gZXZlbnQudGFyZ2V0LnRhYkluZGV4IHx8IGV2ZW50LnRhcmdldC50YWJpbmRleCA6IHVuZGVmaW5lZDtcblxuICAvLyBHZXQgZm9jdXNhYmxlIGlucHV0IGVsZW1lbnRzXG4gIGNvbnN0IGZvY3VzYWJsZUlucHV0czogSW5wdXRFbGVtZW50W10gPSBnZXRGb2N1c2FibGVJbnB1dEVsZW1lbnRzKGVsZW1lbnRzLCB7IG1heFRhYmluZGV4LCAuLi5vcHRzIH0pO1xuXG4gIGlmIChpc05vdEVtcHR5QXJyYXkoZm9jdXNhYmxlSW5wdXRzKSkge1xuICAgIC8vIEZvY3VzIG9uIGxhc3QgaW5wdXRzXG4gICAgZm9jdXNhYmxlSW5wdXRzW2ZvY3VzYWJsZUlucHV0cy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRTZWxlY3Rpb25SYW5nZXNGcm9tTWFzayhtYXNrOiAoc3RyaW5nIHwgUmVnRXhwKVtdKTogbnVtYmVyW11bXSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBsZXQgZmlyc3RfaW5kZXg6IG51bWJlcjtcbiAgbGV0IGxhc3RfaW5kZXg6IG51bWJlcjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgPT09IDAgJiYgbWFza1tpXS50b1N0cmluZygpID09PSAnL1srLV0vJykge1xuICAgICAgY29uc29sZS5kZWJ1ZygnVE9ETyBwdXNoIHN0YXJ0IG1hc2snLCB7IGksIG1hc2s6IG1hc2tbaV0udG9TdHJpbmcoKSB9KTtcbiAgICAgIHJlc3VsdC5wdXNoKFswLCAwXSk7XG4gICAgfSBlbHNlIGlmIChtYXNrW2ldIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBpZiAoaXNOaWwoZmlyc3RfaW5kZXgpKSB7XG4gICAgICAgIGZpcnN0X2luZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzTm90TmlsKGZpcnN0X2luZGV4KSkge1xuICAgICAgICBsYXN0X2luZGV4ID0gaSAtIDE7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtmaXJzdF9pbmRleCwgbGFzdF9pbmRleF0pO1xuICAgICAgICBmaXJzdF9pbmRleCA9IG51bGw7XG4gICAgICAgIGxhc3RfaW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAobWFza1ttYXNrLmxlbmd0aCAtIDFdIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgbGFzdF9pbmRleCA9IG1hc2subGVuZ3RoIC0gMTtcbiAgICByZXN1bHQucHVzaChbZmlyc3RfaW5kZXgsIGxhc3RfaW5kZXhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRSYW5nZUZyb21DYXJldEluZGV4KGNhcmV0SW5kZXg6IG51bWJlciwgaW5wdXRSYW5nZXM6IG51bWJlcltdW10pOiBudW1iZXJbXSB7XG4gIGZvciAoY29uc3QgaW5wdXRSYW5nZSBvZiBpbnB1dFJhbmdlcykge1xuICAgIGlmIChjYXJldEluZGV4ID49IGlucHV0UmFuZ2VbMF0gJiYgY2FyZXRJbmRleCA8PSBpbnB1dFJhbmdlWzFdICsgMSkge1xuICAgICAgcmV0dXJuIGlucHV0UmFuZ2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19