Built motion from commit ffdca78c.|2.6.24
[motion2.git] / server / api / whatsappQueueReport / whatsappQueueReport.controller.js
index c3441c2..7b9bfb4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa60d=['attributes','intersection','fields','length','hasOwnProperty','nolimit','sort','where','pick','merge','type','VIRTUAL','filter','options','count','includeAll','include','findAll','rows','params','keys','find','catch','create','body','update','describe','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','sox','to-csv','ejs','squel','jsforce','desk.js','papaparse','ioredis','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','api','../../config/utils','../../config/license/util','../../mysqldb','sendStatus','status','end','json','offset','limit','set','apply','reject','save','destroy','then','error','stack','name','send','index','map','WhatsappQueueReport','rawAttributes','fieldName','key','model','query','filters'];(function(_0x589248,_0x31dea3){var _0x486750=function(_0x3e7c21){while(--_0x3e7c21){_0x589248['push'](_0x589248['shift']());}};_0x486750(++_0x31dea3);}(_0xa60d,0xf6));var _0xda60=function(_0x5744d0,_0x281507){_0x5744d0=_0x5744d0-0x0;var _0x7f5a59=_0xa60d[_0x5744d0];return _0x7f5a59;};'use strict';var pdf=require(_0xda60('0x0'));var emlformat=require(_0xda60('0x1'));var rimraf=require(_0xda60('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xda60('0x3'));var moment=require(_0xda60('0x4'));var BPromise=require(_0xda60('0x5'));var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require(_0xda60('0x6'));var csv=require(_0xda60('0x7'));var ejs=require(_0xda60('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0xda60('0x9'));var crypto=require('crypto');var jsforce=require(_0xda60('0xa'));var deskjs=require(_0xda60('0xb'));var toCsv=require(_0xda60('0x7'));var querystring=require('querystring');var Papa=require(_0xda60('0xc'));var Redis=require(_0xda60('0xd'));var authService=require('../../components/auth/service');var qs=require(_0xda60('0xe'));var as=require(_0xda60('0xf'));var hardwareService=require('../../config/license/hardware');var logger=require(_0xda60('0x10'))(_0xda60('0x11'));var utils=require(_0xda60('0x12'));var config=require('../../config/environment');var licenseUtil=require(_0xda60('0x13'));var db=require(_0xda60('0x14'))['db'];function respondWithStatusCode(_0x246dee,_0x2d9f13){_0x2d9f13=_0x2d9f13||0xcc;return function(_0x51fd10){if(_0x51fd10){return _0x246dee[_0xda60('0x15')](_0x2d9f13);}return _0x246dee[_0xda60('0x16')](_0x2d9f13)[_0xda60('0x17')]();};}function respondWithResult(_0x2afbbe,_0x217342){_0x217342=_0x217342||0xc8;return function(_0x59bf6b){if(_0x59bf6b){return _0x2afbbe[_0xda60('0x16')](_0x217342)[_0xda60('0x18')](_0x59bf6b);}};}function respondWithFilteredResult(_0x563fa3,_0x282919){return function(_0x521b4c){if(_0x521b4c){var _0x2b9112=_0x521b4c['count'],_0x4ad6ca=_0x282919[_0xda60('0x19')],_0x42fe3b=_0x282919['offset']+_0x282919[_0xda60('0x1a')],_0x3317a7;if(_0x42fe3b>=_0x2b9112){_0x42fe3b=_0x2b9112;_0x3317a7=0xc8;}else{_0x3317a7=0xce;}_0x563fa3[_0xda60('0x16')](_0x3317a7);return _0x563fa3[_0xda60('0x1b')]('Content-Range',_0x4ad6ca+'-'+_0x42fe3b+'/'+_0x2b9112)[_0xda60('0x18')](_0x521b4c);}return null;};}function patchUpdates(_0x30f267){return function(_0x2813f6){try{jsonpatch[_0xda60('0x1c')](_0x2813f6,_0x30f267,!![]);}catch(_0x2c5f21){return BPromise[_0xda60('0x1d')](_0x2c5f21);}return _0x2813f6[_0xda60('0x1e')]();};}function saveUpdates(_0x5852e4,_0x2fad01){return function(_0x174f95){if(_0x174f95){return _0x174f95['update'](_0x5852e4)['then'](function(_0x3a9c3f){return _0x3a9c3f;});}return null;};}function removeEntity(_0x3138fb,_0x14c75a){return function(_0x6871bb){if(_0x6871bb){return _0x6871bb[_0xda60('0x1f')]()[_0xda60('0x20')](function(){_0x3138fb[_0xda60('0x16')](0xcc)[_0xda60('0x17')]();});}};}function handleEntityNotFound(_0x44cfc0,_0x753bd9){return function(_0x23f3da){if(!_0x23f3da){_0x44cfc0[_0xda60('0x15')](0x194);}return _0x23f3da;};}function handleError(_0x4e8d7e,_0x13dadd){_0x13dadd=_0x13dadd||0x1f4;return function(_0x5dfde1){logger[_0xda60('0x21')](_0x5dfde1[_0xda60('0x22')]);if(_0x5dfde1[_0xda60('0x23')]){delete _0x5dfde1[_0xda60('0x23')];}_0x4e8d7e[_0xda60('0x16')](_0x13dadd)[_0xda60('0x24')](_0x5dfde1);};}exports[_0xda60('0x25')]=function(_0x470673,_0x561f1c){var _0x444ec8={},_0x1693ea={},_0x11bd37={'count':0x0,'rows':[]};var _0x2c5970=_[_0xda60('0x26')](db[_0xda60('0x27')][_0xda60('0x28')],function(_0x2a3d1){return{'name':_0x2a3d1[_0xda60('0x29')],'type':_0x2a3d1['type'][_0xda60('0x2a')]};});_0x1693ea[_0xda60('0x2b')]=_[_0xda60('0x26')](_0x2c5970,_0xda60('0x23'));_0x1693ea['query']=_['keys'](_0x470673[_0xda60('0x2c')]);_0x1693ea[_0xda60('0x2d')]=_['intersection'](_0x1693ea['model'],_0x1693ea[_0xda60('0x2c')]);_0x444ec8[_0xda60('0x2e')]=_[_0xda60('0x2f')](_0x1693ea[_0xda60('0x2b')],qs[_0xda60('0x30')](_0x470673[_0xda60('0x2c')]['fields']));_0x444ec8[_0xda60('0x2e')]=_0x444ec8[_0xda60('0x2e')][_0xda60('0x31')]?_0x444ec8[_0xda60('0x2e')]:_0x1693ea[_0xda60('0x2b')];if(!_0x470673['query'][_0xda60('0x32')](_0xda60('0x33'))){_0x444ec8[_0xda60('0x1a')]=qs[_0xda60('0x1a')](_0x470673[_0xda60('0x2c')][_0xda60('0x1a')]);_0x444ec8['offset']=qs[_0xda60('0x19')](_0x470673[_0xda60('0x2c')][_0xda60('0x19')]);}_0x444ec8['order']=qs['sort'](_0x470673['query'][_0xda60('0x34')]);_0x444ec8[_0xda60('0x35')]=qs[_0xda60('0x2d')](_[_0xda60('0x36')](_0x470673[_0xda60('0x2c')],_0x1693ea[_0xda60('0x2d')]),_0x2c5970);if(_0x470673[_0xda60('0x2c')]['filter']){_0x444ec8[_0xda60('0x35')]=_[_0xda60('0x37')](_0x444ec8[_0xda60('0x35')],{'$or':_['map'](_0x2c5970,function(_0x483140){if(_0x483140[_0xda60('0x38')]!==_0xda60('0x39')){var _0x4b924c={};_0x4b924c[_0x483140[_0xda60('0x23')]]={'$like':'%'+_0x470673['query'][_0xda60('0x3a')]+'%'};return _0x4b924c;}})});}_0x444ec8=_['merge']({},_0x444ec8,_0x470673[_0xda60('0x3b')]);var _0xbee5ff={'where':_0x444ec8['where']};return db[_0xda60('0x27')][_0xda60('0x3c')](_0xbee5ff)[_0xda60('0x20')](function(_0x9c6542){_0x11bd37[_0xda60('0x3c')]=_0x9c6542;if(_0x470673[_0xda60('0x2c')][_0xda60('0x3d')]){_0x444ec8[_0xda60('0x3e')]=[{'all':!![]}];}return db[_0xda60('0x27')][_0xda60('0x3f')](_0x444ec8);})[_0xda60('0x20')](function(_0xf0ccdc){_0x11bd37[_0xda60('0x40')]=_0xf0ccdc;return _0x11bd37;})[_0xda60('0x20')](respondWithFilteredResult(_0x561f1c,_0x444ec8))['catch'](handleError(_0x561f1c,null));};exports['show']=function(_0x281497,_0x43526f){var _0x4cd195={'raw':!![],'where':{'id':_0x281497[_0xda60('0x41')]['id']}},_0x566442={};_0x566442['model']=_[_0xda60('0x42')](db[_0xda60('0x27')][_0xda60('0x28')]);_0x566442[_0xda60('0x2c')]=_[_0xda60('0x42')](_0x281497[_0xda60('0x2c')]);_0x566442[_0xda60('0x2d')]=_['intersection'](_0x566442[_0xda60('0x2b')],_0x566442[_0xda60('0x2c')]);_0x4cd195['attributes']=_['intersection'](_0x566442[_0xda60('0x2b')],qs[_0xda60('0x30')](_0x281497[_0xda60('0x2c')][_0xda60('0x30')]));_0x4cd195[_0xda60('0x2e')]=_0x4cd195[_0xda60('0x2e')][_0xda60('0x31')]?_0x4cd195[_0xda60('0x2e')]:_0x566442[_0xda60('0x2b')];if(_0x281497['query']['includeAll']){_0x4cd195[_0xda60('0x3e')]=[{'all':!![]}];}_0x4cd195=_[_0xda60('0x37')]({},_0x4cd195,_0x281497[_0xda60('0x3b')]);return db[_0xda60('0x27')][_0xda60('0x43')](_0x4cd195)[_0xda60('0x20')](handleEntityNotFound(_0x43526f,null))[_0xda60('0x20')](respondWithResult(_0x43526f,null))[_0xda60('0x44')](handleError(_0x43526f,null));};exports[_0xda60('0x45')]=function(_0x3434d5,_0x40ba67){return db[_0xda60('0x27')][_0xda60('0x45')](_0x3434d5[_0xda60('0x46')],{})[_0xda60('0x20')](respondWithResult(_0x40ba67,0xc9))[_0xda60('0x44')](handleError(_0x40ba67,null));};exports[_0xda60('0x47')]=function(_0x38e5c3,_0x1da878){if(_0x38e5c3['body']['id']){delete _0x38e5c3['body']['id'];}return db['WhatsappQueueReport'][_0xda60('0x43')]({'where':{'id':_0x38e5c3[_0xda60('0x41')]['id']}})['then'](handleEntityNotFound(_0x1da878,null))[_0xda60('0x20')](saveUpdates(_0x38e5c3[_0xda60('0x46')],null))['then'](respondWithResult(_0x1da878,null))[_0xda60('0x44')](handleError(_0x1da878,null));};exports[_0xda60('0x1f')]=function(_0x551c38,_0x30f553){return db[_0xda60('0x27')]['find']({'where':{'id':_0x551c38['params']['id']}})[_0xda60('0x20')](handleEntityNotFound(_0x30f553,null))[_0xda60('0x20')](removeEntity(_0x30f553,null))[_0xda60('0x44')](handleError(_0x30f553,null));};exports[_0xda60('0x48')]=function(_0x1dcefa,_0x5e2edf){return db[_0xda60('0x27')][_0xda60('0x48')]()[_0xda60('0x20')](respondWithResult(_0x5e2edf,null))['catch'](handleError(_0x5e2edf,null));};
\ No newline at end of file
+var _0xeffd=['model','keys','intersection','query','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','merge','VIRTUAL','filter','options','count','includeAll','include','findAll','catch','show','find','create','body','params','describe','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','fs-extra','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','sendStatus','status','offset','undefined','limit','set','Content-Range','json','reject','update','then','destroy','stack','name','send','index','map','WhatsappQueueReport','rawAttributes','type'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xeffd,0x6b));var _0xdeff=function(_0x1f1a34,_0x3a8806){_0x1f1a34=_0x1f1a34-0x0;var _0x5086a8=_0xeffd[_0x1f1a34];return _0x5086a8;};'use strict';var emlformat=require(_0xdeff('0x0'));var rimraf=require('rimraf');var zipdir=require(_0xdeff('0x1'));var jsonpatch=require(_0xdeff('0x2'));var rp=require(_0xdeff('0x3'));var moment=require(_0xdeff('0x4'));var BPromise=require(_0xdeff('0x5'));var Mustache=require(_0xdeff('0x6'));var util=require(_0xdeff('0x7'));var path=require(_0xdeff('0x8'));var sox=require(_0xdeff('0x9'));var csv=require(_0xdeff('0xa'));var ejs=require(_0xdeff('0xb'));var fs=require('fs');var fs_extra=require(_0xdeff('0xc'));var _=require(_0xdeff('0xd'));var squel=require(_0xdeff('0xe'));var crypto=require(_0xdeff('0xf'));var jsforce=require(_0xdeff('0x10'));var deskjs=require(_0xdeff('0x11'));var toCsv=require('to-csv');var querystring=require(_0xdeff('0x12'));var Papa=require(_0xdeff('0x13'));var Redis=require(_0xdeff('0x14'));var authService=require('../../components/auth/service');var qs=require(_0xdeff('0x15'));var as=require(_0xdeff('0x16'));var hardwareService=require(_0xdeff('0x17'));var logger=require(_0xdeff('0x18'))(_0xdeff('0x19'));var utils=require(_0xdeff('0x1a'));var config=require(_0xdeff('0x1b'));var licenseUtil=require(_0xdeff('0x1c'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x461699,_0x116bf9){_0x116bf9=_0x116bf9||0xcc;return function(_0x4952f2){if(_0x4952f2){return _0x461699[_0xdeff('0x1d')](_0x116bf9);}return _0x461699['status'](_0x116bf9)['end']();};}function respondWithResult(_0x3e56a1,_0x47410f){_0x47410f=_0x47410f||0xc8;return function(_0x1585e8){if(_0x1585e8){return _0x3e56a1[_0xdeff('0x1e')](_0x47410f)['json'](_0x1585e8);}};}function respondWithFilteredResult(_0x826132,_0x314ded){return function(_0xea6c4){if(_0xea6c4){var _0x391633=typeof _0x314ded[_0xdeff('0x1f')]===_0xdeff('0x20')&&typeof _0x314ded['limit']==='undefined';var _0x7440af=_0xea6c4['count'];var _0x5c9837=_0x391633?0x0:_0x314ded[_0xdeff('0x1f')];var _0x369e13=_0x391633?_0xea6c4['count']:_0x314ded[_0xdeff('0x1f')]+_0x314ded[_0xdeff('0x21')];var _0x1ab1fa;if(_0x369e13>=_0x7440af){_0x369e13=_0x7440af;_0x1ab1fa=0xc8;}else{_0x1ab1fa=0xce;}_0x826132[_0xdeff('0x1e')](_0x1ab1fa);return _0x826132[_0xdeff('0x22')](_0xdeff('0x23'),_0x5c9837+'-'+_0x369e13+'/'+_0x7440af)[_0xdeff('0x24')](_0xea6c4);}return null;};}function patchUpdates(_0x919c93){return function(_0x488faa){try{jsonpatch['apply'](_0x488faa,_0x919c93,!![]);}catch(_0x56cb84){return BPromise[_0xdeff('0x25')](_0x56cb84);}return _0x488faa['save']();};}function saveUpdates(_0x189627,_0x91c0b4){return function(_0x543653){if(_0x543653){return _0x543653[_0xdeff('0x26')](_0x189627)[_0xdeff('0x27')](function(_0x4eb2a8){return _0x4eb2a8;});}return null;};}function removeEntity(_0x5dbe96,_0x3b2554){return function(_0x15c425){if(_0x15c425){return _0x15c425[_0xdeff('0x28')]()[_0xdeff('0x27')](function(){_0x5dbe96[_0xdeff('0x1e')](0xcc)['end']();});}};}function handleEntityNotFound(_0xb08f19,_0x412db3){return function(_0x3741fb){if(!_0x3741fb){_0xb08f19[_0xdeff('0x1d')](0x194);}return _0x3741fb;};}function handleError(_0x16974b,_0x35823c){_0x35823c=_0x35823c||0x1f4;return function(_0x3d0111){logger['error'](_0x3d0111[_0xdeff('0x29')]);if(_0x3d0111[_0xdeff('0x2a')]){delete _0x3d0111['name'];}_0x16974b['status'](_0x35823c)[_0xdeff('0x2b')](_0x3d0111);};}exports[_0xdeff('0x2c')]=function(_0x16b2d0,_0xcb819c){var _0x533069={},_0xf9b278={},_0xbc75ee={'count':0x0,'rows':[]};var _0x4e0ff2=_[_0xdeff('0x2d')](db[_0xdeff('0x2e')][_0xdeff('0x2f')],function(_0x5045b8){return{'name':_0x5045b8['fieldName'],'type':_0x5045b8[_0xdeff('0x30')]['key']};});_0xf9b278[_0xdeff('0x31')]=_[_0xdeff('0x2d')](_0x4e0ff2,_0xdeff('0x2a'));_0xf9b278['query']=_[_0xdeff('0x32')](_0x16b2d0['query']);_0xf9b278['filters']=_[_0xdeff('0x33')](_0xf9b278[_0xdeff('0x31')],_0xf9b278[_0xdeff('0x34')]);_0x533069[_0xdeff('0x35')]=_['intersection'](_0xf9b278[_0xdeff('0x31')],qs[_0xdeff('0x36')](_0x16b2d0[_0xdeff('0x34')][_0xdeff('0x36')]));_0x533069[_0xdeff('0x35')]=_0x533069[_0xdeff('0x35')][_0xdeff('0x37')]?_0x533069['attributes']:_0xf9b278[_0xdeff('0x31')];if(!_0x16b2d0['query'][_0xdeff('0x38')](_0xdeff('0x39'))){_0x533069[_0xdeff('0x21')]=qs[_0xdeff('0x21')](_0x16b2d0[_0xdeff('0x34')][_0xdeff('0x21')]);_0x533069['offset']=qs[_0xdeff('0x1f')](_0x16b2d0[_0xdeff('0x34')]['offset']);}_0x533069[_0xdeff('0x3a')]=qs[_0xdeff('0x3b')](_0x16b2d0[_0xdeff('0x34')][_0xdeff('0x3b')]);_0x533069[_0xdeff('0x3c')]=qs[_0xdeff('0x3d')](_[_0xdeff('0x3e')](_0x16b2d0[_0xdeff('0x34')],_0xf9b278['filters']),_0x4e0ff2);if(_0x16b2d0[_0xdeff('0x34')]['filter']){_0x533069[_0xdeff('0x3c')]=_[_0xdeff('0x3f')](_0x533069[_0xdeff('0x3c')],{'$or':_['map'](_0x4e0ff2,function(_0x443550){if(_0x443550[_0xdeff('0x30')]!==_0xdeff('0x40')){var _0x467ce0={};_0x467ce0[_0x443550[_0xdeff('0x2a')]]={'$like':'%'+_0x16b2d0['query'][_0xdeff('0x41')]+'%'};return _0x467ce0;}})});}_0x533069=_['merge']({},_0x533069,_0x16b2d0[_0xdeff('0x42')]);var _0x14f1d0={'where':_0x533069['where']};return db[_0xdeff('0x2e')][_0xdeff('0x43')](_0x14f1d0)[_0xdeff('0x27')](function(_0x2e9dcd){_0xbc75ee[_0xdeff('0x43')]=_0x2e9dcd;if(_0x16b2d0['query'][_0xdeff('0x44')]){_0x533069[_0xdeff('0x45')]=[{'all':!![]}];}return db[_0xdeff('0x2e')][_0xdeff('0x46')](_0x533069);})[_0xdeff('0x27')](function(_0x5dfbb3){_0xbc75ee['rows']=_0x5dfbb3;return _0xbc75ee;})[_0xdeff('0x27')](respondWithFilteredResult(_0xcb819c,_0x533069))[_0xdeff('0x47')](handleError(_0xcb819c,null));};exports[_0xdeff('0x48')]=function(_0x318e77,_0x3c4fd2){var _0x289f70={'raw':!![],'where':{'id':_0x318e77['params']['id']}},_0x2cd68a={};_0x2cd68a[_0xdeff('0x31')]=_[_0xdeff('0x32')](db[_0xdeff('0x2e')]['rawAttributes']);_0x2cd68a[_0xdeff('0x34')]=_[_0xdeff('0x32')](_0x318e77[_0xdeff('0x34')]);_0x2cd68a[_0xdeff('0x3d')]=_['intersection'](_0x2cd68a[_0xdeff('0x31')],_0x2cd68a[_0xdeff('0x34')]);_0x289f70[_0xdeff('0x35')]=_[_0xdeff('0x33')](_0x2cd68a[_0xdeff('0x31')],qs[_0xdeff('0x36')](_0x318e77[_0xdeff('0x34')][_0xdeff('0x36')]));_0x289f70['attributes']=_0x289f70[_0xdeff('0x35')][_0xdeff('0x37')]?_0x289f70[_0xdeff('0x35')]:_0x2cd68a[_0xdeff('0x31')];if(_0x318e77[_0xdeff('0x34')]['includeAll']){_0x289f70[_0xdeff('0x45')]=[{'all':!![]}];}_0x289f70=_[_0xdeff('0x3f')]({},_0x289f70,_0x318e77[_0xdeff('0x42')]);return db[_0xdeff('0x2e')][_0xdeff('0x49')](_0x289f70)['then'](handleEntityNotFound(_0x3c4fd2,null))[_0xdeff('0x27')](respondWithResult(_0x3c4fd2,null))['catch'](handleError(_0x3c4fd2,null));};exports[_0xdeff('0x4a')]=function(_0x10e4ba,_0x1bf17c){return db[_0xdeff('0x2e')][_0xdeff('0x4a')](_0x10e4ba[_0xdeff('0x4b')],{})['then'](respondWithResult(_0x1bf17c,0xc9))['catch'](handleError(_0x1bf17c,null));};exports[_0xdeff('0x26')]=function(_0xf91a72,_0x3dc206){if(_0xf91a72['body']['id']){delete _0xf91a72['body']['id'];}return db[_0xdeff('0x2e')][_0xdeff('0x49')]({'where':{'id':_0xf91a72['params']['id']}})[_0xdeff('0x27')](handleEntityNotFound(_0x3dc206,null))[_0xdeff('0x27')](saveUpdates(_0xf91a72[_0xdeff('0x4b')],null))['then'](respondWithResult(_0x3dc206,null))[_0xdeff('0x47')](handleError(_0x3dc206,null));};exports[_0xdeff('0x28')]=function(_0x1ca376,_0x59ae32){return db[_0xdeff('0x2e')][_0xdeff('0x49')]({'where':{'id':_0x1ca376[_0xdeff('0x4c')]['id']}})[_0xdeff('0x27')](handleEntityNotFound(_0x59ae32,null))[_0xdeff('0x27')](removeEntity(_0x59ae32,null))[_0xdeff('0x47')](handleError(_0x59ae32,null));};exports[_0xdeff('0x4d')]=function(_0x578185,_0x4517d1){return db[_0xdeff('0x2e')]['describe']()[_0xdeff('0x27')](respondWithResult(_0x4517d1,null))[_0xdeff('0x47')](handleError(_0x4517d1,null));};
\ No newline at end of file