Built motion from commit da617fac.|2.6.6
[motion2.git] / server / api / whatsappApplication / whatsappApplication.controller.js
index a6086f0..0446867 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc905=['ejs','fs-extra','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy','error','stack','name','send','index','rawAttributes','fieldName','type','map','query','keys','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','options','WhatsappApplication','includeAll','include','rows','show','params','body','catch','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','to-csv'];(function(_0x3fb4ab,_0x16fd17){var _0x12f4a9=function(_0x5a372b){while(--_0x5a372b){_0x3fb4ab['push'](_0x3fb4ab['shift']());}};_0x12f4a9(++_0x16fd17);}(_0xc905,0x1b3));var _0x5c90=function(_0x57d911,_0x24f494){_0x57d911=_0x57d911-0x0;var _0x52840a=_0xc905[_0x57d911];return _0x52840a;};'use strict';var emlformat=require(_0x5c90('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x5c90('0x1'));var jsonpatch=require(_0x5c90('0x2'));var rp=require(_0x5c90('0x3'));var moment=require(_0x5c90('0x4'));var BPromise=require(_0x5c90('0x5'));var Mustache=require(_0x5c90('0x6'));var util=require(_0x5c90('0x7'));var path=require('path');var sox=require('sox');var csv=require(_0x5c90('0x8'));var ejs=require(_0x5c90('0x9'));var fs=require('fs');var fs_extra=require(_0x5c90('0xa'));var _=require('lodash');var squel=require(_0x5c90('0xb'));var crypto=require(_0x5c90('0xc'));var jsforce=require(_0x5c90('0xd'));var deskjs=require(_0x5c90('0xe'));var toCsv=require('to-csv');var querystring=require(_0x5c90('0xf'));var Papa=require(_0x5c90('0x10'));var Redis=require(_0x5c90('0x11'));var authService=require(_0x5c90('0x12'));var qs=require(_0x5c90('0x13'));var as=require(_0x5c90('0x14'));var hardwareService=require(_0x5c90('0x15'));var logger=require(_0x5c90('0x16'))(_0x5c90('0x17'));var utils=require(_0x5c90('0x18'));var config=require(_0x5c90('0x19'));var licenseUtil=require(_0x5c90('0x1a'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x263210,_0x54488c){_0x54488c=_0x54488c||0xcc;return function(_0x813b55){if(_0x813b55){return _0x263210[_0x5c90('0x1b')](_0x54488c);}return _0x263210[_0x5c90('0x1c')](_0x54488c)[_0x5c90('0x1d')]();};}function respondWithResult(_0x43b856,_0x37069f){_0x37069f=_0x37069f||0xc8;return function(_0x2c8472){if(_0x2c8472){return _0x43b856[_0x5c90('0x1c')](_0x37069f)[_0x5c90('0x1e')](_0x2c8472);}};}function respondWithFilteredResult(_0x17d30a,_0x92a011){return function(_0x2606ea){if(_0x2606ea){var _0x3bf668=_0x2606ea[_0x5c90('0x1f')],_0x5b01c0=_0x92a011[_0x5c90('0x20')],_0x457cd4=_0x92a011[_0x5c90('0x20')]+_0x92a011[_0x5c90('0x21')],_0x1c5820;if(_0x457cd4>=_0x3bf668){_0x457cd4=_0x3bf668;_0x1c5820=0xc8;}else{_0x1c5820=0xce;}_0x17d30a[_0x5c90('0x1c')](_0x1c5820);return _0x17d30a[_0x5c90('0x22')](_0x5c90('0x23'),_0x5b01c0+'-'+_0x457cd4+'/'+_0x3bf668)['json'](_0x2606ea);}return null;};}function patchUpdates(_0x506cf4){return function(_0x1f9a00){try{jsonpatch['apply'](_0x1f9a00,_0x506cf4,!![]);}catch(_0x6873a4){return BPromise[_0x5c90('0x24')](_0x6873a4);}return _0x1f9a00[_0x5c90('0x25')]();};}function saveUpdates(_0x37a166,_0x1fdf18){return function(_0x199466){if(_0x199466){return _0x199466[_0x5c90('0x26')](_0x37a166)[_0x5c90('0x27')](function(_0x47ff5c){return _0x47ff5c;});}return null;};}function removeEntity(_0x59cc44,_0x25f8a1){return function(_0x139a70){if(_0x139a70){return _0x139a70[_0x5c90('0x28')]()[_0x5c90('0x27')](function(){_0x59cc44[_0x5c90('0x1c')](0xcc)[_0x5c90('0x1d')]();});}};}function handleEntityNotFound(_0xd68986,_0x3af79e){return function(_0x129c8b){if(!_0x129c8b){_0xd68986[_0x5c90('0x1b')](0x194);}return _0x129c8b;};}function handleError(_0x4df525,_0x10a1ab){_0x10a1ab=_0x10a1ab||0x1f4;return function(_0x4685ad){logger[_0x5c90('0x29')](_0x4685ad[_0x5c90('0x2a')]);if(_0x4685ad['name']){delete _0x4685ad[_0x5c90('0x2b')];}_0x4df525['status'](_0x10a1ab)[_0x5c90('0x2c')](_0x4685ad);};}exports[_0x5c90('0x2d')]=function(_0x4f90ff,_0x616d){var _0x78c022={},_0x3343d9={},_0x1fa120={'count':0x0,'rows':[]};var _0x3a4a9f=_['map'](db['WhatsappApplication'][_0x5c90('0x2e')],function(_0x13dacc){return{'name':_0x13dacc[_0x5c90('0x2f')],'type':_0x13dacc[_0x5c90('0x30')]['key']};});_0x3343d9['model']=_[_0x5c90('0x31')](_0x3a4a9f,_0x5c90('0x2b'));_0x3343d9[_0x5c90('0x32')]=_[_0x5c90('0x33')](_0x4f90ff[_0x5c90('0x32')]);_0x3343d9[_0x5c90('0x34')]=_[_0x5c90('0x35')](_0x3343d9[_0x5c90('0x36')],_0x3343d9['query']);_0x78c022[_0x5c90('0x37')]=_[_0x5c90('0x35')](_0x3343d9[_0x5c90('0x36')],qs[_0x5c90('0x38')](_0x4f90ff['query']['fields']));_0x78c022[_0x5c90('0x37')]=_0x78c022['attributes'][_0x5c90('0x39')]?_0x78c022['attributes']:_0x3343d9[_0x5c90('0x36')];if(!_0x4f90ff[_0x5c90('0x32')][_0x5c90('0x3a')](_0x5c90('0x3b'))){_0x78c022[_0x5c90('0x21')]=qs[_0x5c90('0x21')](_0x4f90ff[_0x5c90('0x32')]['limit']);_0x78c022[_0x5c90('0x20')]=qs['offset'](_0x4f90ff['query']['offset']);}_0x78c022[_0x5c90('0x3c')]=qs[_0x5c90('0x3d')](_0x4f90ff[_0x5c90('0x32')][_0x5c90('0x3d')]);_0x78c022[_0x5c90('0x3e')]=qs[_0x5c90('0x34')](_['pick'](_0x4f90ff['query'],_0x3343d9[_0x5c90('0x34')]),_0x3a4a9f);if(_0x4f90ff[_0x5c90('0x32')]['filter']){_0x78c022[_0x5c90('0x3e')]=_['merge'](_0x78c022[_0x5c90('0x3e')],{'$or':_[_0x5c90('0x31')](_0x3a4a9f,function(_0x15b429){if(_0x15b429[_0x5c90('0x30')]!=='VIRTUAL'){var _0x730ee1={};_0x730ee1[_0x15b429[_0x5c90('0x2b')]]={'$like':'%'+_0x4f90ff[_0x5c90('0x32')][_0x5c90('0x3f')]+'%'};return _0x730ee1;}})});}_0x78c022=_[_0x5c90('0x40')]({},_0x78c022,_0x4f90ff[_0x5c90('0x41')]);var _0x3ace47={'where':_0x78c022[_0x5c90('0x3e')]};return db[_0x5c90('0x42')][_0x5c90('0x1f')](_0x3ace47)[_0x5c90('0x27')](function(_0x2b312c){_0x1fa120[_0x5c90('0x1f')]=_0x2b312c;if(_0x4f90ff['query'][_0x5c90('0x43')]){_0x78c022[_0x5c90('0x44')]=[{'all':!![]}];}return db[_0x5c90('0x42')]['findAll'](_0x78c022);})[_0x5c90('0x27')](function(_0xbb504d){_0x1fa120[_0x5c90('0x45')]=_0xbb504d;return _0x1fa120;})[_0x5c90('0x27')](respondWithFilteredResult(_0x616d,_0x78c022))['catch'](handleError(_0x616d,null));};exports[_0x5c90('0x46')]=function(_0x61d8f0,_0x4b5f07){var _0x33f7fa={'raw':!![],'where':{'id':_0x61d8f0[_0x5c90('0x47')]['id']}},_0x125be2={};_0x125be2['model']=_['keys'](db['WhatsappApplication'][_0x5c90('0x2e')]);_0x125be2[_0x5c90('0x32')]=_['keys'](_0x61d8f0[_0x5c90('0x32')]);_0x125be2['filters']=_['intersection'](_0x125be2[_0x5c90('0x36')],_0x125be2[_0x5c90('0x32')]);_0x33f7fa[_0x5c90('0x37')]=_[_0x5c90('0x35')](_0x125be2['model'],qs[_0x5c90('0x38')](_0x61d8f0[_0x5c90('0x32')]['fields']));_0x33f7fa['attributes']=_0x33f7fa[_0x5c90('0x37')]['length']?_0x33f7fa[_0x5c90('0x37')]:_0x125be2['model'];if(_0x61d8f0['query'][_0x5c90('0x43')]){_0x33f7fa[_0x5c90('0x44')]=[{'all':!![]}];}_0x33f7fa=_['merge']({},_0x33f7fa,_0x61d8f0[_0x5c90('0x41')]);return db['WhatsappApplication']['find'](_0x33f7fa)['then'](handleEntityNotFound(_0x4b5f07,null))['then'](respondWithResult(_0x4b5f07,null))['catch'](handleError(_0x4b5f07,null));};exports['create']=function(_0x2bf201,_0x3b5553){return db['WhatsappApplication']['create'](_0x2bf201[_0x5c90('0x48')],{})['then'](respondWithResult(_0x3b5553,0xc9))['catch'](handleError(_0x3b5553,null));};exports['update']=function(_0x5b8022,_0x15dd31){if(_0x5b8022[_0x5c90('0x48')]['id']){delete _0x5b8022[_0x5c90('0x48')]['id'];}return db[_0x5c90('0x42')]['find']({'where':{'id':_0x5b8022[_0x5c90('0x47')]['id']}})[_0x5c90('0x27')](handleEntityNotFound(_0x15dd31,null))[_0x5c90('0x27')](saveUpdates(_0x5b8022[_0x5c90('0x48')],null))['then'](respondWithResult(_0x15dd31,null))[_0x5c90('0x49')](handleError(_0x15dd31,null));};exports[_0x5c90('0x28')]=function(_0x8ca35,_0x1d87c9){return db['WhatsappApplication']['find']({'where':{'id':_0x8ca35[_0x5c90('0x47')]['id']}})[_0x5c90('0x27')](handleEntityNotFound(_0x1d87c9,null))[_0x5c90('0x27')](removeEntity(_0x1d87c9,null))['catch'](handleError(_0x1d87c9,null));};
\ No newline at end of file
+var _0xd9fb=['fieldName','type','key','model','query','keys','filters','intersection','attributes','length','hasOwnProperty','nolimit','order','where','pick','filter','map','options','includeAll','show','params','fields','include','merge','catch','create','body','find','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','to-csv','fs-extra','lodash','crypto','jsforce','desk.js','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../mysqldb','sendStatus','end','status','json','offset','undefined','limit','count','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','index','WhatsappApplication','rawAttributes'];(function(_0x1e3c16,_0x372caa){var _0x47a0c9=function(_0x47f81d){while(--_0x47f81d){_0x1e3c16['push'](_0x1e3c16['shift']());}};_0x47a0c9(++_0x372caa);}(_0xd9fb,0x189));var _0xbd9f=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xd9fb[_0x14add3];return _0x4a174f;};'use strict';var emlformat=require(_0xbd9f('0x0'));var rimraf=require(_0xbd9f('0x1'));var zipdir=require(_0xbd9f('0x2'));var jsonpatch=require(_0xbd9f('0x3'));var rp=require(_0xbd9f('0x4'));var moment=require(_0xbd9f('0x5'));var BPromise=require(_0xbd9f('0x6'));var Mustache=require('mustache');var util=require(_0xbd9f('0x7'));var path=require(_0xbd9f('0x8'));var sox=require('sox');var csv=require(_0xbd9f('0x9'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0xbd9f('0xa'));var _=require(_0xbd9f('0xb'));var squel=require('squel');var crypto=require(_0xbd9f('0xc'));var jsforce=require(_0xbd9f('0xd'));var deskjs=require(_0xbd9f('0xe'));var toCsv=require(_0xbd9f('0x9'));var querystring=require('querystring');var Papa=require(_0xbd9f('0xf'));var Redis=require(_0xbd9f('0x10'));var authService=require(_0xbd9f('0x11'));var qs=require(_0xbd9f('0x12'));var as=require(_0xbd9f('0x13'));var hardwareService=require(_0xbd9f('0x14'));var logger=require(_0xbd9f('0x15'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var licenseUtil=require('../../config/license/util');var db=require(_0xbd9f('0x16'))['db'];function respondWithStatusCode(_0x5e800a,_0x16b916){_0x16b916=_0x16b916||0xcc;return function(_0x44672c){if(_0x44672c){return _0x5e800a[_0xbd9f('0x17')](_0x16b916);}return _0x5e800a['status'](_0x16b916)[_0xbd9f('0x18')]();};}function respondWithResult(_0x5beefe,_0x192fbb){_0x192fbb=_0x192fbb||0xc8;return function(_0x699e8f){if(_0x699e8f){return _0x5beefe[_0xbd9f('0x19')](_0x192fbb)[_0xbd9f('0x1a')](_0x699e8f);}};}function respondWithFilteredResult(_0x5ec72a,_0x442253){return function(_0x25557f){if(_0x25557f){var _0x104cfd=typeof _0x442253[_0xbd9f('0x1b')]===_0xbd9f('0x1c')&&typeof _0x442253[_0xbd9f('0x1d')]===_0xbd9f('0x1c');var _0x4f6181=_0x25557f['count'];var _0x35be6d=_0x104cfd?0x0:_0x442253['offset'];var _0x2f52dd=_0x104cfd?_0x25557f[_0xbd9f('0x1e')]:_0x442253[_0xbd9f('0x1b')]+_0x442253[_0xbd9f('0x1d')];var _0x2c276b;if(_0x2f52dd>=_0x4f6181){_0x2f52dd=_0x4f6181;_0x2c276b=0xc8;}else{_0x2c276b=0xce;}_0x5ec72a[_0xbd9f('0x19')](_0x2c276b);return _0x5ec72a[_0xbd9f('0x1f')](_0xbd9f('0x20'),_0x35be6d+'-'+_0x2f52dd+'/'+_0x4f6181)['json'](_0x25557f);}return null;};}function patchUpdates(_0x365775){return function(_0xdb7e4e){try{jsonpatch[_0xbd9f('0x21')](_0xdb7e4e,_0x365775,!![]);}catch(_0x144051){return BPromise[_0xbd9f('0x22')](_0x144051);}return _0xdb7e4e[_0xbd9f('0x23')]();};}function saveUpdates(_0x5f7881,_0x30e745){return function(_0x3d0d68){if(_0x3d0d68){return _0x3d0d68[_0xbd9f('0x24')](_0x5f7881)[_0xbd9f('0x25')](function(_0x4e929d){return _0x4e929d;});}return null;};}function removeEntity(_0x3bde09,_0x10697a){return function(_0x256aec){if(_0x256aec){return _0x256aec[_0xbd9f('0x26')]()['then'](function(){_0x3bde09[_0xbd9f('0x19')](0xcc)[_0xbd9f('0x18')]();});}};}function handleEntityNotFound(_0x278a10,_0x36f503){return function(_0x46fcc0){if(!_0x46fcc0){_0x278a10[_0xbd9f('0x17')](0x194);}return _0x46fcc0;};}function handleError(_0x7fd831,_0x5885d2){_0x5885d2=_0x5885d2||0x1f4;return function(_0xd89fc2){logger[_0xbd9f('0x27')](_0xd89fc2[_0xbd9f('0x28')]);if(_0xd89fc2[_0xbd9f('0x29')]){delete _0xd89fc2[_0xbd9f('0x29')];}_0x7fd831['status'](_0x5885d2)['send'](_0xd89fc2);};}exports[_0xbd9f('0x2a')]=function(_0x2b26bf,_0x1d92fa){var _0x4a8a91={},_0xe884e8={},_0x7fff9={'count':0x0,'rows':[]};var _0x294d81=_['map'](db[_0xbd9f('0x2b')][_0xbd9f('0x2c')],function(_0xcbfaa2){return{'name':_0xcbfaa2[_0xbd9f('0x2d')],'type':_0xcbfaa2[_0xbd9f('0x2e')][_0xbd9f('0x2f')]};});_0xe884e8[_0xbd9f('0x30')]=_['map'](_0x294d81,'name');_0xe884e8[_0xbd9f('0x31')]=_[_0xbd9f('0x32')](_0x2b26bf[_0xbd9f('0x31')]);_0xe884e8[_0xbd9f('0x33')]=_[_0xbd9f('0x34')](_0xe884e8[_0xbd9f('0x30')],_0xe884e8[_0xbd9f('0x31')]);_0x4a8a91[_0xbd9f('0x35')]=_[_0xbd9f('0x34')](_0xe884e8['model'],qs['fields'](_0x2b26bf[_0xbd9f('0x31')]['fields']));_0x4a8a91['attributes']=_0x4a8a91[_0xbd9f('0x35')][_0xbd9f('0x36')]?_0x4a8a91[_0xbd9f('0x35')]:_0xe884e8[_0xbd9f('0x30')];if(!_0x2b26bf[_0xbd9f('0x31')][_0xbd9f('0x37')](_0xbd9f('0x38'))){_0x4a8a91[_0xbd9f('0x1d')]=qs['limit'](_0x2b26bf[_0xbd9f('0x31')][_0xbd9f('0x1d')]);_0x4a8a91[_0xbd9f('0x1b')]=qs['offset'](_0x2b26bf['query'][_0xbd9f('0x1b')]);}_0x4a8a91[_0xbd9f('0x39')]=qs['sort'](_0x2b26bf[_0xbd9f('0x31')]['sort']);_0x4a8a91[_0xbd9f('0x3a')]=qs[_0xbd9f('0x33')](_[_0xbd9f('0x3b')](_0x2b26bf[_0xbd9f('0x31')],_0xe884e8[_0xbd9f('0x33')]),_0x294d81);if(_0x2b26bf['query'][_0xbd9f('0x3c')]){_0x4a8a91[_0xbd9f('0x3a')]=_['merge'](_0x4a8a91[_0xbd9f('0x3a')],{'$or':_[_0xbd9f('0x3d')](_0x294d81,function(_0x356548){if(_0x356548[_0xbd9f('0x2e')]!=='VIRTUAL'){var _0x3ee34e={};_0x3ee34e[_0x356548[_0xbd9f('0x29')]]={'$like':'%'+_0x2b26bf[_0xbd9f('0x31')][_0xbd9f('0x3c')]+'%'};return _0x3ee34e;}})});}_0x4a8a91=_['merge']({},_0x4a8a91,_0x2b26bf[_0xbd9f('0x3e')]);var _0x315291={'where':_0x4a8a91[_0xbd9f('0x3a')]};return db[_0xbd9f('0x2b')]['count'](_0x315291)['then'](function(_0x39eb9e){_0x7fff9[_0xbd9f('0x1e')]=_0x39eb9e;if(_0x2b26bf['query'][_0xbd9f('0x3f')]){_0x4a8a91['include']=[{'all':!![]}];}return db[_0xbd9f('0x2b')]['findAll'](_0x4a8a91);})[_0xbd9f('0x25')](function(_0x342ada){_0x7fff9['rows']=_0x342ada;return _0x7fff9;})['then'](respondWithFilteredResult(_0x1d92fa,_0x4a8a91))['catch'](handleError(_0x1d92fa,null));};exports[_0xbd9f('0x40')]=function(_0x23816d,_0x533339){var _0x5a4739={'raw':!![],'where':{'id':_0x23816d[_0xbd9f('0x41')]['id']}},_0x163e36={};_0x163e36[_0xbd9f('0x30')]=_[_0xbd9f('0x32')](db['WhatsappApplication'][_0xbd9f('0x2c')]);_0x163e36[_0xbd9f('0x31')]=_[_0xbd9f('0x32')](_0x23816d[_0xbd9f('0x31')]);_0x163e36[_0xbd9f('0x33')]=_['intersection'](_0x163e36[_0xbd9f('0x30')],_0x163e36[_0xbd9f('0x31')]);_0x5a4739[_0xbd9f('0x35')]=_[_0xbd9f('0x34')](_0x163e36['model'],qs[_0xbd9f('0x42')](_0x23816d[_0xbd9f('0x31')][_0xbd9f('0x42')]));_0x5a4739['attributes']=_0x5a4739['attributes'][_0xbd9f('0x36')]?_0x5a4739[_0xbd9f('0x35')]:_0x163e36[_0xbd9f('0x30')];if(_0x23816d[_0xbd9f('0x31')]['includeAll']){_0x5a4739[_0xbd9f('0x43')]=[{'all':!![]}];}_0x5a4739=_[_0xbd9f('0x44')]({},_0x5a4739,_0x23816d[_0xbd9f('0x3e')]);return db[_0xbd9f('0x2b')]['find'](_0x5a4739)['then'](handleEntityNotFound(_0x533339,null))[_0xbd9f('0x25')](respondWithResult(_0x533339,null))[_0xbd9f('0x45')](handleError(_0x533339,null));};exports[_0xbd9f('0x46')]=function(_0x585065,_0x381646){return db[_0xbd9f('0x2b')][_0xbd9f('0x46')](_0x585065[_0xbd9f('0x47')],{})[_0xbd9f('0x25')](respondWithResult(_0x381646,0xc9))[_0xbd9f('0x45')](handleError(_0x381646,null));};exports[_0xbd9f('0x24')]=function(_0x2353e0,_0xcaa162){if(_0x2353e0[_0xbd9f('0x47')]['id']){delete _0x2353e0[_0xbd9f('0x47')]['id'];}return db[_0xbd9f('0x2b')][_0xbd9f('0x48')]({'where':{'id':_0x2353e0[_0xbd9f('0x41')]['id']}})[_0xbd9f('0x25')](handleEntityNotFound(_0xcaa162,null))['then'](saveUpdates(_0x2353e0[_0xbd9f('0x47')],null))['then'](respondWithResult(_0xcaa162,null))[_0xbd9f('0x45')](handleError(_0xcaa162,null));};exports[_0xbd9f('0x26')]=function(_0x503991,_0x52a85f){return db[_0xbd9f('0x2b')][_0xbd9f('0x48')]({'where':{'id':_0x503991[_0xbd9f('0x41')]['id']}})[_0xbd9f('0x25')](handleEntityNotFound(_0x52a85f,null))[_0xbd9f('0x25')](removeEntity(_0x52a85f,null))[_0xbd9f('0x45')](handleError(_0x52a85f,null));};
\ No newline at end of file