Built motion from commit d3a776a.|0.0.126
[motion.git] / server / api / mail_queue / mail_queue.controller.js
index 97654c6..d1ab79b 100644 (file)
@@ -1 +1 @@
-var _0x51c2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x73\x74\x72\x61\x74\x65\x67\x79","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x6C\x6F\x67","\x61\x67\x65\x6E\x74\x73","\x61\x64\x64\x55\x73\x65\x72\x73","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72"];_0x51c2[0];var _=require(_0x51c2[1]);var util=require(_0x51c2[2]);var MailQueue=require(_0x51c2[4])[_0x51c2[3]];exports[_0x51c2[5]]=function(_0x6e83x4,_0x6e83x5){var _0x6e83x6=[_0x51c2[6],_0x51c2[7],_0x51c2[8],_0x51c2[9]];var _0x6e83x7=_0x6e83x4[_0x51c2[11]][_0x51c2[10]]?parseInt(_0x6e83x4[_0x51c2[11]][_0x51c2[10]],10):100;var _0x6e83x8=_0x6e83x4[_0x51c2[11]][_0x51c2[12]]?parseInt(_0x6e83x4[_0x51c2[11]][_0x51c2[12]],10):0;var _0x6e83x9={where:{},limit:_0x6e83x7,offset:_0x6e83x8*_0x6e83x7,include:[{all:true}]};_[_0x51c2[26]](_0x6e83x4[_0x51c2[11]],function(_0x6e83xa,_0x6e83xb){switch(_0x6e83xb){case _0x51c2[10]:;case _0x51c2[12]:break ;;case _0x51c2[15]:_0x6e83x9[_0x51c2[13]]=util[_0x51c2[18]](_0x51c2[14],_0x6e83x4[_0x51c2[11]][_0x51c2[15]],_0x6e83x4[_0x51c2[11]][_0x51c2[16]]||_0x51c2[17])||null;break ;;case _0x51c2[16]:break ;;case _0x51c2[24]:_0x6e83x9[_0x51c2[20]][_0x51c2[19]]=[];_0x6e83x6[_0x51c2[23]](function(_0x6e83xc){var _0x6e83xd={};_0x6e83xd[_0x6e83xc]={$like:_0x51c2[21]+_0x6e83xa+_0x51c2[21]};_0x6e83x9[_0x51c2[20]][_0x51c2[19]][_0x51c2[22]](_0x6e83xd);});break ;;default:_0x6e83x9[_0x51c2[20]][_0x6e83xb]={$like:{}};_0x6e83x9[_0x51c2[20]][_0x6e83xb][_0x51c2[25]]=_0x51c2[21]+_0x6e83xa+_0x51c2[21];;}});MailQueue[_0x51c2[40]](_0x6e83x9)[_0x51c2[39]](function(_0x6e83xf){var _0x6e83x10=Math[_0x51c2[29]](_0x6e83xf[_0x51c2[28]]/_0x6e83x7);var _0x6e83x11=_0x6e83x10>(_0x6e83x9[_0x51c2[30]]+1)?util[_0x51c2[18]](_0x51c2[31],_0x6e83x4[_0x51c2[32]],_0x6e83x4[_0x51c2[34]][_0x51c2[33]],_0x6e83x4[_0x51c2[35]],_0x6e83x8+1):null;var _0x6e83x12=_0x6e83x8>0?util[_0x51c2[18]](_0x51c2[31],_0x6e83x4[_0x51c2[32]],_0x6e83x4[_0x51c2[34]][_0x51c2[33]],_0x6e83x4[_0x51c2[35]],_0x6e83x8-1):null;_0x6e83x5[_0x51c2[38]](200)[_0x51c2[37]]({count:_0x6e83xf[_0x51c2[28]],rows:_0x6e83xf[_0x51c2[36]],next_page:_0x6e83x11,previous_page:_0x6e83x12,total_pages:_0x6e83x10});})[_0x51c2[27]](function(_0x6e83xe){return handleError(_0x6e83x5,_0x6e83xe)});};exports[_0x51c2[41]]=function(_0x6e83x4,_0x6e83x5){MailQueue[_0x51c2[45]](_0x6e83x4[_0x51c2[44]][_0x51c2[43]])[_0x51c2[39]](function(_0x6e83x13){if(!_0x6e83x13){return _0x6e83x5[_0x51c2[42]](404)};return _0x6e83x5[_0x51c2[37]](_0x6e83x13);})[_0x51c2[27]](function(_0x6e83xe){return handleError(_0x6e83x5,_0x6e83xe)})};exports[_0x51c2[46]]=function(_0x6e83x4,_0x6e83x5){MailQueue[_0x51c2[46]](_0x6e83x4[_0x51c2[47]])[_0x51c2[39]](function(_0x6e83x13){return _0x6e83x5[_0x51c2[38]](201)[_0x51c2[37]](_0x6e83x13)})[_0x51c2[27]](function(_0x6e83xe){return handleError(_0x6e83x5,_0x6e83xe)})};exports[_0x51c2[48]]=function(_0x6e83x4,_0x6e83x5){if(_0x6e83x4[_0x51c2[47]][_0x51c2[43]]){delete _0x6e83x4[_0x51c2[47]][_0x51c2[43]]};MailQueue[_0x51c2[45]](_0x6e83x4[_0x51c2[44]][_0x51c2[43]])[_0x51c2[39]](function(_0x6e83x13){if(!_0x6e83x13){return _0x6e83x5[_0x51c2[42]](404)};var _0x6e83x14=_[_0x51c2[49]](_0x6e83x13,_0x6e83x4[_0x51c2[47]]);_0x6e83x14[_0x51c2[50]]()[_0x51c2[39]](function(){return _0x6e83x5[_0x51c2[38]](200)[_0x51c2[37]](_0x6e83x13)})[_0x51c2[27]](function(_0x6e83xe){return handleError(_0x6e83x5,_0x6e83xe)});})[_0x51c2[27]](function(_0x6e83xe){return handleError(_0x6e83x5,_0x6e83xe)});};exports[_0x51c2[51]]=function(_0x6e83x4,_0x6e83x5,_0x6e83x15){return MailQueue[_0x51c2[45]](_0x6e83x4[_0x51c2[44]][_0x51c2[43]])[_0x51c2[39]](function(_0x6e83x13){if(_0x6e83x13){return _0x6e83x13[_0x51c2[54]](_0x6e83x4[_0x51c2[47]][_0x51c2[53]],{individualHooks:true})}else {throw  new Error(_0x51c2[55])}})[_0x51c2[39]](function(){return _0x6e83x5[_0x51c2[42]](200)})[_0x51c2[27]](function(_0x6e83xe){console[_0x51c2[52]](_0x6e83xe);return handleError(_0x6e83x5,_0x6e83xe);})};exports[_0x51c2[56]]=function(_0x6e83x4,_0x6e83x5){return MailQueue[_0x51c2[45]](_0x6e83x4[_0x51c2[44]][_0x51c2[43]])[_0x51c2[39]](function(_0x6e83x13){if(_0x6e83x13){return _0x6e83x13[_0x51c2[57]](_0x6e83x4[_0x51c2[47]][_0x51c2[53]],{individualHooks:true})}else {throw  new Error(_0x51c2[55])}})[_0x51c2[39]](function(){return _0x6e83x5[_0x51c2[42]](200)})[_0x51c2[27]](function(_0x6e83xe){return handleError(_0x6e83x5,_0x6e83xe)})};exports[_0x51c2[58]]=function(_0x6e83x4,_0x6e83x5){MailQueue[_0x51c2[45]](_0x6e83x4[_0x51c2[44]][_0x51c2[43]])[_0x51c2[39]](function(_0x6e83x13){if(!_0x6e83x13){return _0x6e83x5[_0x51c2[42]](404)};_0x6e83x13[_0x51c2[58]]()[_0x51c2[39]](function(){return _0x6e83x5[_0x51c2[42]](204)})[_0x51c2[27]](function(_0x6e83xe){return handleError(_0x6e83x5,_0x6e83xe)});})[_0x51c2[27]](function(_0x6e83xe){return handleError(_0x6e83x5,_0x6e83xe)})};exports[_0x51c2[59]]=function(_0x6e83x4,_0x6e83x5){MailQueue[_0x51c2[58]]({where:{id:_0x6e83x4[_0x51c2[11]][_0x51c2[43]]},individualHooks:true})[_0x51c2[39]](function(){return _0x6e83x5[_0x51c2[42]](204)})[_0x51c2[27]](function(_0x6e83xe){return handleError(_0x6e83x5,_0x6e83xe)})};exports[_0x51c2[60]]=function(_0x6e83x4,_0x6e83x5){return MailQueue[_0x51c2[45]](_0x6e83x4[_0x51c2[44]][_0x51c2[43]])[_0x51c2[39]](function(_0x6e83x17){if(!_0x6e83x17){return _0x6e83x5[_0x51c2[42]](404)};return _0x6e83x17[_0x51c2[64]]({where:{role:_0x51c2[61]},attributes:[_0x51c2[43],_0x51c2[7],_0x51c2[62],_0x51c2[63]]});})[_0x51c2[39]](function(_0x6e83x16){return _0x6e83x5[_0x51c2[38]](200)[_0x51c2[37]](_0x6e83x16)})[_0x51c2[27]](function(_0x6e83xe){return handleError(_0x6e83x5,_0x6e83xe)})};exports[_0x51c2[56]]=function(_0x6e83x4,_0x6e83x5,_0x6e83x15){return MailQueue[_0x51c2[45]](_0x6e83x4[_0x51c2[44]][_0x51c2[43]])[_0x51c2[39]](function(_0x6e83x17){if(!_0x6e83x17){return _0x6e83x5[_0x51c2[42]](404)};return _0x6e83x17[_0x51c2[65]](_0x6e83x4[_0x51c2[11]][_0x51c2[53]]);})[_0x51c2[39]](function(){return _0x6e83x5[_0x51c2[42]](202)})[_0x51c2[27]](function(_0x6e83xe){return _0x6e83x15(_0x6e83xe)})};function handleError(_0x6e83x5,_0x6e83xe){return _0x6e83x5[_0x51c2[38]](500)[_0x51c2[37]](_0x6e83xe)}
\ No newline at end of file
+var _0xd16d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x55\x73\x65\x72","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x69\x64","\x75\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\x72\x6F\x6C\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x70\x61\x72\x61\x6D\x73","\x63\x72\x65\x61\x74\x65","\x68\x61\x6E\x64\x6C\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x4D\x61\x6E\x61\x67\x65\x72","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74\x73","\x70\x65\x6E\x61\x6C\x74\x79","\x6E\x61\x6D\x65","\x6D\x61\x70","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79","\x65\x72\x72","\x65\x72\x72\x6F\x72","\x71\x75\x65\x75\x65","\x68\x61\x6E\x64\x6C\x65\x46\x6F\x72\x65\x69\x67\x6E\x4B\x65\x79\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x61\x67\x65\x6E\x74","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x67\x65\x74\x55\x73\x65\x72\x73"];_0xd16d[0];var _=require(_0xd16d[1]);var util=require(_0xd16d[2]);var Util=require(_0xd16d[3]);var sequelize=require(_0xd16d[5])[_0xd16d[4]];var MailQueue=require(_0xd16d[5])[_0xd16d[6]];var User=require(_0xd16d[5])[_0xd16d[7]];var UserHasMailQueue=require(_0xd16d[5])[_0xd16d[8]];exports[_0xd16d[9]]= function(_0xae65x8,_0xae65x9){switch(_0xae65x8[_0xd16d[17]][_0xd16d[23]]){case _0xd16d[17]:return User[_0xd16d[18]](_0xae65x8[_0xd16d[17]][_0xd16d[16]],{attributes:[_0xd16d[16]]})[_0xd16d[13]](Util[_0xd16d[15]](_0xae65x8[_0xd16d[14]]))[_0xd16d[13]](function(_0xae65xb){_0xae65x9[_0xd16d[12]](200)[_0xd16d[11]](_0xae65xb)})[_0xd16d[10]](function(_0xae65xa){return handleError(_0xae65x9,_0xae65xa)});default:return MailQueue[_0xd16d[22]](_0xd16d[21])[_0xd16d[20]](Util[_0xd16d[19]](_0xae65x8[_0xd16d[14]]))[_0xd16d[13]](function(_0xae65xb){_0xae65x9[_0xd16d[12]](200)[_0xd16d[11]](_0xae65xb)})[_0xd16d[10]](function(_0xae65xa){return handleError(_0xae65x9,_0xae65xa)})}};exports[_0xd16d[24]]= function(_0xae65x8,_0xae65x9){return MailQueue[_0xd16d[22]](_0xd16d[21])[_0xd16d[18]](_0xae65x8[_0xd16d[26]][_0xd16d[16]])[_0xd16d[13]](function(_0xae65xc){if(!_0xae65xc){return _0xae65x9[_0xd16d[25]](404)};return _0xae65x9[_0xd16d[11]](_0xae65xc)})[_0xd16d[10]](function(_0xae65xa){return handleError(_0xae65x9,_0xae65xa)})};exports[_0xd16d[27]]= function(_0xae65x8,_0xae65x9){return MailQueue[_0xd16d[27]](_0xae65x8[_0xd16d[30]])[_0xd16d[13]](function(_0xae65xc){return _0xae65x9[_0xd16d[12]](201)[_0xd16d[11]](_0xae65xc)})[_0xd16d[10]](sequelize.UniqueConstraintError,function(_0xae65xa){return Util[_0xd16d[29]][_0xd16d[28]](_0xae65x9,_0xae65xa)})[_0xd16d[10]](function(_0xae65xa){return handleError(_0xae65x9,_0xae65xa)})};exports[_0xd16d[31]]= function(_0xae65x8,_0xae65x9){if(_0xae65x8[_0xd16d[30]][_0xd16d[16]]){delete _0xae65x8[_0xd16d[30]][_0xd16d[16]]};return MailQueue[_0xd16d[18]](_0xae65x8[_0xd16d[26]][_0xd16d[16]])[_0xd16d[13]](function(_0xae65xc){if(!_0xae65xc){return _0xae65x9[_0xd16d[25]](404)};var _0xae65xd=_[_0xd16d[32]](_0xae65xc,_0xae65x8[_0xd16d[30]]);return _0xae65xd[_0xd16d[33]]()})[_0xd16d[13]](function(_0xae65xc){return _0xae65x9[_0xd16d[12]](200)[_0xd16d[11]](_0xae65xc)})[_0xd16d[10]](sequelize.UniqueConstraintError,function(_0xae65xa){return Util[_0xd16d[29]][_0xd16d[28]](_0xae65x9,_0xae65xa)})[_0xd16d[10]](function(_0xae65xa){return handleError(_0xae65x9,_0xae65xa)})};exports[_0xd16d[34]]= function(_0xae65x8,_0xae65x9,_0xae65xe){return MailQueue[_0xd16d[18]](_0xae65x8[_0xd16d[26]][_0xd16d[16]])[_0xd16d[13]](function(_0xae65xc){if(!_0xae65xc){return _0xae65x9[_0xd16d[25]](404)};var _0xae65xf=_[_0xd16d[38]](_0xae65x8[_0xd16d[30]][_0xd16d[35]],function(_0xae65x10){return {UserId:_0xae65x10,penalty:_0xae65x8[_0xd16d[30]][_0xd16d[36]],MailQueueId:_0xae65xc[_0xd16d[16]],queue:_0xae65xc[_0xd16d[37]]}});return UserHasMailQueue[_0xd16d[39]](_0xae65xf,{individualHooks:true})})[_0xd16d[13]](function(){return _0xae65x9[_0xd16d[25]](200)})[_0xd16d[10]](function(_0xae65xa){return handleError(_0xae65x9,_0xae65xa)})};exports[_0xd16d[40]]= function(_0xae65x8,_0xae65x9){return MailQueue[_0xd16d[18]](_0xae65x8[_0xd16d[26]][_0xd16d[16]])[_0xd16d[13]](function(_0xae65x11){if(!_0xae65x11){return _0xae65x9[_0xd16d[25]](404)};return _0xae65x11[_0xd16d[41]](_0xae65x8[_0xd16d[14]][_0xd16d[35]],{individualHooks:true})})[_0xd16d[13]](function(){return _0xae65x9[_0xd16d[25]](200)})[_0xd16d[10]](function(_0xae65xa){return handleError(_0xae65x9,_0xae65xa)})};exports[_0xd16d[42]]= function(_0xae65x8,_0xae65x9){var _0xae65x12;return MailQueue[_0xd16d[18]](_0xae65x8[_0xd16d[26]][_0xd16d[16]])[_0xd16d[13]](function(_0xae65xc){_0xae65x12= _0xae65xc;if(!_0xae65xc){return _0xae65x9[_0xd16d[25]](404)};return _0xae65xc[_0xd16d[42]]()})[_0xd16d[13]](function(){return _0xae65x9[_0xd16d[25]](204)})[_0xd16d[10]](sequelize.ForeignKeyConstraintError,function(_0xae65xa){return Util[_0xd16d[29]][_0xd16d[46]](_0xae65x9,_0xd16d[45],_0xae65x12[_0xd16d[37]],_0xae65xa)})[_0xd16d[10]](function(_0xae65xa){console[_0xd16d[44]](_0xd16d[43],_0xae65xa);return handleError(_0xae65x9,_0xae65xa)})};exports[_0xd16d[47]]= function(_0xae65x8,_0xae65x9){return MailQueue[_0xd16d[42]]({where:{id:_0xae65x8[_0xd16d[14]][_0xd16d[48]]},individualHooks:true})[_0xd16d[13]](function(){return _0xae65x9[_0xd16d[25]](204)})[_0xd16d[10]](function(_0xae65xa){return handleError(_0xae65x9,_0xae65xa)})};exports[_0xd16d[49]]= function(_0xae65x8,_0xae65x9){return MailQueue[_0xd16d[18]](_0xae65x8[_0xd16d[26]][_0xd16d[16]])[_0xd16d[13]](function(_0xae65x11){if(!_0xae65x11){return _0xae65x9[_0xd16d[25]](404)};return _0xae65x11[_0xd16d[54]]({where:{role:_0xd16d[51]},attributes:[_0xd16d[16],_0xd16d[37],_0xd16d[52],_0xd16d[53]]})})[_0xd16d[13]](function(_0xae65x13){return _0xae65x9[_0xd16d[12]](200)[_0xd16d[11]]({rows:_0xae65x13,count:_0xae65x13[_0xd16d[50]]})})[_0xd16d[10]](function(_0xae65xa){return handleError(_0xae65x9,_0xae65xa)})};function handleError(_0xae65x9,_0xae65xa){return _0xae65x9[_0xd16d[12]](500)[_0xd16d[11]](_0xae65xa)}
\ No newline at end of file