Built motion from commit c116dc8b.|2.6.30
[motion2.git] / server / api / voiceTransferReport / voiceTransferReport.controller.js
index ae14ef1..aa484fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd618=['html-pdf','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','status','end','offset','limit','set','Content-Range','json','reject','then','sendStatus','name','send','VoiceTransferReport','type','model','map','query','filters','fields','attributes','length','hasOwnProperty','order','sort','where','pick','merge','VIRTUAL','filter','options','count','includeAll','findAll','rows','catch','show','params','keys','intersection','include','find','create','body','destroy'];(function(_0x19e822,_0x31c40e){var _0x2e9ab2=function(_0x5c6b6d){while(--_0x5c6b6d){_0x19e822['push'](_0x19e822['shift']());}};_0x2e9ab2(++_0x31c40e);}(_0xd618,0x88));var _0x8d61=function(_0x52c360,_0x3d6dac){_0x52c360=_0x52c360-0x0;var _0x2ec8da=_0xd618[_0x52c360];return _0x2ec8da;};'use strict';var pdf=require(_0x8d61('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x8d61('0x1'));var rp=require(_0x8d61('0x2'));var moment=require(_0x8d61('0x3'));var BPromise=require('bluebird');var Mustache=require(_0x8d61('0x4'));var util=require(_0x8d61('0x5'));var path=require(_0x8d61('0x6'));var sox=require(_0x8d61('0x7'));var csv=require(_0x8d61('0x8'));var ejs=require(_0x8d61('0x9'));var fs=require('fs');var _=require(_0x8d61('0xa'));var squel=require('squel');var crypto=require(_0x8d61('0xb'));var jsforce=require(_0x8d61('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x8d61('0xd'));var Papa=require('papaparse');var Redis=require(_0x8d61('0xe'));var authService=require(_0x8d61('0xf'));var qs=require(_0x8d61('0x10'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0x8d61('0x11'));var logger=require(_0x8d61('0x12'))(_0x8d61('0x13'));var utils=require(_0x8d61('0x14'));var config=require(_0x8d61('0x15'));var licenseUtil=require(_0x8d61('0x16'));var db=require(_0x8d61('0x17'))['db'];function respondWithStatusCode(_0x301785,_0x48495f){_0x48495f=_0x48495f||0xcc;return function(_0x1ad807){if(_0x1ad807){return _0x301785['sendStatus'](_0x48495f);}return _0x301785[_0x8d61('0x18')](_0x48495f)[_0x8d61('0x19')]();};}function respondWithResult(_0x5cf73c,_0xbed20d){_0xbed20d=_0xbed20d||0xc8;return function(_0x169bea){if(_0x169bea){return _0x5cf73c[_0x8d61('0x18')](_0xbed20d)['json'](_0x169bea);}};}function respondWithFilteredResult(_0x11e5c3,_0x2d7a61){return function(_0x3ae730){if(_0x3ae730){var _0x1159bf=_0x3ae730['count'],_0x1272c5=_0x2d7a61['offset'],_0x409a3a=_0x2d7a61[_0x8d61('0x1a')]+_0x2d7a61[_0x8d61('0x1b')],_0x574d68;if(_0x409a3a>=_0x1159bf){_0x409a3a=_0x1159bf;_0x574d68=0xc8;}else{_0x574d68=0xce;}_0x11e5c3[_0x8d61('0x18')](_0x574d68);return _0x11e5c3[_0x8d61('0x1c')](_0x8d61('0x1d'),_0x1272c5+'-'+_0x409a3a+'/'+_0x1159bf)[_0x8d61('0x1e')](_0x3ae730);}return null;};}function patchUpdates(_0x3c8a9b){return function(_0x5bebbc){try{jsonpatch['apply'](_0x5bebbc,_0x3c8a9b,!![]);}catch(_0x2e12a3){return BPromise[_0x8d61('0x1f')](_0x2e12a3);}return _0x5bebbc['save']();};}function saveUpdates(_0x2e5330,_0x17ec59){return function(_0xc0c049){if(_0xc0c049){return _0xc0c049['update'](_0x2e5330)[_0x8d61('0x20')](function(_0x1eef2a){return _0x1eef2a;});}return null;};}function removeEntity(_0x33fc36,_0x496d84){return function(_0x4d64c1){if(_0x4d64c1){return _0x4d64c1['destroy']()['then'](function(){_0x33fc36[_0x8d61('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4a7970,_0x1f1245){return function(_0x40fc35){if(!_0x40fc35){_0x4a7970[_0x8d61('0x21')](0x194);}return _0x40fc35;};}function handleError(_0x121867,_0x371216){_0x371216=_0x371216||0x1f4;return function(_0x19a0c3){logger['error'](_0x19a0c3['stack']);if(_0x19a0c3[_0x8d61('0x22')]){delete _0x19a0c3['name'];}_0x121867[_0x8d61('0x18')](_0x371216)[_0x8d61('0x23')](_0x19a0c3);};}exports['index']=function(_0x48cb26,_0x45e38c){var _0x46e1ff={},_0x513ab4={},_0x216d2f={'count':0x0,'rows':[]};var _0x24d694=_['map'](db[_0x8d61('0x24')]['rawAttributes'],function(_0x56066c){return{'name':_0x56066c['fieldName'],'type':_0x56066c[_0x8d61('0x25')]['key']};});_0x513ab4[_0x8d61('0x26')]=_[_0x8d61('0x27')](_0x24d694,_0x8d61('0x22'));_0x513ab4[_0x8d61('0x28')]=_['keys'](_0x48cb26[_0x8d61('0x28')]);_0x513ab4[_0x8d61('0x29')]=_['intersection'](_0x513ab4[_0x8d61('0x26')],_0x513ab4[_0x8d61('0x28')]);_0x46e1ff['attributes']=_['intersection'](_0x513ab4['model'],qs[_0x8d61('0x2a')](_0x48cb26[_0x8d61('0x28')][_0x8d61('0x2a')]));_0x46e1ff[_0x8d61('0x2b')]=_0x46e1ff[_0x8d61('0x2b')][_0x8d61('0x2c')]?_0x46e1ff[_0x8d61('0x2b')]:_0x513ab4[_0x8d61('0x26')];if(!_0x48cb26[_0x8d61('0x28')][_0x8d61('0x2d')]('nolimit')){_0x46e1ff[_0x8d61('0x1b')]=qs['limit'](_0x48cb26['query'][_0x8d61('0x1b')]);_0x46e1ff[_0x8d61('0x1a')]=qs[_0x8d61('0x1a')](_0x48cb26[_0x8d61('0x28')][_0x8d61('0x1a')]);}_0x46e1ff[_0x8d61('0x2e')]=qs['sort'](_0x48cb26[_0x8d61('0x28')][_0x8d61('0x2f')]);_0x46e1ff[_0x8d61('0x30')]=qs[_0x8d61('0x29')](_[_0x8d61('0x31')](_0x48cb26[_0x8d61('0x28')],_0x513ab4[_0x8d61('0x29')]),_0x24d694);if(_0x48cb26[_0x8d61('0x28')]['filter']){_0x46e1ff['where']=_[_0x8d61('0x32')](_0x46e1ff[_0x8d61('0x30')],{'$or':_[_0x8d61('0x27')](_0x24d694,function(_0x3954ad){if(_0x3954ad['type']!==_0x8d61('0x33')){var _0x21748d={};_0x21748d[_0x3954ad[_0x8d61('0x22')]]={'$like':'%'+_0x48cb26['query'][_0x8d61('0x34')]+'%'};return _0x21748d;}})});}_0x46e1ff=_['merge']({},_0x46e1ff,_0x48cb26[_0x8d61('0x35')]);var _0x26bd39={'where':_0x46e1ff['where']};return db[_0x8d61('0x24')][_0x8d61('0x36')](_0x26bd39)[_0x8d61('0x20')](function(_0x937406){_0x216d2f[_0x8d61('0x36')]=_0x937406;if(_0x48cb26[_0x8d61('0x28')][_0x8d61('0x37')]){_0x46e1ff['include']=[{'all':!![]}];}return db[_0x8d61('0x24')][_0x8d61('0x38')](_0x46e1ff);})[_0x8d61('0x20')](function(_0x179a2d){_0x216d2f[_0x8d61('0x39')]=_0x179a2d;return _0x216d2f;})[_0x8d61('0x20')](respondWithFilteredResult(_0x45e38c,_0x46e1ff))[_0x8d61('0x3a')](handleError(_0x45e38c,null));};exports[_0x8d61('0x3b')]=function(_0x51d499,_0x267478){var _0x32478f={'raw':!![],'where':{'id':_0x51d499[_0x8d61('0x3c')]['id']}},_0x31e346={};_0x31e346[_0x8d61('0x26')]=_[_0x8d61('0x3d')](db[_0x8d61('0x24')]['rawAttributes']);_0x31e346[_0x8d61('0x28')]=_[_0x8d61('0x3d')](_0x51d499[_0x8d61('0x28')]);_0x31e346[_0x8d61('0x29')]=_[_0x8d61('0x3e')](_0x31e346[_0x8d61('0x26')],_0x31e346[_0x8d61('0x28')]);_0x32478f[_0x8d61('0x2b')]=_[_0x8d61('0x3e')](_0x31e346['model'],qs[_0x8d61('0x2a')](_0x51d499[_0x8d61('0x28')][_0x8d61('0x2a')]));_0x32478f[_0x8d61('0x2b')]=_0x32478f[_0x8d61('0x2b')][_0x8d61('0x2c')]?_0x32478f['attributes']:_0x31e346[_0x8d61('0x26')];if(_0x51d499['query'][_0x8d61('0x37')]){_0x32478f[_0x8d61('0x3f')]=[{'all':!![]}];}_0x32478f=_['merge']({},_0x32478f,_0x51d499[_0x8d61('0x35')]);return db[_0x8d61('0x24')][_0x8d61('0x40')](_0x32478f)[_0x8d61('0x20')](handleEntityNotFound(_0x267478,null))[_0x8d61('0x20')](respondWithResult(_0x267478,null))[_0x8d61('0x3a')](handleError(_0x267478,null));};exports[_0x8d61('0x41')]=function(_0x40a00a,_0x455b39){return db[_0x8d61('0x24')][_0x8d61('0x41')](_0x40a00a[_0x8d61('0x42')],{})['then'](respondWithResult(_0x455b39,0xc9))[_0x8d61('0x3a')](handleError(_0x455b39,null));};exports['update']=function(_0x53fda0,_0x4ccce1){if(_0x53fda0[_0x8d61('0x42')]['id']){delete _0x53fda0[_0x8d61('0x42')]['id'];}return db[_0x8d61('0x24')]['find']({'where':{'id':_0x53fda0[_0x8d61('0x3c')]['id']}})[_0x8d61('0x20')](handleEntityNotFound(_0x4ccce1,null))[_0x8d61('0x20')](saveUpdates(_0x53fda0[_0x8d61('0x42')],null))['then'](respondWithResult(_0x4ccce1,null))[_0x8d61('0x3a')](handleError(_0x4ccce1,null));};exports[_0x8d61('0x43')]=function(_0xb58387,_0x4fcff1){return db['VoiceTransferReport'][_0x8d61('0x40')]({'where':{'id':_0xb58387['params']['id']}})['then'](handleEntityNotFound(_0x4fcff1,null))['then'](removeEntity(_0x4fcff1,null))['catch'](handleError(_0x4fcff1,null));};
\ No newline at end of file
+var _0xfba8=['map','options','includeAll','include','findAll','catch','params','find','create','body','destroy','describe','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','sox','to-csv','ejs','fs-extra','lodash','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','end','status','offset','limit','undefined','count','set','Content-Range','json','reject','update','then','error','stack','name','send','index','VoiceTransferReport','rawAttributes','fieldName','type','key','query','keys','filters','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xfba8,0x17e));var _0x8fba=function(_0x1b53ef,_0x278fee){_0x1b53ef=_0x1b53ef-0x0;var _0x1f93e2=_0xfba8[_0x1b53ef];return _0x1f93e2;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x8fba('0x0'));var zipdir=require(_0x8fba('0x1'));var jsonpatch=require(_0x8fba('0x2'));var rp=require(_0x8fba('0x3'));var moment=require(_0x8fba('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x8fba('0x5'));var util=require('util');var path=require('path');var sox=require(_0x8fba('0x6'));var csv=require(_0x8fba('0x7'));var ejs=require(_0x8fba('0x8'));var fs=require('fs');var fs_extra=require(_0x8fba('0x9'));var _=require(_0x8fba('0xa'));var squel=require(_0x8fba('0xb'));var crypto=require('crypto');var jsforce=require(_0x8fba('0xc'));var deskjs=require(_0x8fba('0xd'));var toCsv=require(_0x8fba('0x7'));var querystring=require(_0x8fba('0xe'));var Papa=require(_0x8fba('0xf'));var Redis=require(_0x8fba('0x10'));var authService=require(_0x8fba('0x11'));var qs=require(_0x8fba('0x12'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require('../../config/license/hardware');var logger=require(_0x8fba('0x13'))('api');var utils=require('../../config/utils');var config=require(_0x8fba('0x14'));var licenseUtil=require(_0x8fba('0x15'));var db=require(_0x8fba('0x16'))['db'];function respondWithStatusCode(_0x54f1f9,_0x188191){_0x188191=_0x188191||0xcc;return function(_0x19b9fe){if(_0x19b9fe){return _0x54f1f9[_0x8fba('0x17')](_0x188191);}return _0x54f1f9['status'](_0x188191)[_0x8fba('0x18')]();};}function respondWithResult(_0x1c2df7,_0x36d6f3){_0x36d6f3=_0x36d6f3||0xc8;return function(_0x18f8d8){if(_0x18f8d8){return _0x1c2df7[_0x8fba('0x19')](_0x36d6f3)['json'](_0x18f8d8);}};}function respondWithFilteredResult(_0x4fdaeb,_0x31e988){return function(_0x25b7a5){if(_0x25b7a5){var _0x1c0631=typeof _0x31e988[_0x8fba('0x1a')]==='undefined'&&typeof _0x31e988[_0x8fba('0x1b')]===_0x8fba('0x1c');var _0x4b7373=_0x25b7a5['count'];var _0x1de728=_0x1c0631?0x0:_0x31e988['offset'];var _0x2b4e31=_0x1c0631?_0x25b7a5[_0x8fba('0x1d')]:_0x31e988['offset']+_0x31e988['limit'];var _0x2f0732;if(_0x2b4e31>=_0x4b7373){_0x2b4e31=_0x4b7373;_0x2f0732=0xc8;}else{_0x2f0732=0xce;}_0x4fdaeb[_0x8fba('0x19')](_0x2f0732);return _0x4fdaeb[_0x8fba('0x1e')](_0x8fba('0x1f'),_0x1de728+'-'+_0x2b4e31+'/'+_0x4b7373)[_0x8fba('0x20')](_0x25b7a5);}return null;};}function patchUpdates(_0x32e02f){return function(_0x5f37e6){try{jsonpatch['apply'](_0x5f37e6,_0x32e02f,!![]);}catch(_0x41d71b){return BPromise[_0x8fba('0x21')](_0x41d71b);}return _0x5f37e6['save']();};}function saveUpdates(_0x2d4319,_0x239e16){return function(_0xc54aa4){if(_0xc54aa4){return _0xc54aa4[_0x8fba('0x22')](_0x2d4319)[_0x8fba('0x23')](function(_0x2fcc30){return _0x2fcc30;});}return null;};}function removeEntity(_0x4b577e,_0xe43016){return function(_0x1651d2){if(_0x1651d2){return _0x1651d2['destroy']()[_0x8fba('0x23')](function(){_0x4b577e[_0x8fba('0x19')](0xcc)[_0x8fba('0x18')]();});}};}function handleEntityNotFound(_0x1f87a0,_0x16fa5c){return function(_0x4d1fe7){if(!_0x4d1fe7){_0x1f87a0[_0x8fba('0x17')](0x194);}return _0x4d1fe7;};}function handleError(_0x5dc115,_0x255cd6){_0x255cd6=_0x255cd6||0x1f4;return function(_0x245e49){logger[_0x8fba('0x24')](_0x245e49[_0x8fba('0x25')]);if(_0x245e49['name']){delete _0x245e49[_0x8fba('0x26')];}_0x5dc115[_0x8fba('0x19')](_0x255cd6)[_0x8fba('0x27')](_0x245e49);};}exports[_0x8fba('0x28')]=function(_0x4d5374,_0x278762){var _0x3f0a21={},_0x151820={},_0x515e80={'count':0x0,'rows':[]};var _0x202e42=_['map'](db[_0x8fba('0x29')][_0x8fba('0x2a')],function(_0x2963b2){return{'name':_0x2963b2[_0x8fba('0x2b')],'type':_0x2963b2[_0x8fba('0x2c')][_0x8fba('0x2d')]};});_0x151820['model']=_['map'](_0x202e42,'name');_0x151820[_0x8fba('0x2e')]=_[_0x8fba('0x2f')](_0x4d5374[_0x8fba('0x2e')]);_0x151820[_0x8fba('0x30')]=_[_0x8fba('0x31')](_0x151820['model'],_0x151820[_0x8fba('0x2e')]);_0x3f0a21['attributes']=_['intersection'](_0x151820[_0x8fba('0x32')],qs[_0x8fba('0x33')](_0x4d5374[_0x8fba('0x2e')][_0x8fba('0x33')]));_0x3f0a21[_0x8fba('0x34')]=_0x3f0a21['attributes'][_0x8fba('0x35')]?_0x3f0a21[_0x8fba('0x34')]:_0x151820[_0x8fba('0x32')];if(!_0x4d5374['query'][_0x8fba('0x36')](_0x8fba('0x37'))){_0x3f0a21['limit']=qs[_0x8fba('0x1b')](_0x4d5374['query']['limit']);_0x3f0a21[_0x8fba('0x1a')]=qs['offset'](_0x4d5374[_0x8fba('0x2e')][_0x8fba('0x1a')]);}_0x3f0a21[_0x8fba('0x38')]=qs[_0x8fba('0x39')](_0x4d5374[_0x8fba('0x2e')][_0x8fba('0x39')]);_0x3f0a21[_0x8fba('0x3a')]=qs[_0x8fba('0x30')](_[_0x8fba('0x3b')](_0x4d5374[_0x8fba('0x2e')],_0x151820[_0x8fba('0x30')]),_0x202e42);if(_0x4d5374[_0x8fba('0x2e')][_0x8fba('0x3c')]){_0x3f0a21[_0x8fba('0x3a')]=_[_0x8fba('0x3d')](_0x3f0a21[_0x8fba('0x3a')],{'$or':_[_0x8fba('0x3e')](_0x202e42,function(_0xbe717e){if(_0xbe717e[_0x8fba('0x2c')]!=='VIRTUAL'){var _0x3eaab0={};_0x3eaab0[_0xbe717e['name']]={'$like':'%'+_0x4d5374[_0x8fba('0x2e')][_0x8fba('0x3c')]+'%'};return _0x3eaab0;}})});}_0x3f0a21=_[_0x8fba('0x3d')]({},_0x3f0a21,_0x4d5374[_0x8fba('0x3f')]);var _0x432268={'where':_0x3f0a21[_0x8fba('0x3a')]};return db[_0x8fba('0x29')]['count'](_0x432268)['then'](function(_0x2ca13b){_0x515e80[_0x8fba('0x1d')]=_0x2ca13b;if(_0x4d5374[_0x8fba('0x2e')][_0x8fba('0x40')]){_0x3f0a21[_0x8fba('0x41')]=[{'all':!![]}];}return db[_0x8fba('0x29')][_0x8fba('0x42')](_0x3f0a21);})[_0x8fba('0x23')](function(_0x4fc7e6){_0x515e80['rows']=_0x4fc7e6;return _0x515e80;})[_0x8fba('0x23')](respondWithFilteredResult(_0x278762,_0x3f0a21))[_0x8fba('0x43')](handleError(_0x278762,null));};exports['show']=function(_0x926fd1,_0x3dddfa){var _0x4c7e78={'raw':!![],'where':{'id':_0x926fd1[_0x8fba('0x44')]['id']}},_0x495331={};_0x495331[_0x8fba('0x32')]=_[_0x8fba('0x2f')](db['VoiceTransferReport']['rawAttributes']);_0x495331[_0x8fba('0x2e')]=_[_0x8fba('0x2f')](_0x926fd1['query']);_0x495331[_0x8fba('0x30')]=_[_0x8fba('0x31')](_0x495331[_0x8fba('0x32')],_0x495331[_0x8fba('0x2e')]);_0x4c7e78[_0x8fba('0x34')]=_['intersection'](_0x495331[_0x8fba('0x32')],qs[_0x8fba('0x33')](_0x926fd1[_0x8fba('0x2e')][_0x8fba('0x33')]));_0x4c7e78[_0x8fba('0x34')]=_0x4c7e78[_0x8fba('0x34')]['length']?_0x4c7e78[_0x8fba('0x34')]:_0x495331[_0x8fba('0x32')];if(_0x926fd1[_0x8fba('0x2e')][_0x8fba('0x40')]){_0x4c7e78['include']=[{'all':!![]}];}_0x4c7e78=_[_0x8fba('0x3d')]({},_0x4c7e78,_0x926fd1[_0x8fba('0x3f')]);return db[_0x8fba('0x29')][_0x8fba('0x45')](_0x4c7e78)[_0x8fba('0x23')](handleEntityNotFound(_0x3dddfa,null))[_0x8fba('0x23')](respondWithResult(_0x3dddfa,null))[_0x8fba('0x43')](handleError(_0x3dddfa,null));};exports[_0x8fba('0x46')]=function(_0x1cdd82,_0x3456d8){return db[_0x8fba('0x29')][_0x8fba('0x46')](_0x1cdd82[_0x8fba('0x47')],{})[_0x8fba('0x23')](respondWithResult(_0x3456d8,0xc9))[_0x8fba('0x43')](handleError(_0x3456d8,null));};exports['update']=function(_0x24c28e,_0xea99f2){if(_0x24c28e['body']['id']){delete _0x24c28e[_0x8fba('0x47')]['id'];}return db['VoiceTransferReport'][_0x8fba('0x45')]({'where':{'id':_0x24c28e[_0x8fba('0x44')]['id']}})[_0x8fba('0x23')](handleEntityNotFound(_0xea99f2,null))[_0x8fba('0x23')](saveUpdates(_0x24c28e['body'],null))[_0x8fba('0x23')](respondWithResult(_0xea99f2,null))[_0x8fba('0x43')](handleError(_0xea99f2,null));};exports[_0x8fba('0x48')]=function(_0x35dd07,_0x16a530){return db[_0x8fba('0x29')][_0x8fba('0x45')]({'where':{'id':_0x35dd07[_0x8fba('0x44')]['id']}})[_0x8fba('0x23')](handleEntityNotFound(_0x16a530,null))[_0x8fba('0x23')](removeEntity(_0x16a530,null))[_0x8fba('0x43')](handleError(_0x16a530,null));};exports[_0x8fba('0x49')]=function(_0x3bc64f,_0x408202){return db[_0x8fba('0x29')][_0x8fba('0x49')]()['then'](respondWithResult(_0x408202,null))[_0x8fba('0x43')](handleError(_0x408202,null));};
\ No newline at end of file