Built motion from commit 47436d59.|2.6.7
[motion2.git] / server / api / smsTransferReport / smsTransferReport.controller.js
index 4722cb2..7b3acc1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1b43=['send','index','map','rawAttributes','fieldName','type','key','model','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','VIRTUAL','SmsTransferReport','includeAll','include','rows','catch','show','params','keys','options','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/environment','sendStatus','end','json','count','offset','status','set','reject','save','update','then','destroy','error','stack','name'];(function(_0x588a5f,_0x511419){var _0x2d64af=function(_0x3f2458){while(--_0x3f2458){_0x588a5f['push'](_0x588a5f['shift']());}};_0x2d64af(++_0x511419);}(_0x1b43,0x10f));var _0x31b4=function(_0x24237f,_0x4cf32c){_0x24237f=_0x24237f-0x0;var _0x48298e=_0x1b43[_0x24237f];return _0x48298e;};'use strict';var pdf=require(_0x31b4('0x0'));var emlformat=require(_0x31b4('0x1'));var rimraf=require(_0x31b4('0x2'));var zipdir=require(_0x31b4('0x3'));var jsonpatch=require(_0x31b4('0x4'));var rp=require('request-promise');var moment=require(_0x31b4('0x5'));var BPromise=require(_0x31b4('0x6'));var Mustache=require(_0x31b4('0x7'));var util=require(_0x31b4('0x8'));var path=require(_0x31b4('0x9'));var sox=require(_0x31b4('0xa'));var csv=require(_0x31b4('0xb'));var ejs=require(_0x31b4('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0x31b4('0xd'));var crypto=require(_0x31b4('0xe'));var jsforce=require(_0x31b4('0xf'));var deskjs=require(_0x31b4('0x10'));var toCsv=require('to-csv');var querystring=require(_0x31b4('0x11'));var Papa=require('papaparse');var Redis=require(_0x31b4('0x12'));var authService=require(_0x31b4('0x13'));var qs=require(_0x31b4('0x14'));var as=require(_0x31b4('0x15'));var hardwareService=require(_0x31b4('0x16'));var logger=require(_0x31b4('0x17'))(_0x31b4('0x18'));var utils=require('../../config/utils');var config=require(_0x31b4('0x19'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4a7501,_0x341295){_0x341295=_0x341295||0xcc;return function(_0x39751b){if(_0x39751b){return _0x4a7501[_0x31b4('0x1a')](_0x341295);}return _0x4a7501['status'](_0x341295)[_0x31b4('0x1b')]();};}function respondWithResult(_0x94cde9,_0x248d3c){_0x248d3c=_0x248d3c||0xc8;return function(_0x1a1db2){if(_0x1a1db2){return _0x94cde9['status'](_0x248d3c)[_0x31b4('0x1c')](_0x1a1db2);}};}function respondWithFilteredResult(_0x30baf3,_0x1c61be){return function(_0x33190c){if(_0x33190c){var _0x341fa1=_0x33190c[_0x31b4('0x1d')],_0x486ed3=_0x1c61be[_0x31b4('0x1e')],_0x3af487=_0x1c61be['offset']+_0x1c61be['limit'],_0x3d8949;if(_0x3af487>=_0x341fa1){_0x3af487=_0x341fa1;_0x3d8949=0xc8;}else{_0x3d8949=0xce;}_0x30baf3[_0x31b4('0x1f')](_0x3d8949);return _0x30baf3[_0x31b4('0x20')]('Content-Range',_0x486ed3+'-'+_0x3af487+'/'+_0x341fa1)['json'](_0x33190c);}return null;};}function patchUpdates(_0xab5f3){return function(_0x1e6e25){try{jsonpatch['apply'](_0x1e6e25,_0xab5f3,!![]);}catch(_0x14eb6c){return BPromise[_0x31b4('0x21')](_0x14eb6c);}return _0x1e6e25[_0x31b4('0x22')]();};}function saveUpdates(_0xb32f41,_0x37db7d){return function(_0x1ab2e0){if(_0x1ab2e0){return _0x1ab2e0[_0x31b4('0x23')](_0xb32f41)[_0x31b4('0x24')](function(_0x344113){return _0x344113;});}return null;};}function removeEntity(_0x4082ec,_0x2884a){return function(_0x29be4d){if(_0x29be4d){return _0x29be4d[_0x31b4('0x25')]()[_0x31b4('0x24')](function(){_0x4082ec['status'](0xcc)[_0x31b4('0x1b')]();});}};}function handleEntityNotFound(_0x535061,_0x51d70c){return function(_0x773ac5){if(!_0x773ac5){_0x535061[_0x31b4('0x1a')](0x194);}return _0x773ac5;};}function handleError(_0x4f8757,_0x4c89be){_0x4c89be=_0x4c89be||0x1f4;return function(_0x5ce838){logger[_0x31b4('0x26')](_0x5ce838[_0x31b4('0x27')]);if(_0x5ce838[_0x31b4('0x28')]){delete _0x5ce838['name'];}_0x4f8757[_0x31b4('0x1f')](_0x4c89be)[_0x31b4('0x29')](_0x5ce838);};}exports[_0x31b4('0x2a')]=function(_0x36dd75,_0x4cd5b8){var _0x342dc5={},_0x35801f={},_0x4d009a={'count':0x0,'rows':[]};var _0x12dbaf=_[_0x31b4('0x2b')](db['SmsTransferReport'][_0x31b4('0x2c')],function(_0x522ced){return{'name':_0x522ced[_0x31b4('0x2d')],'type':_0x522ced[_0x31b4('0x2e')][_0x31b4('0x2f')]};});_0x35801f[_0x31b4('0x30')]=_[_0x31b4('0x2b')](_0x12dbaf,_0x31b4('0x28'));_0x35801f[_0x31b4('0x31')]=_['keys'](_0x36dd75[_0x31b4('0x31')]);_0x35801f[_0x31b4('0x32')]=_[_0x31b4('0x33')](_0x35801f[_0x31b4('0x30')],_0x35801f[_0x31b4('0x31')]);_0x342dc5[_0x31b4('0x34')]=_[_0x31b4('0x33')](_0x35801f[_0x31b4('0x30')],qs[_0x31b4('0x35')](_0x36dd75[_0x31b4('0x31')]['fields']));_0x342dc5[_0x31b4('0x34')]=_0x342dc5[_0x31b4('0x34')][_0x31b4('0x36')]?_0x342dc5[_0x31b4('0x34')]:_0x35801f[_0x31b4('0x30')];if(!_0x36dd75['query'][_0x31b4('0x37')](_0x31b4('0x38'))){_0x342dc5['limit']=qs[_0x31b4('0x39')](_0x36dd75[_0x31b4('0x31')][_0x31b4('0x39')]);_0x342dc5['offset']=qs[_0x31b4('0x1e')](_0x36dd75[_0x31b4('0x31')][_0x31b4('0x1e')]);}_0x342dc5[_0x31b4('0x3a')]=qs[_0x31b4('0x3b')](_0x36dd75['query'][_0x31b4('0x3b')]);_0x342dc5[_0x31b4('0x3c')]=qs[_0x31b4('0x32')](_[_0x31b4('0x3d')](_0x36dd75[_0x31b4('0x31')],_0x35801f[_0x31b4('0x32')]));if(_0x36dd75['query'][_0x31b4('0x3e')]){_0x342dc5[_0x31b4('0x3c')]=_[_0x31b4('0x3f')](_0x342dc5[_0x31b4('0x3c')],{'$or':_[_0x31b4('0x2b')](_0x12dbaf,function(_0xd5335f){if(_0xd5335f[_0x31b4('0x2e')]!==_0x31b4('0x40')){var _0xcacf4={};_0xcacf4[_0xd5335f[_0x31b4('0x28')]]={'$like':'%'+_0x36dd75[_0x31b4('0x31')][_0x31b4('0x3e')]+'%'};return _0xcacf4;}})});}_0x342dc5=_['merge']({},_0x342dc5,_0x36dd75['options']);var _0x1091dc={'where':_0x342dc5[_0x31b4('0x3c')]};return db[_0x31b4('0x41')][_0x31b4('0x1d')](_0x1091dc)[_0x31b4('0x24')](function(_0x4fbe32){_0x4d009a['count']=_0x4fbe32;if(_0x36dd75['query'][_0x31b4('0x42')]){_0x342dc5[_0x31b4('0x43')]=[{'all':!![]}];}return db['SmsTransferReport']['findAll'](_0x342dc5);})[_0x31b4('0x24')](function(_0x25e1dd){_0x4d009a[_0x31b4('0x44')]=_0x25e1dd;return _0x4d009a;})[_0x31b4('0x24')](respondWithFilteredResult(_0x4cd5b8,_0x342dc5))[_0x31b4('0x45')](handleError(_0x4cd5b8,null));};exports[_0x31b4('0x46')]=function(_0x40b531,_0x2772e3){var _0x895251={'raw':!![],'where':{'id':_0x40b531[_0x31b4('0x47')]['id']}},_0x46b605={};_0x46b605['model']=_[_0x31b4('0x48')](db[_0x31b4('0x41')][_0x31b4('0x2c')]);_0x46b605[_0x31b4('0x31')]=_[_0x31b4('0x48')](_0x40b531['query']);_0x46b605[_0x31b4('0x32')]=_[_0x31b4('0x33')](_0x46b605[_0x31b4('0x30')],_0x46b605['query']);_0x895251['attributes']=_['intersection'](_0x46b605['model'],qs['fields'](_0x40b531['query'][_0x31b4('0x35')]));_0x895251['attributes']=_0x895251[_0x31b4('0x34')][_0x31b4('0x36')]?_0x895251[_0x31b4('0x34')]:_0x46b605[_0x31b4('0x30')];if(_0x40b531[_0x31b4('0x31')]['includeAll']){_0x895251['include']=[{'all':!![]}];}_0x895251=_[_0x31b4('0x3f')]({},_0x895251,_0x40b531[_0x31b4('0x49')]);return db['SmsTransferReport'][_0x31b4('0x4a')](_0x895251)[_0x31b4('0x24')](handleEntityNotFound(_0x2772e3,null))['then'](respondWithResult(_0x2772e3,null))['catch'](handleError(_0x2772e3,null));};exports[_0x31b4('0x4b')]=function(_0x544ff9,_0x554497){return db['SmsTransferReport'][_0x31b4('0x4b')](_0x544ff9[_0x31b4('0x4c')],{})[_0x31b4('0x24')](respondWithResult(_0x554497,0xc9))['catch'](handleError(_0x554497,null));};exports[_0x31b4('0x23')]=function(_0x3f7ea1,_0x37156a){if(_0x3f7ea1[_0x31b4('0x4c')]['id']){delete _0x3f7ea1[_0x31b4('0x4c')]['id'];}return db[_0x31b4('0x41')][_0x31b4('0x4a')]({'where':{'id':_0x3f7ea1[_0x31b4('0x47')]['id']}})['then'](handleEntityNotFound(_0x37156a,null))[_0x31b4('0x24')](saveUpdates(_0x3f7ea1[_0x31b4('0x4c')],null))['then'](respondWithResult(_0x37156a,null))[_0x31b4('0x45')](handleError(_0x37156a,null));};exports[_0x31b4('0x25')]=function(_0x2de3a9,_0x36b0c3){return db[_0x31b4('0x41')][_0x31b4('0x4a')]({'where':{'id':_0x2de3a9[_0x31b4('0x47')]['id']}})['then'](handleEntityNotFound(_0x36b0c3,null))[_0x31b4('0x24')](removeEntity(_0x36b0c3,null))[_0x31b4('0x45')](handleError(_0x36b0c3,null));};exports['describe']=function(_0x37a715,_0x1c0b40){return db[_0x31b4('0x41')][_0x31b4('0x4d')]()['then'](respondWithResult(_0x1c0b40,null))[_0x31b4('0x45')](handleError(_0x1c0b40,null));};
\ No newline at end of file
+var _0x31b2=['util','path','sox','to-csv','ejs','fs-extra','squel','jsforce','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/license/util','../../mysqldb','sendStatus','status','end','offset','undefined','count','set','Content-Range','json','apply','save','update','then','destroy','error','stack','name','send','rawAttributes','fieldName','type','key','model','map','query','keys','filters','intersection','fields','attributes','length','limit','sort','pick','filter','where','merge','VIRTUAL','options','includeAll','include','SmsTransferReport','findAll','rows','catch','find','create','body','params','describe','zip-dir','fast-json-patch','request-promise','moment','bluebird'];(function(_0x30bcf1,_0xf3156a){var _0x30cf74=function(_0x4894d9){while(--_0x4894d9){_0x30bcf1['push'](_0x30bcf1['shift']());}};_0x30cf74(++_0xf3156a);}(_0x31b2,0x8f));var _0x231b=function(_0x56c70f,_0x4e4493){_0x56c70f=_0x56c70f-0x0;var _0x3812ed=_0x31b2[_0x56c70f];return _0x3812ed;};'use strict';var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x231b('0x0'));var jsonpatch=require(_0x231b('0x1'));var rp=require(_0x231b('0x2'));var moment=require(_0x231b('0x3'));var BPromise=require(_0x231b('0x4'));var Mustache=require('mustache');var util=require(_0x231b('0x5'));var path=require(_0x231b('0x6'));var sox=require(_0x231b('0x7'));var csv=require(_0x231b('0x8'));var ejs=require(_0x231b('0x9'));var fs=require('fs');var fs_extra=require(_0x231b('0xa'));var _=require('lodash');var squel=require(_0x231b('0xb'));var crypto=require('crypto');var jsforce=require(_0x231b('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x231b('0x8'));var querystring=require(_0x231b('0xd'));var Papa=require(_0x231b('0xe'));var Redis=require(_0x231b('0xf'));var authService=require(_0x231b('0x10'));var qs=require(_0x231b('0x11'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0x231b('0x12'));var logger=require(_0x231b('0x13'))(_0x231b('0x14'));var utils=require(_0x231b('0x15'));var config=require('../../config/environment');var licenseUtil=require(_0x231b('0x16'));var db=require(_0x231b('0x17'))['db'];function respondWithStatusCode(_0x3cb7b6,_0x4169fa){_0x4169fa=_0x4169fa||0xcc;return function(_0x1584e5){if(_0x1584e5){return _0x3cb7b6[_0x231b('0x18')](_0x4169fa);}return _0x3cb7b6[_0x231b('0x19')](_0x4169fa)[_0x231b('0x1a')]();};}function respondWithResult(_0x1ba790,_0x146848){_0x146848=_0x146848||0xc8;return function(_0x50c92d){if(_0x50c92d){return _0x1ba790[_0x231b('0x19')](_0x146848)['json'](_0x50c92d);}};}function respondWithFilteredResult(_0x5b75bf,_0x454137){return function(_0x457786){if(_0x457786){var _0x568a2d=typeof _0x454137[_0x231b('0x1b')]==='undefined'&&typeof _0x454137['limit']===_0x231b('0x1c');var _0x4076b9=_0x457786['count'];var _0x296023=_0x568a2d?0x0:_0x454137['offset'];var _0x5e9340=_0x568a2d?_0x457786[_0x231b('0x1d')]:_0x454137[_0x231b('0x1b')]+_0x454137['limit'];var _0x45ce18;if(_0x5e9340>=_0x4076b9){_0x5e9340=_0x4076b9;_0x45ce18=0xc8;}else{_0x45ce18=0xce;}_0x5b75bf['status'](_0x45ce18);return _0x5b75bf[_0x231b('0x1e')](_0x231b('0x1f'),_0x296023+'-'+_0x5e9340+'/'+_0x4076b9)[_0x231b('0x20')](_0x457786);}return null;};}function patchUpdates(_0x48535c){return function(_0xcb1512){try{jsonpatch[_0x231b('0x21')](_0xcb1512,_0x48535c,!![]);}catch(_0x423c35){return BPromise['reject'](_0x423c35);}return _0xcb1512[_0x231b('0x22')]();};}function saveUpdates(_0x363a67,_0x3e5d2d){return function(_0xb8cc45){if(_0xb8cc45){return _0xb8cc45[_0x231b('0x23')](_0x363a67)[_0x231b('0x24')](function(_0x2ffa02){return _0x2ffa02;});}return null;};}function removeEntity(_0x4b4fc2,_0x1ebc9c){return function(_0x42a622){if(_0x42a622){return _0x42a622[_0x231b('0x25')]()[_0x231b('0x24')](function(){_0x4b4fc2[_0x231b('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4af65c,_0x1824ef){return function(_0x4ca3fa){if(!_0x4ca3fa){_0x4af65c[_0x231b('0x18')](0x194);}return _0x4ca3fa;};}function handleError(_0x3fe074,_0x318d3c){_0x318d3c=_0x318d3c||0x1f4;return function(_0x11cc48){logger[_0x231b('0x26')](_0x11cc48[_0x231b('0x27')]);if(_0x11cc48[_0x231b('0x28')]){delete _0x11cc48['name'];}_0x3fe074[_0x231b('0x19')](_0x318d3c)[_0x231b('0x29')](_0x11cc48);};}exports['index']=function(_0x1463ba,_0x1d0fdf){var _0x5e09d8={},_0x5a964c={},_0x256dbe={'count':0x0,'rows':[]};var _0x19c8bb=_['map'](db['SmsTransferReport'][_0x231b('0x2a')],function(_0x23a02f){return{'name':_0x23a02f[_0x231b('0x2b')],'type':_0x23a02f[_0x231b('0x2c')][_0x231b('0x2d')]};});_0x5a964c[_0x231b('0x2e')]=_[_0x231b('0x2f')](_0x19c8bb,_0x231b('0x28'));_0x5a964c[_0x231b('0x30')]=_[_0x231b('0x31')](_0x1463ba[_0x231b('0x30')]);_0x5a964c[_0x231b('0x32')]=_[_0x231b('0x33')](_0x5a964c[_0x231b('0x2e')],_0x5a964c[_0x231b('0x30')]);_0x5e09d8['attributes']=_['intersection'](_0x5a964c[_0x231b('0x2e')],qs[_0x231b('0x34')](_0x1463ba['query'][_0x231b('0x34')]));_0x5e09d8[_0x231b('0x35')]=_0x5e09d8[_0x231b('0x35')][_0x231b('0x36')]?_0x5e09d8['attributes']:_0x5a964c[_0x231b('0x2e')];if(!_0x1463ba[_0x231b('0x30')]['hasOwnProperty']('nolimit')){_0x5e09d8[_0x231b('0x37')]=qs[_0x231b('0x37')](_0x1463ba[_0x231b('0x30')][_0x231b('0x37')]);_0x5e09d8['offset']=qs[_0x231b('0x1b')](_0x1463ba[_0x231b('0x30')]['offset']);}_0x5e09d8['order']=qs[_0x231b('0x38')](_0x1463ba[_0x231b('0x30')][_0x231b('0x38')]);_0x5e09d8['where']=qs['filters'](_[_0x231b('0x39')](_0x1463ba[_0x231b('0x30')],_0x5a964c[_0x231b('0x32')]),_0x19c8bb);if(_0x1463ba[_0x231b('0x30')][_0x231b('0x3a')]){_0x5e09d8[_0x231b('0x3b')]=_[_0x231b('0x3c')](_0x5e09d8[_0x231b('0x3b')],{'$or':_[_0x231b('0x2f')](_0x19c8bb,function(_0x58965b){if(_0x58965b[_0x231b('0x2c')]!==_0x231b('0x3d')){var _0xd0948={};_0xd0948[_0x58965b[_0x231b('0x28')]]={'$like':'%'+_0x1463ba[_0x231b('0x30')][_0x231b('0x3a')]+'%'};return _0xd0948;}})});}_0x5e09d8=_['merge']({},_0x5e09d8,_0x1463ba[_0x231b('0x3e')]);var _0x297164={'where':_0x5e09d8[_0x231b('0x3b')]};return db['SmsTransferReport'][_0x231b('0x1d')](_0x297164)[_0x231b('0x24')](function(_0x99202b){_0x256dbe[_0x231b('0x1d')]=_0x99202b;if(_0x1463ba[_0x231b('0x30')][_0x231b('0x3f')]){_0x5e09d8[_0x231b('0x40')]=[{'all':!![]}];}return db[_0x231b('0x41')][_0x231b('0x42')](_0x5e09d8);})[_0x231b('0x24')](function(_0xde1754){_0x256dbe[_0x231b('0x43')]=_0xde1754;return _0x256dbe;})[_0x231b('0x24')](respondWithFilteredResult(_0x1d0fdf,_0x5e09d8))[_0x231b('0x44')](handleError(_0x1d0fdf,null));};exports['show']=function(_0x11d965,_0x2f8b91){var _0x8ad2d5={'raw':!![],'where':{'id':_0x11d965['params']['id']}},_0x19a759={};_0x19a759['model']=_[_0x231b('0x31')](db[_0x231b('0x41')][_0x231b('0x2a')]);_0x19a759[_0x231b('0x30')]=_[_0x231b('0x31')](_0x11d965[_0x231b('0x30')]);_0x19a759[_0x231b('0x32')]=_[_0x231b('0x33')](_0x19a759[_0x231b('0x2e')],_0x19a759[_0x231b('0x30')]);_0x8ad2d5[_0x231b('0x35')]=_[_0x231b('0x33')](_0x19a759[_0x231b('0x2e')],qs['fields'](_0x11d965[_0x231b('0x30')]['fields']));_0x8ad2d5['attributes']=_0x8ad2d5[_0x231b('0x35')][_0x231b('0x36')]?_0x8ad2d5[_0x231b('0x35')]:_0x19a759[_0x231b('0x2e')];if(_0x11d965[_0x231b('0x30')]['includeAll']){_0x8ad2d5[_0x231b('0x40')]=[{'all':!![]}];}_0x8ad2d5=_[_0x231b('0x3c')]({},_0x8ad2d5,_0x11d965[_0x231b('0x3e')]);return db[_0x231b('0x41')][_0x231b('0x45')](_0x8ad2d5)[_0x231b('0x24')](handleEntityNotFound(_0x2f8b91,null))[_0x231b('0x24')](respondWithResult(_0x2f8b91,null))[_0x231b('0x44')](handleError(_0x2f8b91,null));};exports[_0x231b('0x46')]=function(_0x195b59,_0x34e8b8){return db[_0x231b('0x41')][_0x231b('0x46')](_0x195b59[_0x231b('0x47')],{})[_0x231b('0x24')](respondWithResult(_0x34e8b8,0xc9))[_0x231b('0x44')](handleError(_0x34e8b8,null));};exports['update']=function(_0x20f620,_0x98cf05){if(_0x20f620['body']['id']){delete _0x20f620[_0x231b('0x47')]['id'];}return db['SmsTransferReport'][_0x231b('0x45')]({'where':{'id':_0x20f620[_0x231b('0x48')]['id']}})['then'](handleEntityNotFound(_0x98cf05,null))[_0x231b('0x24')](saveUpdates(_0x20f620['body'],null))[_0x231b('0x24')](respondWithResult(_0x98cf05,null))[_0x231b('0x44')](handleError(_0x98cf05,null));};exports['destroy']=function(_0x561675,_0x4349bf){return db[_0x231b('0x41')][_0x231b('0x45')]({'where':{'id':_0x561675[_0x231b('0x48')]['id']}})[_0x231b('0x24')](handleEntityNotFound(_0x4349bf,null))['then'](removeEntity(_0x4349bf,null))['catch'](handleError(_0x4349bf,null));};exports[_0x231b('0x49')]=function(_0x43b6ef,_0xcfc4ff){return db['SmsTransferReport'][_0x231b('0x49')]()['then'](respondWithResult(_0xcfc4ff,null))['catch'](handleError(_0xcfc4ff,null));};
\ No newline at end of file