Built motion from commit b0a9a629.|2.6.33
[motion2.git] / server / api / intVtigerField / intVtigerField.controller.js
index 7912df6..cb6bcd6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe835=['mustache','util','path','to-csv','fs-extra','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/license/util','sendStatus','end','status','offset','undefined','limit','count','set','Content-Range','json','reject','save','update','then','destroy','error','stack','name','VtigerField','rawAttributes','fieldName','type','map','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','order','sort','pick','filter','merge','VIRTUAL','options','includeAll','include','findAll','rows','catch','find','create','body','params','rimraf','zip-dir','request-promise','moment','bluebird'];(function(_0x5cab7b,_0x4976c9){var _0x20b650=function(_0x43d6fc){while(--_0x43d6fc){_0x5cab7b['push'](_0x5cab7b['shift']());}};_0x20b650(++_0x4976c9);}(_0xe835,0x1b1));var _0x5e83=function(_0x149ca0,_0x2ac7f5){_0x149ca0=_0x149ca0-0x0;var _0x56b6b9=_0xe835[_0x149ca0];return _0x56b6b9;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x5e83('0x0'));var zipdir=require(_0x5e83('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0x5e83('0x2'));var moment=require(_0x5e83('0x3'));var BPromise=require(_0x5e83('0x4'));var Mustache=require(_0x5e83('0x5'));var util=require(_0x5e83('0x6'));var path=require(_0x5e83('0x7'));var sox=require('sox');var csv=require(_0x5e83('0x8'));var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0x5e83('0x9'));var _=require(_0x5e83('0xa'));var squel=require(_0x5e83('0xb'));var crypto=require(_0x5e83('0xc'));var jsforce=require(_0x5e83('0xd'));var deskjs=require(_0x5e83('0xe'));var toCsv=require('to-csv');var querystring=require(_0x5e83('0xf'));var Papa=require(_0x5e83('0x10'));var Redis=require(_0x5e83('0x11'));var authService=require('../../components/auth/service');var qs=require(_0x5e83('0x12'));var as=require(_0x5e83('0x13'));var hardwareService=require(_0x5e83('0x14'));var logger=require(_0x5e83('0x15'))(_0x5e83('0x16'));var utils=require(_0x5e83('0x17'));var config=require('../../config/environment');var licenseUtil=require(_0x5e83('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xd0102d,_0x189f27){_0x189f27=_0x189f27||0xcc;return function(_0x2f3d7b){if(_0x2f3d7b){return _0xd0102d[_0x5e83('0x19')](_0x189f27);}return _0xd0102d['status'](_0x189f27)[_0x5e83('0x1a')]();};}function respondWithResult(_0x5c802e,_0x1a5717){_0x1a5717=_0x1a5717||0xc8;return function(_0x250ad4){if(_0x250ad4){return _0x5c802e[_0x5e83('0x1b')](_0x1a5717)['json'](_0x250ad4);}};}function respondWithFilteredResult(_0x1d8d13,_0x5b8268){return function(_0x296a63){if(_0x296a63){var _0x16d091=typeof _0x5b8268[_0x5e83('0x1c')]===_0x5e83('0x1d')&&typeof _0x5b8268[_0x5e83('0x1e')]===_0x5e83('0x1d');var _0x570623=_0x296a63[_0x5e83('0x1f')];var _0x89b673=_0x16d091?0x0:_0x5b8268[_0x5e83('0x1c')];var _0x43a061=_0x16d091?_0x296a63[_0x5e83('0x1f')]:_0x5b8268[_0x5e83('0x1c')]+_0x5b8268[_0x5e83('0x1e')];var _0x47e10e;if(_0x43a061>=_0x570623){_0x43a061=_0x570623;_0x47e10e=0xc8;}else{_0x47e10e=0xce;}_0x1d8d13[_0x5e83('0x1b')](_0x47e10e);return _0x1d8d13[_0x5e83('0x20')](_0x5e83('0x21'),_0x89b673+'-'+_0x43a061+'/'+_0x570623)[_0x5e83('0x22')](_0x296a63);}return null;};}function patchUpdates(_0x4c3780){return function(_0x203c8f){try{jsonpatch['apply'](_0x203c8f,_0x4c3780,!![]);}catch(_0x27b54d){return BPromise[_0x5e83('0x23')](_0x27b54d);}return _0x203c8f[_0x5e83('0x24')]();};}function saveUpdates(_0x1d2139,_0x3e917d){return function(_0x26d9c2){if(_0x26d9c2){return _0x26d9c2[_0x5e83('0x25')](_0x1d2139)[_0x5e83('0x26')](function(_0x186928){return _0x186928;});}return null;};}function removeEntity(_0x58a284,_0x2315e0){return function(_0x3e970b){if(_0x3e970b){return _0x3e970b[_0x5e83('0x27')]()['then'](function(){_0x58a284[_0x5e83('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0x49ac08,_0x1868ee){return function(_0x5119a5){if(!_0x5119a5){_0x49ac08['sendStatus'](0x194);}return _0x5119a5;};}function handleError(_0x2b4b98,_0x3329dd){_0x3329dd=_0x3329dd||0x1f4;return function(_0x45fdbe){logger[_0x5e83('0x28')](_0x45fdbe[_0x5e83('0x29')]);if(_0x45fdbe[_0x5e83('0x2a')]){delete _0x45fdbe[_0x5e83('0x2a')];}_0x2b4b98[_0x5e83('0x1b')](_0x3329dd)['send'](_0x45fdbe);};}exports['index']=function(_0x2d50bc,_0x4e1662){var _0x3eb500={},_0x1c7b46={},_0x27fe8b={'count':0x0,'rows':[]};var _0x59d81b=_['map'](db[_0x5e83('0x2b')][_0x5e83('0x2c')],function(_0x3ee510){return{'name':_0x3ee510[_0x5e83('0x2d')],'type':_0x3ee510[_0x5e83('0x2e')]['key']};});_0x1c7b46['model']=_[_0x5e83('0x2f')](_0x59d81b,_0x5e83('0x2a'));_0x1c7b46['query']=_[_0x5e83('0x30')](_0x2d50bc[_0x5e83('0x31')]);_0x1c7b46[_0x5e83('0x32')]=_[_0x5e83('0x33')](_0x1c7b46[_0x5e83('0x34')],_0x1c7b46[_0x5e83('0x31')]);_0x3eb500[_0x5e83('0x35')]=_[_0x5e83('0x33')](_0x1c7b46['model'],qs[_0x5e83('0x36')](_0x2d50bc['query'][_0x5e83('0x36')]));_0x3eb500[_0x5e83('0x35')]=_0x3eb500[_0x5e83('0x35')][_0x5e83('0x37')]?_0x3eb500[_0x5e83('0x35')]:_0x1c7b46['model'];if(!_0x2d50bc[_0x5e83('0x31')][_0x5e83('0x38')]('nolimit')){_0x3eb500[_0x5e83('0x1e')]=qs[_0x5e83('0x1e')](_0x2d50bc['query'][_0x5e83('0x1e')]);_0x3eb500[_0x5e83('0x1c')]=qs[_0x5e83('0x1c')](_0x2d50bc['query']['offset']);}_0x3eb500[_0x5e83('0x39')]=qs[_0x5e83('0x3a')](_0x2d50bc[_0x5e83('0x31')][_0x5e83('0x3a')]);_0x3eb500['where']=qs[_0x5e83('0x32')](_[_0x5e83('0x3b')](_0x2d50bc[_0x5e83('0x31')],_0x1c7b46[_0x5e83('0x32')]),_0x59d81b);if(_0x2d50bc[_0x5e83('0x31')][_0x5e83('0x3c')]){_0x3eb500['where']=_[_0x5e83('0x3d')](_0x3eb500['where'],{'$or':_[_0x5e83('0x2f')](_0x59d81b,function(_0x2f8489){if(_0x2f8489['type']!==_0x5e83('0x3e')){var _0x35c76d={};_0x35c76d[_0x2f8489['name']]={'$like':'%'+_0x2d50bc['query'][_0x5e83('0x3c')]+'%'};return _0x35c76d;}})});}_0x3eb500=_['merge']({},_0x3eb500,_0x2d50bc[_0x5e83('0x3f')]);var _0x5ee183={'where':_0x3eb500['where']};return db['VtigerField'][_0x5e83('0x1f')](_0x5ee183)[_0x5e83('0x26')](function(_0x36abc5){_0x27fe8b[_0x5e83('0x1f')]=_0x36abc5;if(_0x2d50bc[_0x5e83('0x31')][_0x5e83('0x40')]){_0x3eb500[_0x5e83('0x41')]=[{'all':!![]}];}return db['VtigerField'][_0x5e83('0x42')](_0x3eb500);})['then'](function(_0x4ab7b5){_0x27fe8b[_0x5e83('0x43')]=_0x4ab7b5;return _0x27fe8b;})[_0x5e83('0x26')](respondWithFilteredResult(_0x4e1662,_0x3eb500))[_0x5e83('0x44')](handleError(_0x4e1662,null));};exports['show']=function(_0x4170b0,_0x52f982){var _0x31827a={'raw':!![],'where':{'id':_0x4170b0['params']['id']}},_0x579da0={};_0x579da0[_0x5e83('0x34')]=_['keys'](db[_0x5e83('0x2b')]['rawAttributes']);_0x579da0[_0x5e83('0x31')]=_[_0x5e83('0x30')](_0x4170b0[_0x5e83('0x31')]);_0x579da0[_0x5e83('0x32')]=_[_0x5e83('0x33')](_0x579da0[_0x5e83('0x34')],_0x579da0[_0x5e83('0x31')]);_0x31827a[_0x5e83('0x35')]=_[_0x5e83('0x33')](_0x579da0[_0x5e83('0x34')],qs['fields'](_0x4170b0[_0x5e83('0x31')]['fields']));_0x31827a[_0x5e83('0x35')]=_0x31827a[_0x5e83('0x35')][_0x5e83('0x37')]?_0x31827a[_0x5e83('0x35')]:_0x579da0[_0x5e83('0x34')];if(_0x4170b0[_0x5e83('0x31')][_0x5e83('0x40')]){_0x31827a[_0x5e83('0x41')]=[{'all':!![]}];}_0x31827a=_['merge']({},_0x31827a,_0x4170b0['options']);return db['VtigerField'][_0x5e83('0x45')](_0x31827a)['then'](handleEntityNotFound(_0x52f982,null))[_0x5e83('0x26')](respondWithResult(_0x52f982,null))['catch'](handleError(_0x52f982,null));};exports[_0x5e83('0x46')]=function(_0x24befc,_0x4b772e){return db[_0x5e83('0x2b')][_0x5e83('0x46')](_0x24befc[_0x5e83('0x47')],{})[_0x5e83('0x26')](respondWithResult(_0x4b772e,0xc9))[_0x5e83('0x44')](handleError(_0x4b772e,null));};exports[_0x5e83('0x25')]=function(_0x43de53,_0x3ccbce){if(_0x43de53[_0x5e83('0x47')]['id']){delete _0x43de53[_0x5e83('0x47')]['id'];}return db[_0x5e83('0x2b')][_0x5e83('0x45')]({'where':{'id':_0x43de53[_0x5e83('0x48')]['id']}})['then'](handleEntityNotFound(_0x3ccbce,null))[_0x5e83('0x26')](saveUpdates(_0x43de53[_0x5e83('0x47')],null))[_0x5e83('0x26')](respondWithResult(_0x3ccbce,null))[_0x5e83('0x44')](handleError(_0x3ccbce,null));};exports[_0x5e83('0x27')]=function(_0x8e4499,_0x1734ca){return db[_0x5e83('0x2b')][_0x5e83('0x45')]({'where':{'id':_0x8e4499['params']['id']}})[_0x5e83('0x26')](handleEntityNotFound(_0x1734ca,null))[_0x5e83('0x26')](removeEntity(_0x1734ca,null))[_0x5e83('0x44')](handleError(_0x1734ca,null));};
\ No newline at end of file
+var _0x5d82=['create','destroy','rimraf','fast-json-patch','moment','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','sendStatus','status','end','offset','undefined','limit','count','set','Content-Range','json','apply','save','update','then','error','name','send','VtigerField','rawAttributes','fieldName','type','model','query','keys','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','VIRTUAL','options','includeAll','include','findAll','catch','show','params','find'];(function(_0xb4e2df,_0x1cbb7c){var _0x5e95ba=function(_0x79d317){while(--_0x79d317){_0xb4e2df['push'](_0xb4e2df['shift']());}};_0x5e95ba(++_0x1cbb7c);}(_0x5d82,0xd4));var _0x25d8=function(_0x1f0498,_0x4eb36a){_0x1f0498=_0x1f0498-0x0;var _0x36221a=_0x5d82[_0x1f0498];return _0x36221a;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x25d8('0x0'));var zipdir=require('zip-dir');var jsonpatch=require(_0x25d8('0x1'));var rp=require('request-promise');var moment=require(_0x25d8('0x2'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x25d8('0x3'));var path=require(_0x25d8('0x4'));var sox=require(_0x25d8('0x5'));var csv=require('to-csv');var ejs=require(_0x25d8('0x6'));var fs=require('fs');var fs_extra=require('fs-extra');var _=require('lodash');var squel=require(_0x25d8('0x7'));var crypto=require(_0x25d8('0x8'));var jsforce=require(_0x25d8('0x9'));var deskjs=require(_0x25d8('0xa'));var toCsv=require(_0x25d8('0xb'));var querystring=require('querystring');var Papa=require(_0x25d8('0xc'));var Redis=require(_0x25d8('0xd'));var authService=require(_0x25d8('0xe'));var qs=require(_0x25d8('0xf'));var as=require(_0x25d8('0x10'));var hardwareService=require('../../config/license/hardware');var logger=require(_0x25d8('0x11'))(_0x25d8('0x12'));var utils=require(_0x25d8('0x13'));var config=require(_0x25d8('0x14'));var licenseUtil=require(_0x25d8('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x3af3d3,_0x1b1abe){_0x1b1abe=_0x1b1abe||0xcc;return function(_0x544961){if(_0x544961){return _0x3af3d3[_0x25d8('0x16')](_0x1b1abe);}return _0x3af3d3[_0x25d8('0x17')](_0x1b1abe)[_0x25d8('0x18')]();};}function respondWithResult(_0x5f3098,_0x17b9ba){_0x17b9ba=_0x17b9ba||0xc8;return function(_0x623915){if(_0x623915){return _0x5f3098[_0x25d8('0x17')](_0x17b9ba)['json'](_0x623915);}};}function respondWithFilteredResult(_0x60b04a,_0x35e08b){return function(_0x94c33a){if(_0x94c33a){var _0x5e6a83=typeof _0x35e08b[_0x25d8('0x19')]===_0x25d8('0x1a')&&typeof _0x35e08b[_0x25d8('0x1b')]===_0x25d8('0x1a');var _0x336ca1=_0x94c33a[_0x25d8('0x1c')];var _0x54f626=_0x5e6a83?0x0:_0x35e08b[_0x25d8('0x19')];var _0x1ba261=_0x5e6a83?_0x94c33a['count']:_0x35e08b[_0x25d8('0x19')]+_0x35e08b['limit'];var _0x21cda0;if(_0x1ba261>=_0x336ca1){_0x1ba261=_0x336ca1;_0x21cda0=0xc8;}else{_0x21cda0=0xce;}_0x60b04a[_0x25d8('0x17')](_0x21cda0);return _0x60b04a[_0x25d8('0x1d')](_0x25d8('0x1e'),_0x54f626+'-'+_0x1ba261+'/'+_0x336ca1)[_0x25d8('0x1f')](_0x94c33a);}return null;};}function patchUpdates(_0x12629c){return function(_0x3a0215){try{jsonpatch[_0x25d8('0x20')](_0x3a0215,_0x12629c,!![]);}catch(_0x9781cc){return BPromise['reject'](_0x9781cc);}return _0x3a0215[_0x25d8('0x21')]();};}function saveUpdates(_0x583d8d,_0x49857e){return function(_0x25ad47){if(_0x25ad47){return _0x25ad47[_0x25d8('0x22')](_0x583d8d)[_0x25d8('0x23')](function(_0xa1eb15){return _0xa1eb15;});}return null;};}function removeEntity(_0x2ed6ae,_0x3c7973){return function(_0x30aa8b){if(_0x30aa8b){return _0x30aa8b['destroy']()[_0x25d8('0x23')](function(){_0x2ed6ae['status'](0xcc)[_0x25d8('0x18')]();});}};}function handleEntityNotFound(_0x32cea7,_0x2fc0db){return function(_0x320dd8){if(!_0x320dd8){_0x32cea7[_0x25d8('0x16')](0x194);}return _0x320dd8;};}function handleError(_0x37dd02,_0x311da3){_0x311da3=_0x311da3||0x1f4;return function(_0x2f295d){logger[_0x25d8('0x24')](_0x2f295d['stack']);if(_0x2f295d[_0x25d8('0x25')]){delete _0x2f295d[_0x25d8('0x25')];}_0x37dd02[_0x25d8('0x17')](_0x311da3)[_0x25d8('0x26')](_0x2f295d);};}exports['index']=function(_0x5af26c,_0x4e87d3){var _0x57c331={},_0x221f37={},_0x305c11={'count':0x0,'rows':[]};var _0x4b3c2f=_['map'](db[_0x25d8('0x27')][_0x25d8('0x28')],function(_0x5112a8){return{'name':_0x5112a8[_0x25d8('0x29')],'type':_0x5112a8[_0x25d8('0x2a')]['key']};});_0x221f37[_0x25d8('0x2b')]=_['map'](_0x4b3c2f,'name');_0x221f37[_0x25d8('0x2c')]=_[_0x25d8('0x2d')](_0x5af26c[_0x25d8('0x2c')]);_0x221f37[_0x25d8('0x2e')]=_[_0x25d8('0x2f')](_0x221f37[_0x25d8('0x2b')],_0x221f37[_0x25d8('0x2c')]);_0x57c331['attributes']=_[_0x25d8('0x2f')](_0x221f37['model'],qs[_0x25d8('0x30')](_0x5af26c[_0x25d8('0x2c')][_0x25d8('0x30')]));_0x57c331[_0x25d8('0x31')]=_0x57c331[_0x25d8('0x31')][_0x25d8('0x32')]?_0x57c331[_0x25d8('0x31')]:_0x221f37[_0x25d8('0x2b')];if(!_0x5af26c['query'][_0x25d8('0x33')](_0x25d8('0x34'))){_0x57c331[_0x25d8('0x1b')]=qs[_0x25d8('0x1b')](_0x5af26c[_0x25d8('0x2c')]['limit']);_0x57c331[_0x25d8('0x19')]=qs[_0x25d8('0x19')](_0x5af26c['query']['offset']);}_0x57c331[_0x25d8('0x35')]=qs[_0x25d8('0x36')](_0x5af26c[_0x25d8('0x2c')]['sort']);_0x57c331[_0x25d8('0x37')]=qs[_0x25d8('0x2e')](_['pick'](_0x5af26c['query'],_0x221f37[_0x25d8('0x2e')]),_0x4b3c2f);if(_0x5af26c['query'][_0x25d8('0x38')]){_0x57c331[_0x25d8('0x37')]=_[_0x25d8('0x39')](_0x57c331[_0x25d8('0x37')],{'$or':_[_0x25d8('0x3a')](_0x4b3c2f,function(_0x4eb4d6){if(_0x4eb4d6['type']!==_0x25d8('0x3b')){var _0x3b00c8={};_0x3b00c8[_0x4eb4d6[_0x25d8('0x25')]]={'$like':'%'+_0x5af26c[_0x25d8('0x2c')][_0x25d8('0x38')]+'%'};return _0x3b00c8;}})});}_0x57c331=_[_0x25d8('0x39')]({},_0x57c331,_0x5af26c[_0x25d8('0x3c')]);var _0x3c7287={'where':_0x57c331[_0x25d8('0x37')]};return db[_0x25d8('0x27')]['count'](_0x3c7287)[_0x25d8('0x23')](function(_0x5b3df2){_0x305c11[_0x25d8('0x1c')]=_0x5b3df2;if(_0x5af26c[_0x25d8('0x2c')][_0x25d8('0x3d')]){_0x57c331[_0x25d8('0x3e')]=[{'all':!![]}];}return db[_0x25d8('0x27')][_0x25d8('0x3f')](_0x57c331);})[_0x25d8('0x23')](function(_0x36cb13){_0x305c11['rows']=_0x36cb13;return _0x305c11;})[_0x25d8('0x23')](respondWithFilteredResult(_0x4e87d3,_0x57c331))[_0x25d8('0x40')](handleError(_0x4e87d3,null));};exports[_0x25d8('0x41')]=function(_0x3e9f82,_0x30a3f0){var _0x2b0903={'raw':!![],'where':{'id':_0x3e9f82[_0x25d8('0x42')]['id']}},_0x3fab03={};_0x3fab03['model']=_[_0x25d8('0x2d')](db[_0x25d8('0x27')][_0x25d8('0x28')]);_0x3fab03[_0x25d8('0x2c')]=_['keys'](_0x3e9f82[_0x25d8('0x2c')]);_0x3fab03[_0x25d8('0x2e')]=_[_0x25d8('0x2f')](_0x3fab03['model'],_0x3fab03['query']);_0x2b0903[_0x25d8('0x31')]=_[_0x25d8('0x2f')](_0x3fab03['model'],qs['fields'](_0x3e9f82['query'][_0x25d8('0x30')]));_0x2b0903[_0x25d8('0x31')]=_0x2b0903[_0x25d8('0x31')][_0x25d8('0x32')]?_0x2b0903[_0x25d8('0x31')]:_0x3fab03['model'];if(_0x3e9f82[_0x25d8('0x2c')][_0x25d8('0x3d')]){_0x2b0903['include']=[{'all':!![]}];}_0x2b0903=_[_0x25d8('0x39')]({},_0x2b0903,_0x3e9f82[_0x25d8('0x3c')]);return db[_0x25d8('0x27')][_0x25d8('0x43')](_0x2b0903)[_0x25d8('0x23')](handleEntityNotFound(_0x30a3f0,null))[_0x25d8('0x23')](respondWithResult(_0x30a3f0,null))[_0x25d8('0x40')](handleError(_0x30a3f0,null));};exports[_0x25d8('0x44')]=function(_0x480085,_0x37664d){return db[_0x25d8('0x27')]['create'](_0x480085['body'],{})[_0x25d8('0x23')](respondWithResult(_0x37664d,0xc9))['catch'](handleError(_0x37664d,null));};exports['update']=function(_0x326f12,_0x368e4f){if(_0x326f12['body']['id']){delete _0x326f12['body']['id'];}return db[_0x25d8('0x27')][_0x25d8('0x43')]({'where':{'id':_0x326f12[_0x25d8('0x42')]['id']}})[_0x25d8('0x23')](handleEntityNotFound(_0x368e4f,null))[_0x25d8('0x23')](saveUpdates(_0x326f12['body'],null))[_0x25d8('0x23')](respondWithResult(_0x368e4f,null))[_0x25d8('0x40')](handleError(_0x368e4f,null));};exports[_0x25d8('0x45')]=function(_0x33ea21,_0x32ad25){return db['VtigerField'][_0x25d8('0x43')]({'where':{'id':_0x33ea21[_0x25d8('0x42')]['id']}})['then'](handleEntityNotFound(_0x32ad25,null))[_0x25d8('0x23')](removeEntity(_0x32ad25,null))[_0x25d8('0x40')](handleError(_0x32ad25,null));};
\ No newline at end of file