hhurz / tableExport.jquery.plugin

jQuery plugin to export a html table to JSON, XML, CSV, TSV, TXT, SQL, Word, Excel, PNG and PDF
MIT License
990 stars 716 forks source link

Download XLSX (OpenXML) files gives network error #325

Closed algi-cap closed 3 years ago

algi-cap commented 3 years ago

Hi, I'm facing the issue using last stable of tableExport (and dependencies). The code doesn't throw exceptions but when the file is being downloaded the browser returns "failed - network error". Please see the attached image: error_chrome

I didn't write code by myself because I'm working on bootstrap-table with its "export" extension and that's based on tableExport plugin, so the underneath code is a blackbox to me. I also tried to debug non minified versions of tableExport, sheetjs and filesaver libs to check if there was some obvious problem without success.

Googling around day-night I found someone that says that the base64 encoded string could be malformed or contain some bad data.

This is an example of the anchor tag that is being created underneath:

<a download="test.xlsx" rel="noopener" href="data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8;base64,UEsDBAoAAAAAAAZjlFLWknwRWgEAAFoBAAARAAAAZG9jUHJvcHMvY29yZS54bWw8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8DQo8Y3A6Y29yZVByb3BlcnRpZXMgeG1sbnM6Y3A9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmRjdGVybXM9Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iIHhtbG5zOmRjbWl0eXBlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIi8UEsDBAoAAAAAAAZjlFIi3Y8dMwIAADMCAAAQAAAAZG9jUHJvcHMvYXBwLnhtbDweG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCjxQcm9wZXJ0aWVzIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9leHRlbmRlZC1wcm9wZXJ0aWVzIiB4bWxuczp2dD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiPjxBcHBsaWNhdGlvbj5TaGVldEpTPC9BcHBsaWNhdGlvbj48SGVhZGluZ1BhaXJzPjx2dDp2ZWN0b3Igc2l6ZT0iMiIgYmFzZVR5cGU9InZhcmlhbnQiPjx2dDp2YXJpYW50Pjx2dDpscHN0cj5Xb3Jrc2hlZXRzPC92dDpscHN0cj48L3Z0OnZhcmlhbnQPHZ0OnZhcmlhbnQPHZ0Omk0PjE8L3Z0Omk0PjwvdnQ6dmFyaWFudD48L3Z0OnZlY3Rvcj48L0hlYWRpbmdQYWlycz48VGl0bGVzT2ZQYXJ0cz48dnQ6dmVjdG9yIHNpemU9IjEiIGJhc2VUeXBlPSJscHN0ciIPHZ0Omxwc3RyPlRhYmxlIDE8L3Z0Omxwc3RyPjwvdnQ6dmVjdG9yPjwvVGl0bGVzT2ZQYXJ0cz48L1Byb3BlcnRpZXMUEsDBAoAAAAAAAZjlFKt437QmSQAAJkkAAAYAAAAeGwvd29ya3NoZWV0cy9zaGVldDEueG1sPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyIPg0KPHdvcmtzaGVldCB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIj48ZGltZW5zaW9uIHJlZj0iQTE6STI4Ii8PHNoZWV0Vmlld3MPHNoZWV0VmlldyB3b3JrYm9va1ZpZXdJZD0iMCIvPjwvc2hlZXRWaWV3cz48c2hlZXREYXRhPjxyb3cgcj0iMSIPGMgcj0iQTEiIHQ9InN0ciIPHYQXppZW5kYTwvdj48L2MPGMgcj0iQjEiIHQ9InN0ciIPHYQXJ0aWNvbG88L3YPC9jPjxjIHI9IkMxIiB0PSJzdHIiPjx2PkRlc2NyaXppb25lIGFydGljb2xvPC92PjwvYz48YyByPSJEMSIgdD0ic3RyIj48dj5VLk0uPC92PjwvYz48YyByPSJFMSIgdD0ic3RyIj48dj5HZXN0aW9uZTwvdj48L2MPGMgcj0iRjEiIHQ9InN0ciIPHYTG90dG88L3YPC9jPjxjIHI9IkcxIiB0PSJzdHIiPjx2PkNsYXNzZTwvdj48L2MPGMgcj0iSDEiIHQ9InN0ciIPHYRGF0YTwvdj48L2MPGMgcj0iSTEiIHQ9InN0ciIPHYSW5zZXJpbWVudG88L3YPC9jPjwvcm93Pjxyb3cgcj0iMiIPGMgcj0iQTIiIHQ9InN0ciIPHYQTwvdj48L2MPGMgcj0iQjIiIHQ9InN0ciIPHYMDA2QkM8L3YPC9jPjxjIHI9IkMyIiB0PSJzdHIiPjx2PkRlc2NyLkFydC4wMDZCQzwvdj48L2MPGMgcj0iRDIiIHQ9InN0ciIPHYUEM8L3YPC9jPjxjIHI9IkUyIiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkYyIiB0PSJzdHIiPjx2PlNpPC92PjwvYz48YyByPSJIMiIgdD0ic3RyIj48dj4yMDE1LTA1LTE1PC92PjwvYz48YyByPSJJMiIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjMiPjxjIHI9IkEzIiB0PSJzdHIiPjx2PkE8L3YPC9jPjxjIHI9IkIzIiB0PSJzdHIiPjx2PjA4NDcxMTAwNjwvdj48L2MPGMgcj0iQzMiIHQ9InN0ciIPHYRGVzY3IuQXJ0LjA4NDcxMTAwNjwvdj48L2MPGMgcj0iRDMiIHQ9InN0ciIPHYQ1M8L3YPC9jPjxjIHI9IkUzIiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkYzIiB0PSJzdHIiPjx2PlNpPC92PjwvYz48YyByPSJIMyIgdD0ic3RyIj48dj4yMDE5LTEwLTMwPC92PjwvYz48YyByPSJJMyIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjQiPjxjIHI9IkE0IiB0PSJzdHIiPjx2PkE8L3YPC9jPjxjIHI9IkI0IiB0PSJzdHIiPjx2PjEwMDY4NTwvdj48L2MPGMgcj0iQzQiIHQ9InN0ciIPHYRGVzY3IuQXJ0LjEwMDY4NTwvdj48L2MPGMgcj0iRDQiIHQ9InN0ciIPHYUEM8L3YPC9jPjxjIHI9IkU0IiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkY0IiB0PSJzdHIiPjx2PlNpPC92PjwvYz48YyByPSJINCIgdD0ic3RyIj48dj4yMDE1LTA1LTE1PC92PjwvYz48YyByPSJJNCIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjUiPjxjIHI9IkE1IiB0PSJzdHIiPjx2PkE8L3YPC9jPjxjIHI9IkI1IiB0PSJzdHIiPjx2PjE2MDA2PC92PjwvYz48YyByPSJDNSIgdD0ic3RyIj48dj5EZXNjci5BcnQuMTYwMDY8L3YPC9jPjxjIHI9IkQ1IiB0PSJzdHIiPjx2PlBDPC92PjwvYz48YyByPSJFNSIgdD0ic3RyIj48dj5GaWZvPC92PjwvYz48YyByPSJGNSIgdD0ic3RyIj48dj5TaTwvdj48L2MPGMgcj0iSDUiIHQ9InN0ciIPHYMjAxNS0wNS0xNTwvdj48L2MPGMgcj0iSTUiIHQ9InN0ciIPHYSW5zZXJpbWVudG8gZGEgSG9zdDwvdj48L2MPC9yb3cPHJvdyByPSI2Ij48YyByPSJBNiIgdD0ic3RyIj48dj5BPC92PjwvYz48YyByPSJCNiIgdD0ic3RyIj48dj4xNjAwNkE8L3YPC9jPjxjIHI9IkM2IiB0PSJzdHIiPjx2PkRlc2NyLkFydC4xNjAwNkE8L3YPC9jPjxjIHI9IkQ2IiB0PSJzdHIiPjx2PlBDPC92PjwvYz48YyByPSJFNiIgdD0ic3RyIj48dj5GaWZvPC92PjwvYz48YyByPSJGNiIgdD0ic3RyIj48dj5TaTwvdj48L2MPGMgcj0iSDYiIHQ9InN0ciIPHYMjAxNS0wNS0xNTwvdj48L2MPGMgcj0iSTYiIHQ9InN0ciIPHYSW5zZXJpbWVudG8gZGEgSG9zdDwvdj48L2MPC9yb3cPHJvdyByPSI3Ij48YyByPSJBNyIgdD0ic3RyIj48dj5BPC92PjwvYz48YyByPSJCNyIgdD0ic3RyIj48dj4xODUwMDA2PC92PjwvYz48YyByPSJDNyIgdD0ic3RyIj48dj5EZXNjci5BcnQuMTg1MDAwNjwvdj48L2MPGMgcj0iRDciIHQ9InN0ciIPHYQ1M8L3YPC9jPjxjIHI9IkU3IiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkY3IiB0PSJzdHIiPjx2PlNpPC92PjwvYz48YyByPSJINyIgdD0ic3RyIj48dj4yMDE1LTA1LTE1PC92PjwvYz48YyByPSJJNyIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjgiPjxjIHI9IkE4IiB0PSJzdHIiPjx2PkE8L3YPC9jPjxjIHI9IkI4IiB0PSJzdHIiPjx2PjMwMDYzNjBTQzwvdj48L2MPGMgcj0iQzgiIHQ9InN0ciIPHYRGVzY3IuQXJ0LjMwMDYzNjBTQzwvdj48L2MPGMgcj0iRDgiIHQ9InN0ciIPHYQ1M8L3YPC9jPjxjIHI9IkU4IiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkY4IiB0PSJzdHIiPjx2PlNpPC92PjwvYz48YyByPSJIOCIgdD0ic3RyIj48dj4yMDE1LTA1LTE1PC92PjwvYz48YyByPSJJOCIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjkiPjxjIHI9IkE5IiB0PSJzdHIiPjx2PkE8L3YPC9jPjxjIHI9IkI5IiB0PSJzdHIiPjx2PjMwMDYzNjBTQ0lJPC92PjwvYz48YyByPSJDOSIgdD0ic3RyIj48dj5EZXNjci5BcnQuMzAwNjM2MFNDSUk8L3YPC9jPjxjIHI9IkQ5IiB0PSJzdHIiPjx2PkNTPC92PjwvYz48YyByPSJFOSIgdD0ic3RyIj48dj5GaWZvPC92PjwvYz48YyByPSJGOSIgdD0ic3RyIj48dj5TaTwvdj48L2MPGMgcj0iSDkiIHQ9InN0ciIPHYMjAxNS0wOS0yODwvdj48L2MPGMgcj0iSTkiIHQ9InN0ciIPHYSW5zZXJpbWVudG8gZGEgSG9zdDwvdj48L2MPC9yb3cPHJvdyByPSIxMCIPGMgcj0iQTEwIiB0PSJzdHIiPjx2PkE8L3YPC9jPjxjIHI9IkIxMCIgdD0ic3RyIj48dj44MTAwNjwvdj48L2MPGMgcj0iQzEwIiB0PSJzdHIiPjx2PkRlc2NyLkFydC44MTAwNjwvdj48L2MPGMgcj0iRDEwIiB0PSJzdHIiPjx2PlBDPC92PjwvYz48YyByPSJFMTAiIHQ9InN0ciIPHYRmlmbzwvdj48L2MPGMgcj0iRjEwIiB0PSJzdHIiPjx2PlNpPC92PjwvYz48YyByPSJIMTAiIHQ9InN0ciIPHYMjAxNS0wNS0xNTwvdj48L2MPGMgcj0iSTEwIiB0PSJzdHIiPjx2Pkluc2VyaW1lbnRvIGRhIEhvc3Q8L3YPC9jPjwvcm93Pjxyb3cgcj0iMTEiPjxjIHI9IkExMSIgdD0ic3RyIj48dj5BPC92PjwvYz48YyByPSJCMTEiIHQ9InN0ciIPHYOTAwNkI8L3YPC9jPjxjIHI9IkMxMSIgdD0ic3RyIj48dj5EZXNjci5BcnQuOTAwNkI8L3YPC9jPjxjIHI9IkQxMSIgdD0ic3RyIj48dj5DUzwvdj48L2MPGMgcj0iRTExIiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkYxMSIgdD0ic3RyIj48dj5TaTwvdj48L2MPGMgcj0iSDExIiB0PSJzdHIiPjx2PjIwMTYtMDMtMDE8L3YPC9jPjxjIHI9IkkxMSIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjEyIj48YyByPSJBMTIiIHQ9InN0ciIPHYQTwvdj48L2MPGMgcj0iQjEyIiB0PSJzdHIiPjx2PkJJWjcwMDA2MDwvdj48L2MPGMgcj0iQzEyIiB0PSJzdHIiPjx2PkRlc2NyLkFydC5CSVo3MDAwNjA8L3YPC9jPjxjIHI9IkQxMiIgdD0ic3RyIj48dj5DUzwvdj48L2MPGMgcj0iRTEyIiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkYxMiIgdD0ic3RyIj48dj5TaTwvdj48L2MPGMgcj0iSDEyIiB0PSJzdHIiPjx2PjIwMTUtMDUtMTU8L3YPC9jPjxjIHI9IkkxMiIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjEzIj48YyByPSJBMTMiIHQ9InN0ciIPHYQTwvdj48L2MPGMgcj0iQjEzIiB0PSJzdHIiPjx2PkJJWjcwMDA2MTwvdj48L2MPGMgcj0iQzEzIiB0PSJzdHIiPjx2PkRlc2NyLkFydC5CSVo3MDAwNjE8L3YPC9jPjxjIHI9IkQxMyIgdD0ic3RyIj48dj5DUzwvdj48L2MPGMgcj0iRTEzIiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkYxMyIgdD0ic3RyIj48dj5TaTwvdj48L2MPGMgcj0iSDEzIiB0PSJzdHIiPjx2PjIwMTUtMDUtMTU8L3YPC9jPjxjIHI9IkkxMyIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjE0Ij48YyByPSJBMTQiIHQ9InN0ciIPHYQTwvdj48L2MPGMgcj0iQjE0IiB0PSJzdHIiPjx2PkNFMTAwNjBJVDwvdj48L2MPGMgcj0iQzE0IiB0PSJzdHIiPjx2PkRlc2NyLkFydC5DRTEwMDYwSVQ8L3YPC9jPjxjIHI9IkQxNCIgdD0ic3RyIj48dj5DUzwvdj48L2MPGMgcj0iRTE0IiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkYxNCIgdD0ic3RyIj48dj5TaTwvdj48L2MPGMgcj0iSDE0IiB0PSJzdHIiPjx2PjIwMTUtMDUtMTU8L3YPC9jPjxjIHI9IkkxNCIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjE1Ij48YyByPSJBMTUiIHQ9InN0ciIPHYQTwvdj48L2MPGMgcj0iQjE1IiB0PSJzdHIiPjx2PkZTRVRJMTAwNjA8L3YPC9jPjxjIHI9IkMxNSIgdD0ic3RyIj48dj5EZXNjci5BcnQuRlNFVEkxMDA2MDwvdj48L2MPGMgcj0iRDE1IiB0PSJzdHIiPjx2PkNTPC92PjwvYz48YyByPSJFMTUiIHQ9InN0ciIPHYRmlmbzwvdj48L2MPGMgcj0iRjE1IiB0PSJzdHIiPjx2PlNpPC92PjwvYz48YyByPSJIMTUiIHQ9InN0ciIPHYMjAxNS0wNS0xNTwvdj48L2MPGMgcj0iSTE1IiB0PSJzdHIiPjx2Pkluc2VyaW1lbnRvIGRhIEhvc3Q8L3YPC9jPjwvcm93Pjxyb3cgcj0iMTYiPjxjIHI9IkExNiIgdD0ic3RyIj48dj5BPC92PjwvYz48YyByPSJCMTYiIHQ9InN0ciIPHYRlNSSVBMRVIwMDY8L3YPC9jPjxjIHI9IkMxNiIgdD0ic3RyIj48dj5EZXNjci5BcnQuRlNSSVBMRVIwMDY8L3YPC9jPjxjIHI9IkQxNiIgdD0ic3RyIj48dj5DUzwvdj48L2MPGMgcj0iRTE2IiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkYxNiIgdD0ic3RyIj48dj5TaTwvdj48L2MPGMgcj0iSDE2IiB0PSJzdHIiPjx2PjIwMTctMDQtMjE8L3YPC9jPjxjIHI9IkkxNiIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjE3Ij48YyByPSJBMTciIHQ9InN0ciIPHYQTwvdj48L2MPGMgcj0iQjE3IiB0PSJzdHIiPjx2PktJVENFMTAwNjBJVDwvdj48L2MPGMgcj0iQzE3IiB0PSJzdHIiPjx2PkRlc2NyLkFydC5LSVRDRTEwMDYwSVQ8L3YPC9jPjxjIHI9IkQxNyIgdD0ic3RyIj48dj5DUzwvdj48L2MPGMgcj0iRTE3IiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkYxNyIgdD0ic3RyIj48dj5TaTwvdj48L2MPGMgcj0iSDE3IiB0PSJzdHIiPjx2PjIwMTUtMDUtMTU8L3YPC9jPjxjIHI9IkkxNyIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjE4Ij48YyByPSJBMTgiIHQ9InN0ciIPHYQTwvdj48L2MPGMgcj0iQjE4IiB0PSJzdHIiPjx2PkxQMDA2PC92PjwvYz48YyByPSJDMTgiIHQ9InN0ciIPHYRGVzY3IuQXJ0LkxQMDA2PC92PjwvYz48YyByPSJEMTgiIHQ9InN0ciIPHYUEM8L3YPC9jPjxjIHI9IkUxOCIgdD0ic3RyIj48dj5GaWZvPC92PjwvYz48YyByPSJGMTgiIHQ9InN0ciIPHYU2k8L3YPC9jPjxjIHI9IkgxOCIgdD0ic3RyIj48dj4yMDE1LTA1LTE1PC92PjwvYz48YyByPSJJMTgiIHQ9InN0ciIPHYSW5zZXJpbWVudG8gZGEgSG9zdDwvdj48L2MPC9yb3cPHJvdyByPSIxOSIPGMgcj0iQTE5IiB0PSJzdHIiPjx2PkE8L3YPC9jPjxjIHI9IkIxOSIgdD0ic3RyIj48dj5NTzEwMDYwNDwvdj48L2MPGMgcj0iQzE5IiB0PSJzdHIiPjx2PkRlc2NyLkFydC5NTzEwMDYwNDwvdj48L2MPGMgcj0iRDE5IiB0PSJzdHIiPjx2PkNTPC92PjwvYz48YyByPSJFMTkiIHQ9InN0ciIPHYRmlmbzwvdj48L2MPGMgcj0iRjE5IiB0PSJzdHIiPjx2PlNpPC92PjwvYz48YyByPSJIMTkiIHQ9InN0ciIPHYMjAyMC0wNi0wNTwvdj48L2MPGMgcj0iSTE5IiB0PSJzdHIiPjx2Pkluc2VyaW1lbnRvIGRhIEhvc3Q8L3YPC9jPjwvcm93Pjxyb3cgcj0iMjAiPjxjIHI9IkEyMCIgdD0ic3RyIj48dj5BPC92PjwvYz48YyByPSJCMjAiIHQ9InN0ciIPHYU0I3MDA2PC92PjwvYz48YyByPSJDMjAiIHQ9InN0ciIPHYRGVzY3IuQXJ0LlNCNzAwNjwvdj48L2MPGMgcj0iRDIwIiB0PSJzdHIiPjx2PkNTPC92PjwvYz48YyByPSJFMjAiIHQ9InN0ciIPHYRmlmbzwvdj48L2MPGMgcj0iRjIwIiB0PSJzdHIiPjx2PlNpPC92PjwvYz48YyByPSJIMjAiIHQ9InN0ciIPHYMjAxNS0wNS0xNTwvdj48L2MPGMgcj0iSTIwIiB0PSJzdHIiPjx2Pkluc2VyaW1lbnRvIGRhIEhvc3Q8L3YPC9jPjwvcm93Pjxyb3cgcj0iMjEiPjxjIHI9IkEyMSIgdD0ic3RyIj48dj5BPC92PjwvYz48YyByPSJCMjEiIHQ9InN0ciIPHYVFQwMDAwNjc0OTwvdj48L2MPGMgcj0iQzIxIiB0PSJzdHIiPjx2PkRlc2NyLkFydC5UVDAwMDA2NzQ5PC92PjwvYz48YyByPSJEMjEiIHQ9InN0ciIPHYQ1M8L3YPC9jPjxjIHI9IkUyMSIgdD0ic3RyIj48dj5GaWZvPC92PjwvYz48YyByPSJGMjEiIHQ9InN0ciIPHYU2k8L3YPC9jPjxjIHI9IkgyMSIgdD0ic3RyIj48dj4yMDIwLTA0LTI3PC92PjwvYz48YyByPSJJMjEiIHQ9InN0ciIPHYSW5zZXJpbWVudG8gZGEgSG9zdDwvdj48L2MPC9yb3cPHJvdyByPSIyMiIPGMgcj0iQTIyIiB0PSJzdHIiPjx2PkE8L3YPC9jPjxjIHI9IkIyMiIgdD0ic3RyIj48dj5UVDBHMDA2NDgwPC92PjwvYz48YyByPSJDMjIiIHQ9InN0ciIPHYRGVzY3IuQXJ0LlRUMEcwMDY0ODA8L3YPC9jPjxjIHI9IkQyMiIgdD0ic3RyIj48dj5DUzwvdj48L2MPGMgcj0iRTIyIiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkYyMiIgdD0ic3RyIj48dj5TaTwvdj48L2MPGMgcj0iSDIyIiB0PSJzdHIiPjx2PjIwMjAtMDQtMjc8L3YPC9jPjxjIHI9IkkyMiIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjIzIj48YyByPSJBMjMiIHQ9InN0ciIPHYQTwvdj48L2MPGMgcj0iQjIzIiB0PSJzdHIiPjx2PlUwMTAwNjwvdj48L2MPGMgcj0iQzIzIiB0PSJzdHIiPjx2PkRlc2NyLkFydC5VMDEwMDY8L3YPC9jPjxjIHI9IkQyMyIgdD0ic3RyIj48dj5QQzwvdj48L2MPGMgcj0iRTIzIiB0PSJzdHIiPjx2PkZpZm88L3YPC9jPjxjIHI9IkYyMyIgdD0ic3RyIj48dj5TaTwvdj48L2MPGMgcj0iSDIzIiB0PSJzdHIiPjx2PjIwMTctMDgtMDE8L3YPC9jPjxjIHI9IkkyMyIgdD0ic3RyIj48dj5JbnNlcmltZW50byBkYSBIb3N0PC92PjwvYz48L3Jvdz48cm93IHI9IjI0Ij48YyByPSJBMjQiIHQ9InN0ciIPHYQTwvdj48L2MPGMgcj0iQjI0IiB0PSJzdHIiPjx2PlVTMDEwMDY8L3YPC9jPjxjIHI9IkMyNCIgdD0ic3RyIj48dj5EZXNjci5BcnQuVVMwMTAwNjwvdj48L2MPGMgcj0iRDI0IiB0PSJzdHIiPjx2PlBDPC92PjwvYz48YyByPSJFMjQiIHQ9InN0ciIPHYRmlmbzwvdj48L2MPGMgcj0iRjI0IiB0PSJzdHIiPjx2PlNpPC92PjwvYz48YyByPSJIMjQiIHQ9InN0ciIPHYMjAxNy0wOC0wMTwvdj48L2MPGMgcj0iSTI0IiB0PSJzdHIiPjx2Pkluc2VyaW1lbnRvIGRhIEhvc3Q8L3YPC9jPjwvcm93Pjxyb3cgcj0iMjUiPjxjIHI9IkEyNSIgdD0ic3RyIj48dj5BPC92PjwvYz48YyByPSJCMjUiIHQ9InN0ciIPHYVjE0MDBCMTAwNjwvdj48L2MPGMgcj0iQzI1IiB0PSJzdHIiPjx2PkRlc2NyLkFydC5WMTQwMEIxMDA2PC92PjwvYz48YyByPSJEMjUiIHQ9InN0ciIPHYUEM8L3YPC9jPjxjIHI9IkUyNSIgdD0ic3RyIj48dj5GaWZvPC92PjwvYz48YyByPSJGMjUiIHQ9InN0ciIPHYU2k8L3YPC9jPjxjIHI9IkgyNSIgdD0ic3RyIj48dj4yMDE4LTA2LTE1PC92PjwvYz48YyByPSJJMjUiIHQ9InN0ciIPHYSW5zZXJpbWVudG8gZGEgSG9zdDwvdj48L2MPC9yb3cPHJvdyByPSIyNiIPGMgcj0iQTI2IiB0PSJzdHIiPjx2PkE8L3YPC9jPjxjIHI9IkIyNiIgdD0ic3RyIj48dj5YSTEwMDY8L3YPC9jPjxjIHI9IkMyNiIgdD0ic3RyIj48dj5EZXNjci5BcnQuWEkxMDA2PC92PjwvYz48YyByPSJEMjYiIHQ9InN0ciIPHYQ1M8L3YPC9jPjxjIHI9IkUyNiIgdD0ic3RyIj48dj5GaWZvPC92PjwvYz48YyByPSJGMjYiIHQ9InN0ciIPHYU2k8L3YPC9jPjxjIHI9IkgyNiIgdD0ic3RyIj48dj4yMDE2LTA0LTIxPC92PjwvYz48YyByPSJJMjYiIHQ9InN0ciIPHYSW5zZXJpbWVudG8gZGEgSG9zdDwvdj48L2MPC9yb3cPHJvdyByPSIyNyIPGMgcj0iQTI3IiB0PSJzdHIiPjx2PkE8L3YPC9jPjxjIHI9IkIyNyIgdD0ic3RyIj48dj5YSTcwMDY8L3YPC9jPjxjIHI9IkMyNyIgdD0ic3RyIj48dj5EZXNjci5BcnQuWEk3MDA2PC92PjwvYz48YyByPSJEMjciIHQ9InN0ciIPHYQ1M8L3YPC9jPjxjIHI9IkUyNyIgdD0ic3RyIj48dj5GaWZvPC92PjwvYz48YyByPSJGMjciIHQ9InN0ciIPHYU2k8L3YPC9jPjxjIHI9IkgyNyIgdD0ic3RyIj48dj4yMDE2LTA0LTIxPC92PjwvYz48YyByPSJJMjciIHQ9InN0ciIPHYSW5zZXJpbWVudG8gZGEgSG9zdDwvdj48L2MPC9yb3cPHJvdyByPSIyOCIPGMgcj0iQTI4IiB0PSJzdHIiPjx2PkE8L3YPC9jPjxjIHI9IkIyOCIgdD0ic3RyIj48dj5YSTkwMDY8L3YPC9jPjxjIHI9IkMyOCIgdD0ic3RyIj48dj5EZXNjci5BcnQuWEk5MDA2PC92PjwvYz48YyByPSJEMjgiIHQ9InN0ciIPHYQ1M8L3YPC9jPjxjIHI9IkUyOCIgdD0ic3RyIj48dj5GaWZvPC92PjwvYz48YyByPSJGMjgiIHQ9InN0ciIPHYU2k8L3YPC9jPjxjIHI9IkgyOCIgdD0ic3RyIj48dj4yMDE2LTA0LTIxPC92PjwvYz48YyByPSJJMjgiIHQ9InN0ciIPHYSW5zZXJpbWVudG8gZGEgSG9zdDwvdj48L2MPC9yb3cPC9zaGVldERhdGEPGlnbm9yZWRFcnJvcnMPGlnbm9yZWRFcnJvciBudW1iZXJTdG9yZWRBc1RleHQ9IjEiIHNxcmVmPSJBMTpJMjgiLz48L2lnbm9yZWRFcnJvcnMPC93b3Jrc2hlZXQUEsDBAoAAAAAAAZjlFJ17fUFQwEAAEMBAAAPAAAAeGwvd29ya2Jvb2sueG1sPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyIPg0KPHdvcmtib29rIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iIHhtbG5zOnI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiPjx3b3JrYm9va1ByIGNvZGVOYW1lPSJUaGlzV29ya2Jvb2siLz48c2hlZXRzPjxzaGVldCBuYW1lPSJUYWJsZSAxIiBzaGVldElkPSIxIiByOmlkPSJySWQxIi8PC9zaGVldHMPC93b3JrYm9vaz5QSwMECgAAAAAABmOUUliHqOxaHgAAWh4AABMAAAB4bC90aGVtZS90aGVtZTEueG1sPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyIPg0KPGE6dGhlbWUgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iIG5hbWU9Ik9mZmljZSBUaGVtZSIPGE6dGhlbWVFbGVtZW50cz48YTpjbHJTY2hlbWUgbmFtZT0iT2ZmaWNlIj48YTpkazEPGE6c3lzQ2xyIHZhbD0id2luZG93VGV4dCIgbGFzdENscj0iMDAwMDAwIi8PC9hOmRrMT48YTpsdDEPGE6c3lzQ2xyIHZhbD0id2luZG93IiBsYXN0Q2xyPSJGRkZGRkYiLz48L2E6bHQxPjxhOmRrMj48YTpzcmdiQ2xyIHZhbD0iMUY0OTdEIi8PC9hOmRrMj48YTpsdDIPGE6c3JnYkNsciB2YWw9IkVFRUNFMSIvPjwvYTpsdDIPGE6YWNjZW50MT48YTpzcmdiQ2xyIHZhbD0iNEY4MUJEIi8PC9hOmFjY2VudDEPGE6YWNjZW50Mj48YTpzcmdiQ2xyIHZhbD0iQzA1MDREIi8PC9hOmFjY2VudDIPGE6YWNjZW50Mz48YTpzcmdiQ2xyIHZhbD0iOUJCQjU5Ii8PC9hOmFjY2VudDMPGE6YWNjZW50ND48YTpzcmdiQ2xyIHZhbD0iODA2NEEyIi8PC9hOmFjY2VudDQPGE6YWNjZW50NT48YTpzcmdiQ2xyIHZhbD0iNEJBQ0M2Ii8PC9hOmFjY2VudDUPGE6YWNjZW50Nj48YTpzcmdiQ2xyIHZhbD0iRjc5NjQ2Ii8PC9hOmFjY2VudDYPGE6aGxpbmsPGE6c3JnYkNsciB2YWw9IjAwMDBGRiIvPjwvYTpobGluaz48YTpmb2xIbGluaz48YTpzcmdiQ2xyIHZhbD0iODAwMDgwIi8PC9hOmZvbEhsaW5rPjwvYTpjbHJTY2hlbWUPGE6Zm9udFNjaGVtZSBuYW1lPSJPZmZpY2UiPjxhOm1ham9yRm9udD48YTpsYXRpbiB0eXBlZmFjZT0iQ2FtYnJpYSIvPjxhOmVhIHR5cGVmYWNlPSIiLz48YTpjcyB0eXBlZmFjZT0iIi8PGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSLDr8K8wq3Dr8K8wrMgw6CvMKww6PigJrCtMOj4oCawrfDo8aSxpLDoKAmsKvIi8PGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSLDq8Kn4oCYw6zCneKCrCDDqsKzwqDDqKAneKAoiIvPjxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iw6XCruKAucOkwr3igJwiLz48YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9IsOm4oCTwrDDp8K0wrDDpsucxb3DqcKr4oCdIi8PGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz48YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPjxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8PGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPjxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8PGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz48YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPjxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz48YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8PGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPjxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz48YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPjxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8PGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8PGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz48YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz48YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8PGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPjxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPjxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPjxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8PGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz48YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPjxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8PGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8PGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8PC9hOm1ham9yRm9udD48YTptaW5vckZvbnQPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz48YTplYSB0eXBlZmFjZT0iIi8PGE6Y3MgdHlwZWZhY2U9IiIvPjxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iw6CvMKtw6CvMKzIMOvwrzCsMOj4oCawrTDoKAmsK3w6PGksaSw6PigJrCryIvPjxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iw6vCpKAmMOswp3igqwgw6rCs8Kgw6vigJ3igKIiLz48YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9IsOlwq7igLnDpMK94oCcIi8PGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSLDpuKAk8Kww6fCtMKww6bLnMW9w6nCqKAnSIvPjxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iQXJpYWwiLz48YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IkFyaWFsIi8PGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz48YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8PGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz48YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPjxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iRGF1blBlbmgiLz48YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8PGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPjxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz48YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8PGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz48YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPjxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPjxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8PGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8PGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPjxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz48YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz48YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz48YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPjxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8PGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz48YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IkFyaWFsIi8PGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8PGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8PC9hOm1pbm9yRm9udD48L2E6Zm9udFNjaGVtZT48YTpmbXRTY2hlbWUgbmFtZT0iT2ZmaWNlIj48YTpmaWxsU3R5bGVMc3QPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8PC9hOnNvbGlkRmlsbD48YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPjxhOmdzTHN0PjxhOmdzIHBvcz0iMCIPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHIPC9hOmdzPjxhOmdzIHBvcz0iMzUwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMzcwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48YTpncyBwb3M9IjEwMDAwMCIPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxNTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHIPC9hOmdzPjwvYTpnc0xzdD48YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIxIi8PC9hOmdyYWRGaWxsPjxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSIPGE6Z3NMc3QPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIPGE6dGludCB2YWw9IjEwMDAwMCIvPjxhOnNoYWRlIHZhbD0iMTAwMDAwIi8PGE6c2F0TW9kIHZhbD0iMTMwMDAwIi8PC9hOnNjaGVtZUNscj48L2E6Z3MPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHIPC9hOmdzPjwvYTpnc0xzdD48YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIwIi8PC9hOmdyYWRGaWxsPjwvYTpmaWxsU3R5bGVMc3QPGE6bG5TdHlsZUxzdD48YTpsbiB3PSI5NTI1IiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGwPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iOTUwMDAiLz48YTpzYXRNb2QgdmFsPSIxMDUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpzb2xpZEZpbGwPGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj48YTpsbiB3PSIyNTQwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciIPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8PC9hOmxuPjxhOmxuIHc9IjM4MTAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGwPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4PC9hOmxuU3R5bGVMc3QPGE6ZWZmZWN0U3R5bGVMc3QPGE6ZWZmZWN0U3R5bGUPGE6ZWZmZWN0THN0PjxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjAwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM4MDAwIi8PC9hOnNyZ2JDbHIPC9hOm91dGVyU2hkdz48L2E6ZWZmZWN0THN0PjwvYTplZmZlY3RTdHlsZT48YTplZmZlY3RTdHlsZT48YTplZmZlY3RMc3QPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PjwvYTplZmZlY3RMc3QPC9hOmVmZmVjdFN0eWxlPjxhOmVmZmVjdFN0eWxlPjxhOmVmZmVjdExzdD48YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCIPGE6c3JnYkNsciB2YWw9IjAwMDAwMCIPGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHcPC9hOmVmZmVjdExzdD48YTpzY2VuZTNkPjxhOmNhbWVyYSBwcnN0PSJvcnRob2dyYXBoaWNGcm9udCIPGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjAiLz48L2E6Y2FtZXJhPjxhOmxpZ2h0UmlnIHJpZz0idGhyZWVQdCIgZGlyPSJ0Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMTIwMDAwMCIvPjwvYTpsaWdodFJpZz48L2E6c2NlbmUzZD48YTpzcDNkPjxhOmJldmVsVCB3PSI2MzUwMCIgaD0iMjU0MDAiLz48L2E6c3AzZD48L2E6ZWZmZWN0U3R5bGUPC9hOmVmZmVjdFN0eWxlTHN0PjxhOmJnRmlsbFN0eWxlTHN0PjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGwPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj48YTpnc0xzdD48YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz48YTpncyBwb3M9IjQwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIPGE6dGludCB2YWw9IjQ1MDAwIi8PGE6c2hhZGUgdmFsPSI5OTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHIPC9hOmdzPjxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIPGE6c2hhZGUgdmFsPSIyMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjI1NTAwMCIvPjwvYTpzY2hlbWVDbHIPC9hOmdzPjwvYTpnc0xzdD48YTpwYXRoIHBhdGg9ImNpcmNsZSIPGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iLTgwMDAwIiByPSI1MDAwMCIgYj0iMTgwMDAwIi8PC9hOnBhdGgPC9hOmdyYWRGaWxsPjxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSIPGE6Z3NMc3QPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIPGE6dGludCB2YWw9IjgwMDAwIi8PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8PC9hOnNjaGVtZUNscj48L2E6Z3MPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjMwMDAwIi8PGE6c2F0TW9kIHZhbD0iMjAwMDAwIi8PC9hOnNjaGVtZUNscj48L2E6Z3MPC9hOmdzTHN0PjxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSI1MDAwMCIgcj0iNTAwMDAiIGI9IjUwMDAwIi8PC9hOnBhdGgPC9hOmdyYWRGaWxsPjwvYTpiZ0ZpbGxTdHlsZUxzdD48L2E6Zm10U2NoZW1lPjwvYTp0aGVtZUVsZW1lbnRzPjxhOm9iamVjdERlZmF1bHRzPjxhOnNwRGVmPjxhOnNwUHIvPjxhOmJvZHlQci8PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMSIPGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMyIPGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciIPGE6c2NoZW1lQ2xyIHZhbD0ibHQxIi8PC9hOmZvbnRSZWYPC9hOnN0eWxlPjwvYTpzcERlZj48YTpsbkRlZj48YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWYPGE6ZmlsbFJlZiBpZHg9IjAiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9InR4MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT48L2E6bG5EZWYPC9hOm9iamVjdERlZmF1bHRzPjxhOmV4dHJhQ2xyU2NoZW1lTHN0Lz48L2E6dGhlbWUUEsDBAoAAAAAAAZjlFKb6rQedAQAAHQEAAANAAAAeGwvc3R5bGVzLnhtbDweG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCjxzdHlsZVNoZWV0IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iIHhtbG5zOnZ0PSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9kb2NQcm9wc1ZUeXBlcyIPG51bUZtdHMgY291bnQ9IjEiPjxudW1GbXQgbnVtRm10SWQ9IjU2IiBmb3JtYXRDb2RlPSImcXVvdDvDpMK4xaDDpcKNy4Yvw6TCuOKAucOlwo3LhiAmcXVvdDtoaCZxdW90O8Om4oSi4oCaJnF1b3Q7bW0mcXVvdDvDpcuG4oCgJnF1b3Q7c3MmcXVvdDvDp8Kn4oCZICZxdW90OyIvPjwvbnVtRm10cz48Zm9udHMgY291bnQ9IjEiPjxmb250PjxzeiB2YWw9IjEyIi8PGNvbG9yIHRoZW1lPSIxIi8PG5hbWUgdmFsPSJDYWxpYnJpIi8PGZhbWlseSB2YWw9IjIiLz48c2NoZW1lIHZhbD0ibWlub3IiLz48L2ZvbnQPC9mb250cz48ZmlsbHMgY291bnQ9IjIiPjxmaWxsPjxwYXR0ZXJuRmlsbCBwYXR0ZXJuVHlwZT0ibm9uZSIvPjwvZmlsbD48ZmlsbD48cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9ImdyYXkxMjUiLz48L2ZpbGwPC9maWxscz48Ym9yZGVycyBjb3VudD0iMSIPGJvcmRlcj48bGVmdC8PHJpZ2h0Lz48dG9wLz48Ym90dG9tLz48ZGlhZ29uYWwvPjwvYm9yZGVyPjwvYm9yZGVycz48Y2VsbFN0eWxlWGZzIGNvdW50PSIxIj48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIvPjwvY2VsbFN0eWxlWGZzPjxjZWxsWGZzIGNvdW50PSIxIj48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz48L2NlbGxYZnMPGNlbGxTdHlsZXMgY291bnQ9IjEiPjxjZWxsU3R5bGUgbmFtZT0iTm9ybWFsIiB4ZklkPSIwIiBidWlsdGluSWQ9IjAiLz48L2NlbGxTdHlsZXMPGR4ZnMgY291bnQ9IjAiLz48dGFibGVTdHlsZXMgY291bnQ9IjAiIGRlZmF1bHRUYWJsZVN0eWxlPSJUYWJsZVN0eWxlTWVkaXVtOSIgZGVmYXVsdFBpdm90U3R5bGU9IlBpdm90U3R5bGVNZWRpdW00Ii8PC9zdHlsZVNoZWV0PlBLAwQKAAAAAAAGY5RSNuuWZIHAACSBwAAEwAAAFtDb250ZW50X1R5cGVzXS54bWw8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8DQo8VHlwZXMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29udGVudC10eXBlcyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIPERlZmF1bHQgRXh0ZW5zaW9uPSJ4bWwiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi94bWwiLz48RGVmYXVsdCBFeHRlbnNpb249ImJpbiIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4iLz48RGVmYXVsdCBFeHRlbnNpb249InZtbCIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIi8PERlZmF1bHQgRXh0ZW5zaW9uPSJkYXRhIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiLz48RGVmYXVsdCBFeHRlbnNpb249ImJtcCIgQ29udGVudFR5cGU9ImltYWdlL2JtcCIvPjxEZWZhdWx0IEV4dGVuc2lvbj0icG5nIiBDb250ZW50VHlwZT0iaW1hZ2UvcG5nIi8PERlZmF1bHQgRXh0ZW5zaW9uPSJnaWYiIENvbnRlbnRUeXBlPSJpbWFnZS9naWYiLz48RGVmYXVsdCBFeHRlbnNpb249ImVtZiIgQ29udGVudFR5cGU9ImltYWdlL3gtZW1mIi8PERlZmF1bHQgRXh0ZW5zaW9uPSJ3bWYiIENvbnRlbnRUeXBlPSJpbWFnZS94LXdtZiIvPjxEZWZhdWx0IEV4dGVuc2lvbj0ianBnIiBDb250ZW50VHlwZT0iaW1hZ2UvanBlZyIvPjxEZWZhdWx0IEV4dGVuc2lvbj0ianBlZyIgQ29udGVudFR5cGU9ImltYWdlL2pwZWciLz48RGVmYXVsdCBFeHRlbnNpb249InRpZiIgQ29udGVudFR5cGU9ImltYWdlL3RpZmYiLz48RGVmYXVsdCBFeHRlbnNpb249InRpZmYiIENvbnRlbnRUeXBlPSJpbWFnZS90aWZmIi8PERlZmF1bHQgRXh0ZW5zaW9uPSJwZGYiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi9wZGYiLz48RGVmYXVsdCBFeHRlbnNpb249InJlbHMiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCIvPjxPdmVycmlkZSBQYXJ0TmFtZT0iL3hsL3dvcmtib29rLnhtbCIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIi8PE92ZXJyaWRlIFBhcnROYW1lPSIveGwvd29ya3NoZWV0cy9zaGVldDEueG1sIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCIvPjxPdmVycmlkZSBQYXJ0TmFtZT0iL3hsL3RoZW1lL3RoZW1lMS54bWwiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sIi8PE92ZXJyaWRlIFBhcnROYW1lPSIveGwvc3R5bGVzLnhtbCIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnN0eWxlcyt4bWwiLz48T3ZlcnJpZGUgUGFydE5hbWU9Ii9kb2NQcm9wcy9jb3JlLnhtbCIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmNvcmUtcHJvcGVydGllcyt4bWwiLz48T3ZlcnJpZGUgUGFydE5hbWU9Ii9kb2NQcm9wcy9hcHAueG1sIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sIi8PC9UeXBlcz5QSwMECgAAAAAABmOUUkpqEflMAgAATAIAAAsAAABfcmVscy8ucmVsczweG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCjxSZWxhdGlvbnNoaXBzIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiPjxSZWxhdGlvbnNoaXAgSWQ9InJJZDIiIFR5cGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcy9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiIFRhcmdldD0iZG9jUHJvcHMvY29yZS54bWwiLz48UmVsYXRpb25zaGlwIElkPSJySWQzIiBUeXBlPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVuZGVkLXByb3BlcnRpZXMiIFRhcmdldD0iZG9jUHJvcHMvYXBwLnhtbCIvPjxSZWxhdGlvbnNoaXAgSWQ9InJJZDEiIFR5cGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiIFRhcmdldD0ieGwvd29ya2Jvb2sueG1sIi8PC9SZWxhdGlvbnNoaXBzPlBLAwQKAAAAAAAGY5RS0D9k3S0CAAAtAgAAGgAAAHhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyIPg0KPFJlbGF0aW9uc2hpcHMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyIPFJlbGF0aW9uc2hpcCBJZD0icklkMSIgVHlwZT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiIFRhcmdldD0id29ya3NoZWV0cy9zaGVldDEueG1sIi8PFJlbGF0aW9uc2hpcCBJZD0icklkMiIgVHlwZT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSIgVGFyZ2V0PSJ0aGVtZS90aGVtZTEueG1sIi8PFJlbGF0aW9uc2hpcCBJZD0icklkMyIgVHlwZT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiIFRhcmdldD0ic3R5bGVzLnhtbCIvPjwvUmVsYXRpb25zaGlwcz5QSwECFAAKAAAAAAAGY5RS1pJ8EVoBAABaAQAAEQAAAAAAAAAAAAAAAAAAAAAAZG9jUHJvcHMvY29yZS54bWxQSwECFAAKAAAAAAAGY5RSIt2PHTMCAAAzAgAAEAAAAAAAAAAAAAAAAACJAQAAZG9jUHJvcHMvYXBwLnhtbFBLAQIUAAoAAAAAAAZjlFKt437QmSQAAJkkAAAYAAAAAAAAAAAAAAAAAOoDAAB4bC93b3Jrc2hlZXRzL3NoZWV0MS54bWxQSwECFAAKAAAAAAAGY5RSde31BUMBAABDAQAADwAAAAAAAAAAAAAAAAC5KAAAeGwvd29ya2Jvb2sueG1sUEsBAhQACgAAAAAABmOUUliHqOxaHgAAWh4AABMAAAAAAAAAAAAAAAAAKSoAAHhsL3RoZW1lL3RoZW1lMS54bWxQSwECFAAKAAAAAAAGY5RSmq0HnQEAAB0BAAADQAAAAAAAAAAAAAAAAC0SAAAeGwvc3R5bGVzLnhtbFBLAQIUAAoAAAAAAAZjlFI265b9kgcAAJIHAAATAAAAAAAAAAAAAAAAAFNNAABbQ29udGVudF9UeXBlc10ueG1sUEsBAhQACgAAAAAABmOUUkpqEflMAgAATAIAAAsAAAAAAAAAAAAAAAAAFlUAAF9yZWxzLy5yZWxzUEsBAhQACgAAAAAABmOUUtAZN0tAgAALQIAABoAAAAAAAAAAAAAAAAAi1cAAHhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzUEsFBgAAAAAJAAkAPgIAAPBZAAAAAA"></a>

Hope this helps someone to help me because I don't know what else to check! Thanks

hhurz commented 3 years ago

When exporting into xlsx format, the xlsx file should never be base64 encoded. The only reason this can happen is an exception while saving the file. You should have a look to the js console if there are any errors while the file is generated. If an exception occurs at this point, most likely something is wrong with the FileSaver library. BTW: An XLSX file is actually a zip archive that can be opened with an appropriate archive program.

algi-cap commented 3 years ago

Thanks for reply, @hhurz . The js console did not show errors but I found a different behavior when using FileSaver.js or the minified version FileSaver.min.js. This is what happens with FileSaver.js:

  1. call the FileSaver's "saveAs" function filesaverjs_saveAs
  2. stepping into "saveAs" function I see that the URL.createObjectUrl function is being called (and here the base64 encoding takes place) filesaverjs_saveAs_stepInto

This is what happens with FileSaver.min.js instead:

  1. the FileSaver's "saveAs" function is not found so exception has been catched and the tableExport's "downloadFile" function is called: filesaverminjs_downloadFile
  2. the "downloadFile" function calls again "window.URL.createObjectURL" and, also in this case, the base64 encoding takes place

Said this, the minified FileSaver.min.js has some code difference that allows to download the XLSX file without network error but, unfortunately, if I open the file with notepad++ I still see base64 encoded data: xlsx_base64

So the downloaded file is not a valid XLSX (also trying to change the extension from ".xlsx" to ".zip" I cannot open the zip archive due to "invalid archive").

But I don't know how to fix this, because it seems that the only feasible way to download a file created from JS client code is via base64 encoding. What do you suggest?

hhurz commented 3 years ago

stepping into "saveAs" function I see that the URL.createObjectUrl function is being called (and here the base64 encoding takes place)

Just for clarification: the URL.createObjectUrl function doesn't encode any thing. If the base64 encoding took place, then there occured an exception while URL.createObjectUrl was called. I cross checked the xlsx export of my test page with Chrome and Firefox without any issues. Also swapping from FileSave.min.js to the FileSaver.js did work as exspected. Here are a few suggestions, although i have to admit, I have no real idea what is going wrong on your site: Your are working with Chrome, right? Have you tried it within Firefox? Sometimes the include order of the js libs is important. I recommend to include FileSaver straight after jQuery and before all other libs.

algi-cap commented 3 years ago

I made some step ahead understanding what causes this behavior. Long story short: XLSX can't cohexist with jsPDF export. If I don't include jsPDF and jsPDF AutoTable plugin the XLSX is being exported correctly and I can open the file: includes

If you include jsPDF and jsPDF AutoTable the XLSX export is being compromised independently from where you place the two scripts (before or after XLSX js). Let me know if you can reproduce this and if you have some suggestion. Thanks.

hhurz commented 3 years ago

Thanks for digging into this. Strange. Your include order above is exactly the same i am using in my test page. The only difference: is, that I don't use xlsx.full.min.js but xlsx.core.min.js. But also swaping these files, everything works fine, Thus I can't reproduce what you observed. Would you repeat your test using the libs I included here? Perhaps it's a version conflict.

algi-cap commented 3 years ago

I've double checked the libs I'm using and all but xlsx.full.min.js are libs downloaded from this repo (so the link you posted). So I replaced xlsx.full.min.js with xlsx.core.min.js downloaded from this repo but nothing has changed (same issue). This is the current script importing list: list

Btw, I have some other script after the ones shown in the picture above. I don't post them because I already tried to remove them and the behavior doesn't change, so I think they aren't relevant for this scenario (they're all related to bootstrap-table, bootstrap-datepicker and some personal js code).

hhurz commented 3 years ago

Thank you for investigating the issue further. I have now updated my bootstrap tests to the latest bootstrap and bootstrap table versions and included the JS files you mentioned as well. Still can't reproduce the issue you described! Please have a look at the example bnotstrap4: Both export to xlsx and export to PDF work as expected. The include order is the same as you described. There are no js console errors

bootstrap4

I hate to say this, but something on your side must be causing the problem. Maybe you run the bootstrap4 sample file yourself and see if it works for you. As long as I don't have more details or insight into your implementation, I have no more ideas.