Built motion from commit b5413ace.|2.6.9
[motion2.git] / server / api / jscriptyAnswerReport / jscriptyAnswerReport.controller.js
index 67c7237..cfab35e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x20c2=['count','offset','set','Content-Range','apply','reject','save','update','then','end','sendStatus','stack','name','send','index','rawAttributes','fieldName','type','key','model','map','query','filters','attributes','intersection','fields','length','hasOwnProperty','limit','order','sort','where','pick','filter','merge','options','JscriptyAnswerReport','include','findAll','catch','params','keys','includeAll','create','body','find','destroy','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','status','json'];(function(_0x4b775b,_0x2aadc6){var _0xf84d39=function(_0x55ac96){while(--_0x55ac96){_0x4b775b['push'](_0x4b775b['shift']());}};_0xf84d39(++_0x2aadc6);}(_0x20c2,0x164));var _0x220c=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x20c2[_0x14add3];return _0x4a174f;};'use strict';var pdf=require(_0x220c('0x0'));var emlformat=require(_0x220c('0x1'));var rimraf=require(_0x220c('0x2'));var zipdir=require(_0x220c('0x3'));var jsonpatch=require(_0x220c('0x4'));var rp=require('request-promise');var moment=require(_0x220c('0x5'));var BPromise=require(_0x220c('0x6'));var Mustache=require(_0x220c('0x7'));var util=require(_0x220c('0x8'));var path=require(_0x220c('0x9'));var sox=require(_0x220c('0xa'));var csv=require(_0x220c('0xb'));var ejs=require(_0x220c('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0x220c('0xd'));var crypto=require(_0x220c('0xe'));var jsforce=require(_0x220c('0xf'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x220c('0x10'));var Papa=require(_0x220c('0x11'));var Redis=require(_0x220c('0x12'));var authService=require('../../components/auth/service');var qs=require(_0x220c('0x13'));var as=require(_0x220c('0x14'));var hardwareService=require(_0x220c('0x15'));var logger=require('../../config/logger')(_0x220c('0x16'));var utils=require(_0x220c('0x17'));var config=require(_0x220c('0x18'));var licenseUtil=require(_0x220c('0x19'));var db=require(_0x220c('0x1a'))['db'];function respondWithStatusCode(_0x5025ee,_0x5ce7ca){_0x5ce7ca=_0x5ce7ca||0xcc;return function(_0xf9362e){if(_0xf9362e){return _0x5025ee['sendStatus'](_0x5ce7ca);}return _0x5025ee[_0x220c('0x1b')](_0x5ce7ca)['end']();};}function respondWithResult(_0x2c6be9,_0x34eb75){_0x34eb75=_0x34eb75||0xc8;return function(_0x5331fc){if(_0x5331fc){return _0x2c6be9['status'](_0x34eb75)[_0x220c('0x1c')](_0x5331fc);}};}function respondWithFilteredResult(_0x132766,_0x32fa4f){return function(_0x38b8bf){if(_0x38b8bf){var _0x5aa312=_0x38b8bf[_0x220c('0x1d')],_0x165a06=_0x32fa4f[_0x220c('0x1e')],_0x4382a1=_0x32fa4f[_0x220c('0x1e')]+_0x32fa4f['limit'],_0x33ae24;if(_0x4382a1>=_0x5aa312){_0x4382a1=_0x5aa312;_0x33ae24=0xc8;}else{_0x33ae24=0xce;}_0x132766[_0x220c('0x1b')](_0x33ae24);return _0x132766[_0x220c('0x1f')](_0x220c('0x20'),_0x165a06+'-'+_0x4382a1+'/'+_0x5aa312)[_0x220c('0x1c')](_0x38b8bf);}return null;};}function patchUpdates(_0x304910){return function(_0x35b5bd){try{jsonpatch[_0x220c('0x21')](_0x35b5bd,_0x304910,!![]);}catch(_0x3f14eb){return BPromise[_0x220c('0x22')](_0x3f14eb);}return _0x35b5bd[_0x220c('0x23')]();};}function saveUpdates(_0x5b0cba,_0x5e98df){return function(_0xf35575){if(_0xf35575){return _0xf35575[_0x220c('0x24')](_0x5b0cba)[_0x220c('0x25')](function(_0x444add){return _0x444add;});}return null;};}function removeEntity(_0xc0838f,_0x2f2e65){return function(_0x4c165d){if(_0x4c165d){return _0x4c165d['destroy']()[_0x220c('0x25')](function(){_0xc0838f[_0x220c('0x1b')](0xcc)[_0x220c('0x26')]();});}};}function handleEntityNotFound(_0x50ba6c,_0x344248){return function(_0x14d9e5){if(!_0x14d9e5){_0x50ba6c[_0x220c('0x27')](0x194);}return _0x14d9e5;};}function handleError(_0x4583ac,_0x12c78c){_0x12c78c=_0x12c78c||0x1f4;return function(_0x64dec6){logger['error'](_0x64dec6[_0x220c('0x28')]);if(_0x64dec6[_0x220c('0x29')]){delete _0x64dec6[_0x220c('0x29')];}_0x4583ac[_0x220c('0x1b')](_0x12c78c)[_0x220c('0x2a')](_0x64dec6);};}exports[_0x220c('0x2b')]=function(_0x140c02,_0x177c90){var _0xf9e32b={},_0x15dbc3={},_0x38a798={'count':0x0,'rows':[]};var _0x18a8f3=_['map'](db['JscriptyAnswerReport'][_0x220c('0x2c')],function(_0x55e371){return{'name':_0x55e371[_0x220c('0x2d')],'type':_0x55e371[_0x220c('0x2e')][_0x220c('0x2f')]};});_0x15dbc3[_0x220c('0x30')]=_[_0x220c('0x31')](_0x18a8f3,_0x220c('0x29'));_0x15dbc3[_0x220c('0x32')]=_['keys'](_0x140c02[_0x220c('0x32')]);_0x15dbc3[_0x220c('0x33')]=_['intersection'](_0x15dbc3[_0x220c('0x30')],_0x15dbc3[_0x220c('0x32')]);_0xf9e32b[_0x220c('0x34')]=_[_0x220c('0x35')](_0x15dbc3[_0x220c('0x30')],qs[_0x220c('0x36')](_0x140c02[_0x220c('0x32')][_0x220c('0x36')]));_0xf9e32b[_0x220c('0x34')]=_0xf9e32b[_0x220c('0x34')][_0x220c('0x37')]?_0xf9e32b[_0x220c('0x34')]:_0x15dbc3[_0x220c('0x30')];if(!_0x140c02[_0x220c('0x32')][_0x220c('0x38')]('nolimit')){_0xf9e32b[_0x220c('0x39')]=qs[_0x220c('0x39')](_0x140c02[_0x220c('0x32')][_0x220c('0x39')]);_0xf9e32b[_0x220c('0x1e')]=qs[_0x220c('0x1e')](_0x140c02[_0x220c('0x32')][_0x220c('0x1e')]);}_0xf9e32b[_0x220c('0x3a')]=qs[_0x220c('0x3b')](_0x140c02[_0x220c('0x32')][_0x220c('0x3b')]);_0xf9e32b[_0x220c('0x3c')]=qs[_0x220c('0x33')](_[_0x220c('0x3d')](_0x140c02[_0x220c('0x32')],_0x15dbc3[_0x220c('0x33')]),_0x18a8f3);if(_0x140c02['query'][_0x220c('0x3e')]){_0xf9e32b[_0x220c('0x3c')]=_['merge'](_0xf9e32b[_0x220c('0x3c')],{'$or':_[_0x220c('0x31')](_0x18a8f3,function(_0x556faf){if(_0x556faf[_0x220c('0x2e')]!=='VIRTUAL'){var _0xdabef0={};_0xdabef0[_0x556faf[_0x220c('0x29')]]={'$like':'%'+_0x140c02[_0x220c('0x32')][_0x220c('0x3e')]+'%'};return _0xdabef0;}})});}_0xf9e32b=_[_0x220c('0x3f')]({},_0xf9e32b,_0x140c02[_0x220c('0x40')]);var _0x1abd13={'where':_0xf9e32b[_0x220c('0x3c')]};return db[_0x220c('0x41')][_0x220c('0x1d')](_0x1abd13)['then'](function(_0x168811){_0x38a798[_0x220c('0x1d')]=_0x168811;if(_0x140c02[_0x220c('0x32')]['includeAll']){_0xf9e32b[_0x220c('0x42')]=[{'all':!![]}];}return db[_0x220c('0x41')][_0x220c('0x43')](_0xf9e32b);})[_0x220c('0x25')](function(_0x1bd2bc){_0x38a798['rows']=_0x1bd2bc;return _0x38a798;})[_0x220c('0x25')](respondWithFilteredResult(_0x177c90,_0xf9e32b))[_0x220c('0x44')](handleError(_0x177c90,null));};exports['show']=function(_0x50be07,_0x496ce6){var _0x1d82b4={'raw':!![],'where':{'id':_0x50be07[_0x220c('0x45')]['id']}},_0x416fd4={};_0x416fd4[_0x220c('0x30')]=_[_0x220c('0x46')](db[_0x220c('0x41')]['rawAttributes']);_0x416fd4[_0x220c('0x32')]=_[_0x220c('0x46')](_0x50be07[_0x220c('0x32')]);_0x416fd4['filters']=_[_0x220c('0x35')](_0x416fd4[_0x220c('0x30')],_0x416fd4[_0x220c('0x32')]);_0x1d82b4[_0x220c('0x34')]=_[_0x220c('0x35')](_0x416fd4['model'],qs[_0x220c('0x36')](_0x50be07['query'][_0x220c('0x36')]));_0x1d82b4[_0x220c('0x34')]=_0x1d82b4[_0x220c('0x34')]['length']?_0x1d82b4[_0x220c('0x34')]:_0x416fd4[_0x220c('0x30')];if(_0x50be07[_0x220c('0x32')][_0x220c('0x47')]){_0x1d82b4['include']=[{'all':!![]}];}_0x1d82b4=_[_0x220c('0x3f')]({},_0x1d82b4,_0x50be07[_0x220c('0x40')]);return db[_0x220c('0x41')]['find'](_0x1d82b4)[_0x220c('0x25')](handleEntityNotFound(_0x496ce6,null))[_0x220c('0x25')](respondWithResult(_0x496ce6,null))[_0x220c('0x44')](handleError(_0x496ce6,null));};exports['create']=function(_0x51f3d7,_0x58e4ae){return db['JscriptyAnswerReport'][_0x220c('0x48')](_0x51f3d7[_0x220c('0x49')],{})[_0x220c('0x25')](respondWithResult(_0x58e4ae,0xc9))[_0x220c('0x44')](handleError(_0x58e4ae,null));};exports[_0x220c('0x24')]=function(_0x2f9b19,_0x3bb830){if(_0x2f9b19[_0x220c('0x49')]['id']){delete _0x2f9b19['body']['id'];}return db['JscriptyAnswerReport'][_0x220c('0x4a')]({'where':{'id':_0x2f9b19[_0x220c('0x45')]['id']}})[_0x220c('0x25')](handleEntityNotFound(_0x3bb830,null))['then'](saveUpdates(_0x2f9b19[_0x220c('0x49')],null))[_0x220c('0x25')](respondWithResult(_0x3bb830,null))[_0x220c('0x44')](handleError(_0x3bb830,null));};exports[_0x220c('0x4b')]=function(_0x294e19,_0x17d18f){return db['JscriptyAnswerReport'][_0x220c('0x4a')]({'where':{'id':_0x294e19['params']['id']}})[_0x220c('0x25')](handleEntityNotFound(_0x17d18f,null))[_0x220c('0x25')](removeEntity(_0x17d18f,null))[_0x220c('0x44')](handleError(_0x17d18f,null));};exports['describe']=function(_0x280afe,_0x402e04){return db[_0x220c('0x41')][_0x220c('0x4c')]()[_0x220c('0x25')](respondWithResult(_0x402e04,null))[_0x220c('0x44')](handleError(_0x402e04,null));};
\ No newline at end of file
+var _0x4317=['../../mysqldb','sendStatus','end','status','json','limit','undefined','count','offset','reject','save','update','then','destroy','name','send','index','map','JscriptyAnswerReport','rawAttributes','type','key','model','query','keys','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','merge','options','includeAll','include','rows','show','params','catch','create','body','find','describe','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','fs-extra','lodash','squel','crypto','jsforce','desk.js','to-csv','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'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x4317,0x7c));var _0x7431=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x4317[_0xa464c9];return _0x3d73c4;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x7431('0x0'));var zipdir=require(_0x7431('0x1'));var jsonpatch=require(_0x7431('0x2'));var rp=require('request-promise');var moment=require(_0x7431('0x3'));var BPromise=require(_0x7431('0x4'));var Mustache=require(_0x7431('0x5'));var util=require(_0x7431('0x6'));var path=require(_0x7431('0x7'));var sox=require(_0x7431('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0x7431('0x9'));var _=require(_0x7431('0xa'));var squel=require(_0x7431('0xb'));var crypto=require(_0x7431('0xc'));var jsforce=require(_0x7431('0xd'));var deskjs=require(_0x7431('0xe'));var toCsv=require(_0x7431('0xf'));var querystring=require(_0x7431('0x10'));var Papa=require(_0x7431('0x11'));var Redis=require(_0x7431('0x12'));var authService=require(_0x7431('0x13'));var qs=require(_0x7431('0x14'));var as=require(_0x7431('0x15'));var hardwareService=require(_0x7431('0x16'));var logger=require(_0x7431('0x17'))(_0x7431('0x18'));var utils=require(_0x7431('0x19'));var config=require(_0x7431('0x1a'));var licenseUtil=require(_0x7431('0x1b'));var db=require(_0x7431('0x1c'))['db'];function respondWithStatusCode(_0x3d3367,_0x367915){_0x367915=_0x367915||0xcc;return function(_0x4421d6){if(_0x4421d6){return _0x3d3367[_0x7431('0x1d')](_0x367915);}return _0x3d3367['status'](_0x367915)[_0x7431('0x1e')]();};}function respondWithResult(_0x1b13cc,_0x90e5eb){_0x90e5eb=_0x90e5eb||0xc8;return function(_0x4adbe4){if(_0x4adbe4){return _0x1b13cc[_0x7431('0x1f')](_0x90e5eb)[_0x7431('0x20')](_0x4adbe4);}};}function respondWithFilteredResult(_0x14bf18,_0x541904){return function(_0xc08396){if(_0xc08396){var _0x4bf072=typeof _0x541904['offset']==='undefined'&&typeof _0x541904[_0x7431('0x21')]===_0x7431('0x22');var _0x2fe0df=_0xc08396[_0x7431('0x23')];var _0x4a7048=_0x4bf072?0x0:_0x541904['offset'];var _0x167238=_0x4bf072?_0xc08396[_0x7431('0x23')]:_0x541904[_0x7431('0x24')]+_0x541904[_0x7431('0x21')];var _0x1e7fdf;if(_0x167238>=_0x2fe0df){_0x167238=_0x2fe0df;_0x1e7fdf=0xc8;}else{_0x1e7fdf=0xce;}_0x14bf18[_0x7431('0x1f')](_0x1e7fdf);return _0x14bf18['set']('Content-Range',_0x4a7048+'-'+_0x167238+'/'+_0x2fe0df)['json'](_0xc08396);}return null;};}function patchUpdates(_0x354e0c){return function(_0x901aa2){try{jsonpatch['apply'](_0x901aa2,_0x354e0c,!![]);}catch(_0x3cb70e){return BPromise[_0x7431('0x25')](_0x3cb70e);}return _0x901aa2[_0x7431('0x26')]();};}function saveUpdates(_0x51c7a7,_0x12c4cf){return function(_0xcbc861){if(_0xcbc861){return _0xcbc861[_0x7431('0x27')](_0x51c7a7)[_0x7431('0x28')](function(_0x49a64b){return _0x49a64b;});}return null;};}function removeEntity(_0x2e9fe7,_0x1688f6){return function(_0x4570b8){if(_0x4570b8){return _0x4570b8[_0x7431('0x29')]()[_0x7431('0x28')](function(){_0x2e9fe7[_0x7431('0x1f')](0xcc)[_0x7431('0x1e')]();});}};}function handleEntityNotFound(_0x183e53,_0x18e40c){return function(_0x9afb30){if(!_0x9afb30){_0x183e53[_0x7431('0x1d')](0x194);}return _0x9afb30;};}function handleError(_0x46e460,_0x551f92){_0x551f92=_0x551f92||0x1f4;return function(_0x43116e){logger['error'](_0x43116e['stack']);if(_0x43116e[_0x7431('0x2a')]){delete _0x43116e[_0x7431('0x2a')];}_0x46e460['status'](_0x551f92)[_0x7431('0x2b')](_0x43116e);};}exports[_0x7431('0x2c')]=function(_0xb1ac3,_0x2701e2){var _0x30e63f={},_0x24f91c={},_0xb184c={'count':0x0,'rows':[]};var _0x26a1be=_[_0x7431('0x2d')](db[_0x7431('0x2e')][_0x7431('0x2f')],function(_0xa63228){return{'name':_0xa63228['fieldName'],'type':_0xa63228[_0x7431('0x30')][_0x7431('0x31')]};});_0x24f91c[_0x7431('0x32')]=_[_0x7431('0x2d')](_0x26a1be,'name');_0x24f91c[_0x7431('0x33')]=_[_0x7431('0x34')](_0xb1ac3[_0x7431('0x33')]);_0x24f91c['filters']=_['intersection'](_0x24f91c[_0x7431('0x32')],_0x24f91c['query']);_0x30e63f['attributes']=_[_0x7431('0x35')](_0x24f91c['model'],qs[_0x7431('0x36')](_0xb1ac3[_0x7431('0x33')]['fields']));_0x30e63f[_0x7431('0x37')]=_0x30e63f[_0x7431('0x37')]['length']?_0x30e63f[_0x7431('0x37')]:_0x24f91c[_0x7431('0x32')];if(!_0xb1ac3[_0x7431('0x33')][_0x7431('0x38')](_0x7431('0x39'))){_0x30e63f['limit']=qs[_0x7431('0x21')](_0xb1ac3['query'][_0x7431('0x21')]);_0x30e63f[_0x7431('0x24')]=qs[_0x7431('0x24')](_0xb1ac3[_0x7431('0x33')][_0x7431('0x24')]);}_0x30e63f[_0x7431('0x3a')]=qs[_0x7431('0x3b')](_0xb1ac3[_0x7431('0x33')][_0x7431('0x3b')]);_0x30e63f[_0x7431('0x3c')]=qs[_0x7431('0x3d')](_[_0x7431('0x3e')](_0xb1ac3[_0x7431('0x33')],_0x24f91c[_0x7431('0x3d')]),_0x26a1be);if(_0xb1ac3[_0x7431('0x33')][_0x7431('0x3f')]){_0x30e63f[_0x7431('0x3c')]=_['merge'](_0x30e63f['where'],{'$or':_[_0x7431('0x2d')](_0x26a1be,function(_0x1c557c){if(_0x1c557c['type']!=='VIRTUAL'){var _0x1cb05a={};_0x1cb05a[_0x1c557c[_0x7431('0x2a')]]={'$like':'%'+_0xb1ac3[_0x7431('0x33')][_0x7431('0x3f')]+'%'};return _0x1cb05a;}})});}_0x30e63f=_[_0x7431('0x40')]({},_0x30e63f,_0xb1ac3[_0x7431('0x41')]);var _0x4e8db2={'where':_0x30e63f['where']};return db[_0x7431('0x2e')][_0x7431('0x23')](_0x4e8db2)[_0x7431('0x28')](function(_0x53dba5){_0xb184c['count']=_0x53dba5;if(_0xb1ac3[_0x7431('0x33')][_0x7431('0x42')]){_0x30e63f[_0x7431('0x43')]=[{'all':!![]}];}return db[_0x7431('0x2e')]['findAll'](_0x30e63f);})[_0x7431('0x28')](function(_0x540a5d){_0xb184c[_0x7431('0x44')]=_0x540a5d;return _0xb184c;})[_0x7431('0x28')](respondWithFilteredResult(_0x2701e2,_0x30e63f))['catch'](handleError(_0x2701e2,null));};exports[_0x7431('0x45')]=function(_0x150431,_0x32589c){var _0x50e648={'raw':!![],'where':{'id':_0x150431[_0x7431('0x46')]['id']}},_0x100c83={};_0x100c83['model']=_[_0x7431('0x34')](db[_0x7431('0x2e')][_0x7431('0x2f')]);_0x100c83[_0x7431('0x33')]=_['keys'](_0x150431[_0x7431('0x33')]);_0x100c83['filters']=_['intersection'](_0x100c83[_0x7431('0x32')],_0x100c83[_0x7431('0x33')]);_0x50e648[_0x7431('0x37')]=_['intersection'](_0x100c83['model'],qs[_0x7431('0x36')](_0x150431[_0x7431('0x33')]['fields']));_0x50e648[_0x7431('0x37')]=_0x50e648[_0x7431('0x37')]['length']?_0x50e648['attributes']:_0x100c83[_0x7431('0x32')];if(_0x150431['query'][_0x7431('0x42')]){_0x50e648[_0x7431('0x43')]=[{'all':!![]}];}_0x50e648=_[_0x7431('0x40')]({},_0x50e648,_0x150431['options']);return db[_0x7431('0x2e')]['find'](_0x50e648)[_0x7431('0x28')](handleEntityNotFound(_0x32589c,null))[_0x7431('0x28')](respondWithResult(_0x32589c,null))[_0x7431('0x47')](handleError(_0x32589c,null));};exports[_0x7431('0x48')]=function(_0x4006a6,_0x4f1092){return db['JscriptyAnswerReport'][_0x7431('0x48')](_0x4006a6[_0x7431('0x49')],{})[_0x7431('0x28')](respondWithResult(_0x4f1092,0xc9))[_0x7431('0x47')](handleError(_0x4f1092,null));};exports[_0x7431('0x27')]=function(_0xd66659,_0x6f7b4){if(_0xd66659['body']['id']){delete _0xd66659[_0x7431('0x49')]['id'];}return db[_0x7431('0x2e')][_0x7431('0x4a')]({'where':{'id':_0xd66659[_0x7431('0x46')]['id']}})[_0x7431('0x28')](handleEntityNotFound(_0x6f7b4,null))['then'](saveUpdates(_0xd66659[_0x7431('0x49')],null))['then'](respondWithResult(_0x6f7b4,null))['catch'](handleError(_0x6f7b4,null));};exports[_0x7431('0x29')]=function(_0x11dfb7,_0x2e6d44){return db[_0x7431('0x2e')][_0x7431('0x4a')]({'where':{'id':_0x11dfb7[_0x7431('0x46')]['id']}})['then'](handleEntityNotFound(_0x2e6d44,null))[_0x7431('0x28')](removeEntity(_0x2e6d44,null))[_0x7431('0x47')](handleError(_0x2e6d44,null));};exports['describe']=function(_0x30ddfe,_0x12cae0){return db[_0x7431('0x2e')][_0x7431('0x4b')]()['then'](respondWithResult(_0x12cae0,null))[_0x7431('0x47')](handleError(_0x12cae0,null));};
\ No newline at end of file