Built motion from commit (unavailable).|2.5.28
[motion2.git] / server / api / cmHopperFinal / cmHopperFinal.controller.js
index 131d49a..645931f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5c12=['state\x20=\x20?','calleridnum','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','status','json','count','limit','set','Content-Range','apply','reject','save','update','then','destroy','end','sendStatus','stack','name','send','index','map','rawAttributes','fieldName','type','key','model','query','keys','intersection','attributes','fields','length','hasOwnProperty','nolimit','offset','order','sort','where','filters','pick','filter','merge','VIRTUAL','CmHopperFinal','includeAll','findAll','show','params','include','find','catch','describe','body','uniqueid','sequelize','literal','`state`\x20=\x200,\x201,\x20null','noSuchContacts','COUNT','`state`\x20=\x203,\x201,\x20null','`state`\x20=\x205,\x201,\x20null','`state`\x20=\x208,\x201,\x20null','dropContacts','`state`\x20=\x2011\x20,\x201,\x20null','abandonedContacts','`state`\x20=\x2022,\x201,\x20null','reCallContacts','`state`\x20=\x2019,\x201,\x20null','answeringMachine','countContactsIvrCampaignHopperFinal','noAnswerContacts','busyContacts','congestionContacts','`state`\x20=\x2010\x20,\x201,\x20null','moveContactsQueueCampaignHopperFinal','insert','cm_hopper','phone','scheduledAt','ContactId','VoiceQueueId','createdAt','updatedAt','field','ANY_VALUE(calleridnum)','NOW()','ANY_VALUE(ContactId)','ANY_VALUE(ListId)','ListId','ANY_VALUE(VoiceQueueId)','from','cm_hopper_final','VoiceQueueId\x20=\x20?','state','calleridnum\x20IS\x20NOT\x20NULL','select','toString','calleridnum\x20NOT\x20IN\x20(?)','state\x20=\x204','group','moveContactsIvrCampaignHopperFinal','Campaign','into','CampaignId','ANY_VALUE(CampaignId)','CampaignId\x20=\x20?'];(function(_0x3ed1a5,_0x329f99){var _0x1e0a0b=function(_0x2089ea){while(--_0x2089ea){_0x3ed1a5['push'](_0x3ed1a5['shift']());}};_0x1e0a0b(++_0x329f99);}(_0x5c12,0x188));var _0x25c1=function(_0x3ef8f7,_0x35359a){_0x3ef8f7=_0x3ef8f7-0x0;var _0x3b097e=_0x5c12[_0x3ef8f7];return _0x3b097e;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x25c1('0x0'));var rimraf=require(_0x25c1('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x25c1('0x2'));var rp=require(_0x25c1('0x3'));var moment=require(_0x25c1('0x4'));var BPromise=require(_0x25c1('0x5'));var Mustache=require(_0x25c1('0x6'));var util=require(_0x25c1('0x7'));var path=require(_0x25c1('0x8'));var sox=require('sox');var csv=require(_0x25c1('0x9'));var ejs=require(_0x25c1('0xa'));var fs=require('fs');var _=require(_0x25c1('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x25c1('0xc'));var deskjs=require(_0x25c1('0xd'));var toCsv=require(_0x25c1('0x9'));var querystring=require(_0x25c1('0xe'));var Papa=require(_0x25c1('0xf'));var Redis=require('ioredis');var authService=require(_0x25c1('0x10'));var qs=require(_0x25c1('0x11'));var as=require(_0x25c1('0x12'));var hardwareService=require(_0x25c1('0x13'));var logger=require(_0x25c1('0x14'))('api');var utils=require(_0x25c1('0x15'));var config=require(_0x25c1('0x16'));var licenseUtil=require('../../config/license/util');var db=require(_0x25c1('0x17'))['db'];function respondWithStatusCode(_0x209af5,_0x323d3c){_0x323d3c=_0x323d3c||0xcc;return function(_0x329ba9){if(_0x329ba9){return _0x209af5['sendStatus'](_0x323d3c);}return _0x209af5['status'](_0x323d3c)['end']();};}function respondWithResult(_0x54f6f4,_0x3ef429){_0x3ef429=_0x3ef429||0xc8;return function(_0x1412ed){if(_0x1412ed){return _0x54f6f4[_0x25c1('0x18')](_0x3ef429)[_0x25c1('0x19')](_0x1412ed);}};}function respondWithFilteredResult(_0x17a032,_0x4ea926){return function(_0x4638f0){if(_0x4638f0){var _0x55b62d=_0x4638f0[_0x25c1('0x1a')],_0x5d631e=_0x4ea926['offset'],_0x5b852a=_0x4ea926['offset']+_0x4ea926[_0x25c1('0x1b')],_0x284712;if(_0x5b852a>=_0x55b62d){_0x5b852a=_0x55b62d;_0x284712=0xc8;}else{_0x284712=0xce;}_0x17a032['status'](_0x284712);return _0x17a032[_0x25c1('0x1c')](_0x25c1('0x1d'),_0x5d631e+'-'+_0x5b852a+'/'+_0x55b62d)['json'](_0x4638f0);}return null;};}function patchUpdates(_0x4dd4f3){return function(_0x542768){try{jsonpatch[_0x25c1('0x1e')](_0x542768,_0x4dd4f3,!![]);}catch(_0x3d3149){return BPromise[_0x25c1('0x1f')](_0x3d3149);}return _0x542768[_0x25c1('0x20')]();};}function saveUpdates(_0x481c12,_0x119639){return function(_0x9f54e3){if(_0x9f54e3){return _0x9f54e3[_0x25c1('0x21')](_0x481c12)[_0x25c1('0x22')](function(_0x517a46){return _0x517a46;});}return null;};}function removeEntity(_0x4c3259,_0x2a8a84){return function(_0xac3335){if(_0xac3335){return _0xac3335[_0x25c1('0x23')]()[_0x25c1('0x22')](function(){_0x4c3259[_0x25c1('0x18')](0xcc)[_0x25c1('0x24')]();});}};}function handleEntityNotFound(_0x2ba595,_0x324ea9){return function(_0x14ffd9){if(!_0x14ffd9){_0x2ba595[_0x25c1('0x25')](0x194);}return _0x14ffd9;};}function handleError(_0x2f78dd,_0x284daa){_0x284daa=_0x284daa||0x1f4;return function(_0x399d72){logger['error'](_0x399d72[_0x25c1('0x26')]);if(_0x399d72[_0x25c1('0x27')]){delete _0x399d72[_0x25c1('0x27')];}_0x2f78dd[_0x25c1('0x18')](_0x284daa)[_0x25c1('0x28')](_0x399d72);};}exports[_0x25c1('0x29')]=function(_0x5ad776,_0x17c924){var _0x428ce8={},_0x6cb14f={},_0x38c1d5={'count':0x0,'rows':[]};var _0x11c0ae=_[_0x25c1('0x2a')](db['CmHopperFinal'][_0x25c1('0x2b')],function(_0x478f1e){return{'name':_0x478f1e[_0x25c1('0x2c')],'type':_0x478f1e[_0x25c1('0x2d')][_0x25c1('0x2e')]};});_0x6cb14f[_0x25c1('0x2f')]=_[_0x25c1('0x2a')](_0x11c0ae,_0x25c1('0x27'));_0x6cb14f[_0x25c1('0x30')]=_[_0x25c1('0x31')](_0x5ad776[_0x25c1('0x30')]);_0x6cb14f['filters']=_[_0x25c1('0x32')](_0x6cb14f['model'],_0x6cb14f['query']);_0x428ce8[_0x25c1('0x33')]=_[_0x25c1('0x32')](_0x6cb14f['model'],qs[_0x25c1('0x34')](_0x5ad776['query'][_0x25c1('0x34')]));_0x428ce8['attributes']=_0x428ce8[_0x25c1('0x33')][_0x25c1('0x35')]?_0x428ce8[_0x25c1('0x33')]:_0x6cb14f[_0x25c1('0x2f')];if(!_0x5ad776[_0x25c1('0x30')][_0x25c1('0x36')](_0x25c1('0x37'))){_0x428ce8[_0x25c1('0x1b')]=qs['limit'](_0x5ad776[_0x25c1('0x30')]['limit']);_0x428ce8[_0x25c1('0x38')]=qs['offset'](_0x5ad776[_0x25c1('0x30')][_0x25c1('0x38')]);}_0x428ce8[_0x25c1('0x39')]=qs[_0x25c1('0x3a')](_0x5ad776[_0x25c1('0x30')][_0x25c1('0x3a')]);_0x428ce8[_0x25c1('0x3b')]=qs[_0x25c1('0x3c')](_[_0x25c1('0x3d')](_0x5ad776[_0x25c1('0x30')],_0x6cb14f[_0x25c1('0x3c')]),_0x11c0ae);if(_0x5ad776[_0x25c1('0x30')][_0x25c1('0x3e')]){_0x428ce8[_0x25c1('0x3b')]=_[_0x25c1('0x3f')](_0x428ce8[_0x25c1('0x3b')],{'$or':_[_0x25c1('0x2a')](_0x11c0ae,function(_0x30b1d7){if(_0x30b1d7[_0x25c1('0x2d')]!==_0x25c1('0x40')){var _0x5c6d45={};_0x5c6d45[_0x30b1d7[_0x25c1('0x27')]]={'$like':'%'+_0x5ad776[_0x25c1('0x30')]['filter']+'%'};return _0x5c6d45;}})});}_0x428ce8=_[_0x25c1('0x3f')]({},_0x428ce8,_0x5ad776['options']);var _0x32b3a4={'where':_0x428ce8['where']};return db[_0x25c1('0x41')][_0x25c1('0x1a')](_0x32b3a4)[_0x25c1('0x22')](function(_0x3d6135){_0x38c1d5[_0x25c1('0x1a')]=_0x3d6135;if(_0x5ad776['query'][_0x25c1('0x42')]){_0x428ce8['include']=[{'all':!![]}];}return db[_0x25c1('0x41')][_0x25c1('0x43')](_0x428ce8);})[_0x25c1('0x22')](function(_0x17fc23){_0x38c1d5['rows']=_0x17fc23;return _0x38c1d5;})['then'](respondWithFilteredResult(_0x17c924,_0x428ce8))['catch'](handleError(_0x17c924,null));};exports[_0x25c1('0x44')]=function(_0x2b4c57,_0x530967){var _0x198dfa={'raw':!![],'where':{'id':_0x2b4c57[_0x25c1('0x45')]['id']}},_0x58792d={};_0x58792d[_0x25c1('0x2f')]=_[_0x25c1('0x31')](db['CmHopperFinal']['rawAttributes']);_0x58792d['query']=_[_0x25c1('0x31')](_0x2b4c57[_0x25c1('0x30')]);_0x58792d['filters']=_[_0x25c1('0x32')](_0x58792d[_0x25c1('0x2f')],_0x58792d[_0x25c1('0x30')]);_0x198dfa['attributes']=_['intersection'](_0x58792d['model'],qs['fields'](_0x2b4c57[_0x25c1('0x30')][_0x25c1('0x34')]));_0x198dfa['attributes']=_0x198dfa[_0x25c1('0x33')][_0x25c1('0x35')]?_0x198dfa[_0x25c1('0x33')]:_0x58792d[_0x25c1('0x2f')];if(_0x2b4c57[_0x25c1('0x30')][_0x25c1('0x42')]){_0x198dfa[_0x25c1('0x46')]=[{'all':!![]}];}_0x198dfa=_['merge']({},_0x198dfa,_0x2b4c57['options']);return db[_0x25c1('0x41')][_0x25c1('0x47')](_0x198dfa)[_0x25c1('0x22')](handleEntityNotFound(_0x530967,null))['then'](respondWithResult(_0x530967,null))[_0x25c1('0x48')](handleError(_0x530967,null));};exports[_0x25c1('0x49')]=function(_0x2dc05b,_0xa009d1){return db['CmHopperFinal'][_0x25c1('0x49')]()[_0x25c1('0x22')](respondWithResult(_0xa009d1,null))[_0x25c1('0x48')](handleError(_0xa009d1,null));};exports[_0x25c1('0x21')]=function(_0x5d2ecc,_0x59e96b){if(_0x5d2ecc[_0x25c1('0x4a')][_0x25c1('0x4b')]){delete _0x5d2ecc[_0x25c1('0x4a')][_0x25c1('0x4b')];}return db['CmHopperFinal'][_0x25c1('0x47')]({'where':{'uniqueid':_0x5d2ecc[_0x25c1('0x45')]['id']}})['then'](handleEntityNotFound(_0x59e96b,null))[_0x25c1('0x22')](saveUpdates(_0x5d2ecc[_0x25c1('0x4a')],null))[_0x25c1('0x22')](respondWithResult(_0x59e96b,null))[_0x25c1('0x48')](handleError(_0x59e96b,null));};exports['countContactsQueueCampaignHopperFinal']=function(_0x4b2e06,_0x5034ba,_0x3e8e2c){return db[_0x25c1('0x41')]['findAll']({'raw':![],'where':{'VoiceQueueId':_0x4b2e06[_0x25c1('0x45')]['id']},'attributes':[[db[_0x25c1('0x4c')]['fn']('COUNT',db[_0x25c1('0x4c')]['fn']('IF',db[_0x25c1('0x4c')][_0x25c1('0x4d')](_0x25c1('0x4e')))),_0x25c1('0x4f')],[db[_0x25c1('0x4c')]['fn'](_0x25c1('0x50'),db['sequelize']['fn']('IF',db['sequelize']['literal'](_0x25c1('0x51')))),'noAnswerContacts'],[db[_0x25c1('0x4c')]['fn'](_0x25c1('0x50'),db[_0x25c1('0x4c')]['fn']('IF',db[_0x25c1('0x4c')][_0x25c1('0x4d')](_0x25c1('0x52')))),'busyContacts'],[db[_0x25c1('0x4c')]['fn'](_0x25c1('0x50'),db[_0x25c1('0x4c')]['fn']('IF',db[_0x25c1('0x4c')][_0x25c1('0x4d')](_0x25c1('0x53')))),'congestionContacts'],[db[_0x25c1('0x4c')]['fn'](_0x25c1('0x50'),db[_0x25c1('0x4c')]['fn']('IF',db[_0x25c1('0x4c')][_0x25c1('0x4d')]('`state`\x20=\x2010\x20,\x201,\x20null'))),_0x25c1('0x54')],[db[_0x25c1('0x4c')]['fn']('COUNT',db[_0x25c1('0x4c')]['fn']('IF',db[_0x25c1('0x4c')][_0x25c1('0x4d')](_0x25c1('0x55')))),_0x25c1('0x56')],[db[_0x25c1('0x4c')]['fn']('COUNT',db[_0x25c1('0x4c')]['fn']('IF',db[_0x25c1('0x4c')][_0x25c1('0x4d')](_0x25c1('0x57')))),_0x25c1('0x58')],[db[_0x25c1('0x4c')]['fn'](_0x25c1('0x50'),db[_0x25c1('0x4c')]['fn']('IF',db[_0x25c1('0x4c')][_0x25c1('0x4d')](_0x25c1('0x59')))),_0x25c1('0x5a')]]})[_0x25c1('0x22')](handleEntityNotFound(_0x5034ba,null))[_0x25c1('0x22')](respondWithResult(_0x5034ba,null))['catch'](handleError(_0x5034ba,null));};exports[_0x25c1('0x5b')]=function(_0x247983,_0x326bf3,_0x7a1d7a){return db[_0x25c1('0x41')][_0x25c1('0x43')]({'raw':![],'where':{'CampaignId':_0x247983[_0x25c1('0x45')]['id']},'attributes':[[db['sequelize']['fn'](_0x25c1('0x50'),db['sequelize']['fn']('IF',db[_0x25c1('0x4c')][_0x25c1('0x4d')](_0x25c1('0x4e')))),_0x25c1('0x4f')],[db[_0x25c1('0x4c')]['fn'](_0x25c1('0x50'),db[_0x25c1('0x4c')]['fn']('IF',db[_0x25c1('0x4c')]['literal'](_0x25c1('0x51')))),_0x25c1('0x5c')],[db[_0x25c1('0x4c')]['fn'](_0x25c1('0x50'),db[_0x25c1('0x4c')]['fn']('IF',db[_0x25c1('0x4c')][_0x25c1('0x4d')]('`state`\x20=\x205,\x201,\x20null'))),_0x25c1('0x5d')],[db['sequelize']['fn']('COUNT',db['sequelize']['fn']('IF',db[_0x25c1('0x4c')][_0x25c1('0x4d')](_0x25c1('0x53')))),_0x25c1('0x5e')],[db[_0x25c1('0x4c')]['fn']('COUNT',db[_0x25c1('0x4c')]['fn']('IF',db['sequelize'][_0x25c1('0x4d')](_0x25c1('0x5f')))),_0x25c1('0x54')],[db[_0x25c1('0x4c')]['fn'](_0x25c1('0x50'),db[_0x25c1('0x4c')]['fn']('IF',db[_0x25c1('0x4c')]['literal'](_0x25c1('0x55')))),_0x25c1('0x56')],[db[_0x25c1('0x4c')]['fn'](_0x25c1('0x50'),db[_0x25c1('0x4c')]['fn']('IF',db[_0x25c1('0x4c')]['literal'](_0x25c1('0x57')))),'reCallContacts'],[db[_0x25c1('0x4c')]['fn']('COUNT',db['sequelize']['fn']('IF',db[_0x25c1('0x4c')]['literal']('`state`\x20=\x2019,\x201,\x20null'))),'answeringMachine']]})['then'](handleEntityNotFound(_0x326bf3,null))[_0x25c1('0x22')](respondWithResult(_0x326bf3,null))['catch'](handleError(_0x326bf3,null));};exports[_0x25c1('0x60')]=function(_0x17dd76,_0xf61bdd,_0x172e6c){return db['VoiceQueue']['find']({'where':{'id':_0x17dd76[_0x25c1('0x45')]['id']}})[_0x25c1('0x22')](handleEntityNotFound(_0xf61bdd,null))['then'](function(_0x21c929){var _0x32125f;if(_0x21c929){_0x32125f=squel[_0x25c1('0x61')]()['into'](_0x25c1('0x62'))['fromQuery']([_0x25c1('0x63'),_0x25c1('0x64'),_0x25c1('0x65'),'ListId',_0x25c1('0x66'),_0x25c1('0x67'),_0x25c1('0x68')],squel['select']()[_0x25c1('0x69')](_0x25c1('0x6a'),_0x25c1('0x63'))[_0x25c1('0x69')](_0x25c1('0x6b'),_0x25c1('0x64'))[_0x25c1('0x69')](_0x25c1('0x6c'),_0x25c1('0x65'))[_0x25c1('0x69')](_0x25c1('0x6d'),_0x25c1('0x6e'))[_0x25c1('0x69')](_0x25c1('0x6f'),'VoiceQueueId')[_0x25c1('0x69')](_0x25c1('0x6b'),_0x25c1('0x67'))[_0x25c1('0x69')](_0x25c1('0x6b'),_0x25c1('0x68'))[_0x25c1('0x70')](_0x25c1('0x71'))[_0x25c1('0x3b')](_0x25c1('0x72'),_0x17dd76[_0x25c1('0x45')]['id']['toString']())[_0x25c1('0x3b')]('state\x20=\x20?',_0x17dd76[_0x25c1('0x4a')][_0x25c1('0x73')]['toString']())[_0x25c1('0x3b')](_0x25c1('0x74'))[_0x25c1('0x3b')]('calleridnum\x20NOT\x20IN\x20(?)',squel[_0x25c1('0x75')]()[_0x25c1('0x69')]('phone')[_0x25c1('0x70')](_0x25c1('0x62'))[_0x25c1('0x3b')]('VoiceQueueId\x20=\x20?',_0x17dd76[_0x25c1('0x45')]['id'][_0x25c1('0x76')]()))[_0x25c1('0x3b')](_0x25c1('0x77'),squel['select']()[_0x25c1('0x69')]('calleridnum')[_0x25c1('0x70')](_0x25c1('0x71'))['where'](_0x25c1('0x72'),_0x17dd76['params']['id'][_0x25c1('0x76')]())[_0x25c1('0x3b')](_0x25c1('0x78')))[_0x25c1('0x79')](_0x25c1('0x65')))[_0x25c1('0x76')]();return db[_0x25c1('0x4c')]['query'](_0x32125f);}return[];})['then'](respondWithResult(_0xf61bdd,null))[_0x25c1('0x48')](handleError(_0xf61bdd,null));};exports[_0x25c1('0x7a')]=function(_0x5c867e,_0x1b2a54,_0xb8449f){return db[_0x25c1('0x7b')]['find']({'where':{'id':_0x5c867e['params']['id']}})[_0x25c1('0x22')](handleEntityNotFound(_0x1b2a54,null))['then'](function(_0x15f250){var _0x3c0f22;if(_0x15f250){_0x3c0f22=squel[_0x25c1('0x61')]()[_0x25c1('0x7c')]('cm_hopper')['fromQuery']([_0x25c1('0x63'),'scheduledAt',_0x25c1('0x65'),_0x25c1('0x6e'),_0x25c1('0x7d'),'createdAt',_0x25c1('0x68')],squel[_0x25c1('0x75')]()[_0x25c1('0x69')](_0x25c1('0x6a'),_0x25c1('0x63'))[_0x25c1('0x69')](_0x25c1('0x6b'),_0x25c1('0x64'))[_0x25c1('0x69')](_0x25c1('0x6c'),_0x25c1('0x65'))['field'](_0x25c1('0x6d'),'ListId')[_0x25c1('0x69')](_0x25c1('0x7e'),_0x25c1('0x7d'))[_0x25c1('0x69')](_0x25c1('0x6b'),_0x25c1('0x67'))[_0x25c1('0x69')]('NOW()','updatedAt')[_0x25c1('0x70')]('cm_hopper_final')['where'](_0x25c1('0x7f'),_0x5c867e[_0x25c1('0x45')]['id'][_0x25c1('0x76')]())[_0x25c1('0x3b')](_0x25c1('0x80'),_0x5c867e[_0x25c1('0x4a')]['state'][_0x25c1('0x76')]())[_0x25c1('0x3b')](_0x25c1('0x74'))[_0x25c1('0x3b')]('calleridnum\x20NOT\x20IN\x20(?)',squel[_0x25c1('0x75')]()[_0x25c1('0x69')](_0x25c1('0x63'))[_0x25c1('0x70')]('cm_hopper')[_0x25c1('0x3b')](_0x25c1('0x7f'),_0x5c867e[_0x25c1('0x45')]['id'][_0x25c1('0x76')]()))[_0x25c1('0x3b')]('calleridnum\x20NOT\x20IN\x20(?)',squel[_0x25c1('0x75')]()['field'](_0x25c1('0x81'))['from'](_0x25c1('0x71'))[_0x25c1('0x3b')](_0x25c1('0x7f'),_0x5c867e['params']['id'][_0x25c1('0x76')]())['where'](_0x25c1('0x78')))['group'](_0x25c1('0x65')))[_0x25c1('0x76')]();return db[_0x25c1('0x4c')][_0x25c1('0x30')](_0x3c0f22);}return[];})[_0x25c1('0x22')](respondWithResult(_0x1b2a54,null))[_0x25c1('0x48')](handleError(_0x1b2a54,null));};exports['checkContactHopper']=function(_0x2ceb00,_0x1f363c,_0x2ec1b5){return db['CmHopper']['findOne']({'where':{'VoiceQueueId':_0x2ceb00[_0x25c1('0x4a')][_0x25c1('0x66')],'CampaignId':_0x2ceb00[_0x25c1('0x4a')][_0x25c1('0x7d')],'ContactId':_0x2ceb00[_0x25c1('0x4a')][_0x25c1('0x65')]}})[_0x25c1('0x22')](handleEntityNotFound(_0x1f363c,null))['then'](function(_0x5aa491){if(_0x5aa491){return _0x5aa491;}return null;})['then'](respondWithResult(_0x1f363c,null))['catch'](handleError(_0x1f363c,null));};
\ No newline at end of file
+var _0xbf24=['end','sendStatus','error','stack','name','send','map','rawAttributes','fieldName','type','query','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filter','merge','VIRTUAL','options','include','CmHopperFinal','findAll','rows','catch','show','params','keys','includeAll','find','describe','update','uniqueid','body','countContactsQueueCampaignHopperFinal','sequelize','COUNT','literal','`state`\x20=\x200,\x201,\x20null','noSuchContacts','noAnswerContacts','`state`\x20=\x205,\x201,\x20null','congestionContacts','`state`\x20=\x2010\x20,\x201,\x20null','dropContacts','`state`\x20=\x2011\x20,\x201,\x20null','`state`\x20=\x2022,\x201,\x20null','`state`\x20=\x2019,\x201,\x20null','answeringMachine','countContactsIvrCampaignHopperFinal','`state`\x20=\x203,\x201,\x20null','busyContacts','reCallContacts','moveContactsQueueCampaignHopperFinal','VoiceQueue','insert','into','cm_hopper','fromQuery','phone','scheduledAt','ContactId','ListId','VoiceQueueId','select','field','ANY_VALUE(calleridnum)','ANY_VALUE(ContactId)','ANY_VALUE(ListId)','ANY_VALUE(VoiceQueueId)','createdAt','NOW()','updatedAt','from','cm_hopper_final','VoiceQueueId\x20=\x20?','toString','state\x20=\x20?','state','calleridnum\x20IS\x20NOT\x20NULL','calleridnum\x20NOT\x20IN\x20(?)','state\x20=\x204','group','Campaign','ANY_VALUE(CampaignId)','CampaignId','CampaignId\x20=\x20?','calleridnum','eml-format','rimraf','zip-dir','moment','bluebird','mustache','util','sox','to-csv','ejs','fs-extra','lodash','squel','jsforce','desk.js','querystring','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/license/util','../../mysqldb','status','json','offset','limit','Content-Range','reject','save','destroy','then'];(function(_0x16db8b,_0xca7d28){var _0x5ba017=function(_0x35b933){while(--_0x35b933){_0x16db8b['push'](_0x16db8b['shift']());}};_0x5ba017(++_0xca7d28);}(_0xbf24,0x155));var _0x4bf2=function(_0x515640,_0x27b10e){_0x515640=_0x515640-0x0;var _0x5328b=_0xbf24[_0x515640];return _0x5328b;};'use strict';var emlformat=require(_0x4bf2('0x0'));var rimraf=require(_0x4bf2('0x1'));var zipdir=require(_0x4bf2('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x4bf2('0x3'));var BPromise=require(_0x4bf2('0x4'));var Mustache=require(_0x4bf2('0x5'));var util=require(_0x4bf2('0x6'));var path=require('path');var sox=require(_0x4bf2('0x7'));var csv=require(_0x4bf2('0x8'));var ejs=require(_0x4bf2('0x9'));var fs=require('fs');var fs_extra=require(_0x4bf2('0xa'));var _=require(_0x4bf2('0xb'));var squel=require(_0x4bf2('0xc'));var crypto=require('crypto');var jsforce=require(_0x4bf2('0xd'));var deskjs=require(_0x4bf2('0xe'));var toCsv=require(_0x4bf2('0x8'));var querystring=require(_0x4bf2('0xf'));var Papa=require('papaparse');var Redis=require(_0x4bf2('0x10'));var authService=require(_0x4bf2('0x11'));var qs=require('../../components/parsers/qs');var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0x4bf2('0x12'));var logger=require('../../config/logger')(_0x4bf2('0x13'));var utils=require('../../config/utils');var config=require('../../config/environment');var licenseUtil=require(_0x4bf2('0x14'));var db=require(_0x4bf2('0x15'))['db'];function respondWithStatusCode(_0x5d5168,_0x238175){_0x238175=_0x238175||0xcc;return function(_0x57e9fa){if(_0x57e9fa){return _0x5d5168['sendStatus'](_0x238175);}return _0x5d5168['status'](_0x238175)['end']();};}function respondWithResult(_0x21f55a,_0x589d47){_0x589d47=_0x589d47||0xc8;return function(_0x5cc0f2){if(_0x5cc0f2){return _0x21f55a[_0x4bf2('0x16')](_0x589d47)[_0x4bf2('0x17')](_0x5cc0f2);}};}function respondWithFilteredResult(_0x5e7c5c,_0x13ea4f){return function(_0x453449){if(_0x453449){var _0x591dd4=_0x453449['count'],_0x331404=_0x13ea4f[_0x4bf2('0x18')],_0x37733e=_0x13ea4f['offset']+_0x13ea4f[_0x4bf2('0x19')],_0x392c64;if(_0x37733e>=_0x591dd4){_0x37733e=_0x591dd4;_0x392c64=0xc8;}else{_0x392c64=0xce;}_0x5e7c5c['status'](_0x392c64);return _0x5e7c5c['set'](_0x4bf2('0x1a'),_0x331404+'-'+_0x37733e+'/'+_0x591dd4)[_0x4bf2('0x17')](_0x453449);}return null;};}function patchUpdates(_0x4752ad){return function(_0x414417){try{jsonpatch['apply'](_0x414417,_0x4752ad,!![]);}catch(_0x3f4c44){return BPromise[_0x4bf2('0x1b')](_0x3f4c44);}return _0x414417[_0x4bf2('0x1c')]();};}function saveUpdates(_0x4ff45f,_0x5524d0){return function(_0x50e59b){if(_0x50e59b){return _0x50e59b['update'](_0x4ff45f)['then'](function(_0x1e340a){return _0x1e340a;});}return null;};}function removeEntity(_0x8172fd,_0x5d4d6f){return function(_0x23fa0d){if(_0x23fa0d){return _0x23fa0d[_0x4bf2('0x1d')]()[_0x4bf2('0x1e')](function(){_0x8172fd[_0x4bf2('0x16')](0xcc)[_0x4bf2('0x1f')]();});}};}function handleEntityNotFound(_0x19ae5a,_0x46e552){return function(_0x1cc435){if(!_0x1cc435){_0x19ae5a[_0x4bf2('0x20')](0x194);}return _0x1cc435;};}function handleError(_0x2eb5e4,_0x2c5503){_0x2c5503=_0x2c5503||0x1f4;return function(_0xc942a5){logger[_0x4bf2('0x21')](_0xc942a5[_0x4bf2('0x22')]);if(_0xc942a5[_0x4bf2('0x23')]){delete _0xc942a5[_0x4bf2('0x23')];}_0x2eb5e4['status'](_0x2c5503)[_0x4bf2('0x24')](_0xc942a5);};}exports['index']=function(_0x3882fc,_0xf4135f){var _0x23c55c={},_0x48cfb9={},_0x5b8153={'count':0x0,'rows':[]};var _0xf156a9=_[_0x4bf2('0x25')](db['CmHopperFinal'][_0x4bf2('0x26')],function(_0x4268b2){return{'name':_0x4268b2[_0x4bf2('0x27')],'type':_0x4268b2[_0x4bf2('0x28')]['key']};});_0x48cfb9['model']=_[_0x4bf2('0x25')](_0xf156a9,'name');_0x48cfb9[_0x4bf2('0x29')]=_['keys'](_0x3882fc['query']);_0x48cfb9[_0x4bf2('0x2a')]=_[_0x4bf2('0x2b')](_0x48cfb9[_0x4bf2('0x2c')],_0x48cfb9[_0x4bf2('0x29')]);_0x23c55c[_0x4bf2('0x2d')]=_[_0x4bf2('0x2b')](_0x48cfb9[_0x4bf2('0x2c')],qs[_0x4bf2('0x2e')](_0x3882fc['query'][_0x4bf2('0x2e')]));_0x23c55c[_0x4bf2('0x2d')]=_0x23c55c[_0x4bf2('0x2d')]['length']?_0x23c55c[_0x4bf2('0x2d')]:_0x48cfb9['model'];if(!_0x3882fc[_0x4bf2('0x29')][_0x4bf2('0x2f')](_0x4bf2('0x30'))){_0x23c55c[_0x4bf2('0x19')]=qs[_0x4bf2('0x19')](_0x3882fc['query']['limit']);_0x23c55c['offset']=qs[_0x4bf2('0x18')](_0x3882fc[_0x4bf2('0x29')][_0x4bf2('0x18')]);}_0x23c55c[_0x4bf2('0x31')]=qs[_0x4bf2('0x32')](_0x3882fc[_0x4bf2('0x29')][_0x4bf2('0x32')]);_0x23c55c[_0x4bf2('0x33')]=qs[_0x4bf2('0x2a')](_['pick'](_0x3882fc[_0x4bf2('0x29')],_0x48cfb9[_0x4bf2('0x2a')]),_0xf156a9);if(_0x3882fc[_0x4bf2('0x29')][_0x4bf2('0x34')]){_0x23c55c[_0x4bf2('0x33')]=_[_0x4bf2('0x35')](_0x23c55c[_0x4bf2('0x33')],{'$or':_['map'](_0xf156a9,function(_0x57940e){if(_0x57940e[_0x4bf2('0x28')]!==_0x4bf2('0x36')){var _0x4984f4={};_0x4984f4[_0x57940e[_0x4bf2('0x23')]]={'$like':'%'+_0x3882fc[_0x4bf2('0x29')]['filter']+'%'};return _0x4984f4;}})});}_0x23c55c=_[_0x4bf2('0x35')]({},_0x23c55c,_0x3882fc[_0x4bf2('0x37')]);var _0x4c5c18={'where':_0x23c55c[_0x4bf2('0x33')]};return db['CmHopperFinal']['count'](_0x4c5c18)[_0x4bf2('0x1e')](function(_0x58e75b){_0x5b8153['count']=_0x58e75b;if(_0x3882fc['query']['includeAll']){_0x23c55c[_0x4bf2('0x38')]=[{'all':!![]}];}return db[_0x4bf2('0x39')][_0x4bf2('0x3a')](_0x23c55c);})[_0x4bf2('0x1e')](function(_0x224d67){_0x5b8153[_0x4bf2('0x3b')]=_0x224d67;return _0x5b8153;})[_0x4bf2('0x1e')](respondWithFilteredResult(_0xf4135f,_0x23c55c))[_0x4bf2('0x3c')](handleError(_0xf4135f,null));};exports[_0x4bf2('0x3d')]=function(_0x4daab2,_0x55fe28){var _0x398f2f={'raw':!![],'where':{'id':_0x4daab2[_0x4bf2('0x3e')]['id']}},_0x508041={};_0x508041[_0x4bf2('0x2c')]=_[_0x4bf2('0x3f')](db[_0x4bf2('0x39')][_0x4bf2('0x26')]);_0x508041[_0x4bf2('0x29')]=_['keys'](_0x4daab2[_0x4bf2('0x29')]);_0x508041['filters']=_[_0x4bf2('0x2b')](_0x508041[_0x4bf2('0x2c')],_0x508041[_0x4bf2('0x29')]);_0x398f2f[_0x4bf2('0x2d')]=_[_0x4bf2('0x2b')](_0x508041[_0x4bf2('0x2c')],qs[_0x4bf2('0x2e')](_0x4daab2['query']['fields']));_0x398f2f['attributes']=_0x398f2f[_0x4bf2('0x2d')]['length']?_0x398f2f[_0x4bf2('0x2d')]:_0x508041[_0x4bf2('0x2c')];if(_0x4daab2[_0x4bf2('0x29')][_0x4bf2('0x40')]){_0x398f2f[_0x4bf2('0x38')]=[{'all':!![]}];}_0x398f2f=_[_0x4bf2('0x35')]({},_0x398f2f,_0x4daab2[_0x4bf2('0x37')]);return db[_0x4bf2('0x39')][_0x4bf2('0x41')](_0x398f2f)[_0x4bf2('0x1e')](handleEntityNotFound(_0x55fe28,null))[_0x4bf2('0x1e')](respondWithResult(_0x55fe28,null))[_0x4bf2('0x3c')](handleError(_0x55fe28,null));};exports[_0x4bf2('0x42')]=function(_0x4f472e,_0x4ac56d){return db['CmHopperFinal'][_0x4bf2('0x42')]()[_0x4bf2('0x1e')](respondWithResult(_0x4ac56d,null))[_0x4bf2('0x3c')](handleError(_0x4ac56d,null));};exports[_0x4bf2('0x43')]=function(_0x3eaaa4,_0x1c36cc){if(_0x3eaaa4['body'][_0x4bf2('0x44')]){delete _0x3eaaa4['body']['uniqueid'];}return db[_0x4bf2('0x39')][_0x4bf2('0x41')]({'where':{'uniqueid':_0x3eaaa4[_0x4bf2('0x3e')]['id']}})[_0x4bf2('0x1e')](handleEntityNotFound(_0x1c36cc,null))[_0x4bf2('0x1e')](saveUpdates(_0x3eaaa4[_0x4bf2('0x45')],null))[_0x4bf2('0x1e')](respondWithResult(_0x1c36cc,null))[_0x4bf2('0x3c')](handleError(_0x1c36cc,null));};exports[_0x4bf2('0x46')]=function(_0x382949,_0x499b72,_0xe4dd94){return db[_0x4bf2('0x39')][_0x4bf2('0x3a')]({'raw':![],'where':{'VoiceQueueId':_0x382949[_0x4bf2('0x3e')]['id']},'attributes':[[db[_0x4bf2('0x47')]['fn'](_0x4bf2('0x48'),db['sequelize']['fn']('IF',db['sequelize'][_0x4bf2('0x49')](_0x4bf2('0x4a')))),_0x4bf2('0x4b')],[db['sequelize']['fn']('COUNT',db[_0x4bf2('0x47')]['fn']('IF',db['sequelize'][_0x4bf2('0x49')]('`state`\x20=\x203,\x201,\x20null'))),_0x4bf2('0x4c')],[db[_0x4bf2('0x47')]['fn'](_0x4bf2('0x48'),db['sequelize']['fn']('IF',db[_0x4bf2('0x47')][_0x4bf2('0x49')](_0x4bf2('0x4d')))),'busyContacts'],[db[_0x4bf2('0x47')]['fn'](_0x4bf2('0x48'),db[_0x4bf2('0x47')]['fn']('IF',db[_0x4bf2('0x47')][_0x4bf2('0x49')]('`state`\x20=\x208,\x201,\x20null'))),_0x4bf2('0x4e')],[db[_0x4bf2('0x47')]['fn']('COUNT',db[_0x4bf2('0x47')]['fn']('IF',db[_0x4bf2('0x47')]['literal'](_0x4bf2('0x4f')))),_0x4bf2('0x50')],[db[_0x4bf2('0x47')]['fn'](_0x4bf2('0x48'),db[_0x4bf2('0x47')]['fn']('IF',db[_0x4bf2('0x47')][_0x4bf2('0x49')](_0x4bf2('0x51')))),'abandonedContacts'],[db[_0x4bf2('0x47')]['fn']('COUNT',db['sequelize']['fn']('IF',db[_0x4bf2('0x47')][_0x4bf2('0x49')](_0x4bf2('0x52')))),'reCallContacts'],[db[_0x4bf2('0x47')]['fn'](_0x4bf2('0x48'),db[_0x4bf2('0x47')]['fn']('IF',db[_0x4bf2('0x47')][_0x4bf2('0x49')](_0x4bf2('0x53')))),_0x4bf2('0x54')]]})[_0x4bf2('0x1e')](handleEntityNotFound(_0x499b72,null))[_0x4bf2('0x1e')](respondWithResult(_0x499b72,null))[_0x4bf2('0x3c')](handleError(_0x499b72,null));};exports[_0x4bf2('0x55')]=function(_0x1c4b95,_0x865326,_0x9d970e){return db['CmHopperFinal'][_0x4bf2('0x3a')]({'raw':![],'where':{'CampaignId':_0x1c4b95[_0x4bf2('0x3e')]['id']},'attributes':[[db[_0x4bf2('0x47')]['fn'](_0x4bf2('0x48'),db['sequelize']['fn']('IF',db[_0x4bf2('0x47')][_0x4bf2('0x49')]('`state`\x20=\x200,\x201,\x20null'))),_0x4bf2('0x4b')],[db[_0x4bf2('0x47')]['fn'](_0x4bf2('0x48'),db[_0x4bf2('0x47')]['fn']('IF',db[_0x4bf2('0x47')]['literal'](_0x4bf2('0x56')))),_0x4bf2('0x4c')],[db['sequelize']['fn'](_0x4bf2('0x48'),db[_0x4bf2('0x47')]['fn']('IF',db[_0x4bf2('0x47')][_0x4bf2('0x49')](_0x4bf2('0x4d')))),_0x4bf2('0x57')],[db[_0x4bf2('0x47')]['fn'](_0x4bf2('0x48'),db[_0x4bf2('0x47')]['fn']('IF',db[_0x4bf2('0x47')][_0x4bf2('0x49')]('`state`\x20=\x208,\x201,\x20null'))),_0x4bf2('0x4e')],[db[_0x4bf2('0x47')]['fn']('COUNT',db[_0x4bf2('0x47')]['fn']('IF',db[_0x4bf2('0x47')][_0x4bf2('0x49')](_0x4bf2('0x4f')))),'dropContacts'],[db['sequelize']['fn'](_0x4bf2('0x48'),db['sequelize']['fn']('IF',db[_0x4bf2('0x47')][_0x4bf2('0x49')]('`state`\x20=\x2011\x20,\x201,\x20null'))),'abandonedContacts'],[db['sequelize']['fn'](_0x4bf2('0x48'),db[_0x4bf2('0x47')]['fn']('IF',db[_0x4bf2('0x47')][_0x4bf2('0x49')](_0x4bf2('0x52')))),_0x4bf2('0x58')],[db['sequelize']['fn'](_0x4bf2('0x48'),db['sequelize']['fn']('IF',db['sequelize'][_0x4bf2('0x49')](_0x4bf2('0x53')))),_0x4bf2('0x54')]]})[_0x4bf2('0x1e')](handleEntityNotFound(_0x865326,null))[_0x4bf2('0x1e')](respondWithResult(_0x865326,null))[_0x4bf2('0x3c')](handleError(_0x865326,null));};exports[_0x4bf2('0x59')]=function(_0x35c204,_0x4d9df6,_0x480181){return db[_0x4bf2('0x5a')][_0x4bf2('0x41')]({'where':{'id':_0x35c204[_0x4bf2('0x3e')]['id']}})[_0x4bf2('0x1e')](handleEntityNotFound(_0x4d9df6,null))[_0x4bf2('0x1e')](function(_0x32d9e9){var _0x186047;if(_0x32d9e9){_0x186047=squel[_0x4bf2('0x5b')]()[_0x4bf2('0x5c')](_0x4bf2('0x5d'))[_0x4bf2('0x5e')]([_0x4bf2('0x5f'),_0x4bf2('0x60'),_0x4bf2('0x61'),_0x4bf2('0x62'),_0x4bf2('0x63'),'createdAt','updatedAt'],squel[_0x4bf2('0x64')]()[_0x4bf2('0x65')](_0x4bf2('0x66'),_0x4bf2('0x5f'))[_0x4bf2('0x65')]('NOW()',_0x4bf2('0x60'))[_0x4bf2('0x65')](_0x4bf2('0x67'),'ContactId')['field'](_0x4bf2('0x68'),_0x4bf2('0x62'))[_0x4bf2('0x65')](_0x4bf2('0x69'),_0x4bf2('0x63'))[_0x4bf2('0x65')]('NOW()',_0x4bf2('0x6a'))[_0x4bf2('0x65')](_0x4bf2('0x6b'),_0x4bf2('0x6c'))[_0x4bf2('0x6d')](_0x4bf2('0x6e'))[_0x4bf2('0x33')](_0x4bf2('0x6f'),_0x35c204[_0x4bf2('0x3e')]['id'][_0x4bf2('0x70')]())[_0x4bf2('0x33')](_0x4bf2('0x71'),_0x35c204[_0x4bf2('0x45')][_0x4bf2('0x72')][_0x4bf2('0x70')]())[_0x4bf2('0x33')](_0x4bf2('0x73'))['where'](_0x4bf2('0x74'),squel['select']()[_0x4bf2('0x65')](_0x4bf2('0x5f'))[_0x4bf2('0x6d')]('cm_hopper')[_0x4bf2('0x33')](_0x4bf2('0x6f'),_0x35c204[_0x4bf2('0x3e')]['id'][_0x4bf2('0x70')]()))[_0x4bf2('0x33')](_0x4bf2('0x74'),squel[_0x4bf2('0x64')]()[_0x4bf2('0x65')]('calleridnum')[_0x4bf2('0x6d')](_0x4bf2('0x6e'))['where'](_0x4bf2('0x6f'),_0x35c204[_0x4bf2('0x3e')]['id'][_0x4bf2('0x70')]())[_0x4bf2('0x33')](_0x4bf2('0x75')))[_0x4bf2('0x76')](_0x4bf2('0x61')))[_0x4bf2('0x70')]();return db[_0x4bf2('0x47')][_0x4bf2('0x29')](_0x186047);}return[];})[_0x4bf2('0x1e')](respondWithResult(_0x4d9df6,null))[_0x4bf2('0x3c')](handleError(_0x4d9df6,null));};exports['moveContactsIvrCampaignHopperFinal']=function(_0x59a7b0,_0x4c8106,_0x28d1d9){return db[_0x4bf2('0x77')][_0x4bf2('0x41')]({'where':{'id':_0x59a7b0['params']['id']}})[_0x4bf2('0x1e')](handleEntityNotFound(_0x4c8106,null))['then'](function(_0x132022){var _0x25490d;if(_0x132022){_0x25490d=squel[_0x4bf2('0x5b')]()[_0x4bf2('0x5c')](_0x4bf2('0x5d'))['fromQuery']([_0x4bf2('0x5f'),'scheduledAt',_0x4bf2('0x61'),_0x4bf2('0x62'),'CampaignId',_0x4bf2('0x6a'),'updatedAt'],squel['select']()[_0x4bf2('0x65')](_0x4bf2('0x66'),_0x4bf2('0x5f'))[_0x4bf2('0x65')](_0x4bf2('0x6b'),_0x4bf2('0x60'))['field']('ANY_VALUE(ContactId)',_0x4bf2('0x61'))['field'](_0x4bf2('0x68'),_0x4bf2('0x62'))[_0x4bf2('0x65')](_0x4bf2('0x78'),_0x4bf2('0x79'))['field'](_0x4bf2('0x6b'),_0x4bf2('0x6a'))['field'](_0x4bf2('0x6b'),_0x4bf2('0x6c'))[_0x4bf2('0x6d')](_0x4bf2('0x6e'))[_0x4bf2('0x33')](_0x4bf2('0x7a'),_0x59a7b0[_0x4bf2('0x3e')]['id'][_0x4bf2('0x70')]())[_0x4bf2('0x33')](_0x4bf2('0x71'),_0x59a7b0['body'][_0x4bf2('0x72')][_0x4bf2('0x70')]())[_0x4bf2('0x33')](_0x4bf2('0x73'))[_0x4bf2('0x33')](_0x4bf2('0x74'),squel[_0x4bf2('0x64')]()[_0x4bf2('0x65')](_0x4bf2('0x5f'))[_0x4bf2('0x6d')](_0x4bf2('0x5d'))['where'](_0x4bf2('0x7a'),_0x59a7b0[_0x4bf2('0x3e')]['id'][_0x4bf2('0x70')]()))['where'](_0x4bf2('0x74'),squel[_0x4bf2('0x64')]()['field'](_0x4bf2('0x7b'))[_0x4bf2('0x6d')](_0x4bf2('0x6e'))[_0x4bf2('0x33')](_0x4bf2('0x7a'),_0x59a7b0['params']['id'][_0x4bf2('0x70')]())[_0x4bf2('0x33')]('state\x20=\x204'))[_0x4bf2('0x76')](_0x4bf2('0x61')))[_0x4bf2('0x70')]();return db['sequelize']['query'](_0x25490d);}return[];})[_0x4bf2('0x1e')](respondWithResult(_0x4c8106,null))['catch'](handleError(_0x4c8106,null));};exports['checkContactHopper']=function(_0x16c797,_0x411ea7,_0x4ce469){return db['CmHopper']['findOne']({'where':{'VoiceQueueId':_0x16c797[_0x4bf2('0x45')][_0x4bf2('0x63')],'CampaignId':_0x16c797['body']['CampaignId'],'ContactId':_0x16c797[_0x4bf2('0x45')]['ContactId']}})['then'](handleEntityNotFound(_0x411ea7,null))[_0x4bf2('0x1e')](function(_0x3fbfb4){if(_0x3fbfb4){return _0x3fbfb4;}return null;})[_0x4bf2('0x1e')](respondWithResult(_0x411ea7,null))[_0x4bf2('0x3c')](handleError(_0x411ea7,null));};
\ No newline at end of file