c09d72121e0e125b6c790b36a64840603e0a7e06
[motion2.git] / server / api / smsMessage / smsMessage.model.js
1 // *************************************************************************
2 // *                                                                       *
3 // * xCALLY Motion -  The Omnichannel Contact Center                       *
4 // * Copyright (c) Xenialab s.r.l. All Rights Reserved                     *
5 // *                                                                       *
6 // *************************************************************************
7 // *                                                                       *
8 // * Email: info@xcally.com                                                *
9 // * Website: https://www.xcally.com                                       *
10 // *                                                                       *
11 // *************************************************************************
12 // *                                                                       *
13 // * The SOFTWARE PRODUCT is protected by copyright laws and international *
14 // * copyright treaties, as well as other intellectual property laws and   *
15 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                         *
16 // *                                                                       *
17 // *************************************************************************
18 var _0x3f02=['afterCreate','Missing\x20parameters:\x20phone,\x20accountSid\x20or\x20authToken','skebby','https://api.skebby.it/API/v1.0/REST/','username','password','smsMethod','sender','login?username=','split','sms','POST','user_key','session_key','total_sent','internal_order_id','deliveryReport','read','Missing\x20parameters:\x20username,\x20password','requestid','connectel','Missing\x20parameters:\x20authToken','clicksend','senderString','format','https://rest.clicksend.com/v3/sms/send','Basic\x20%s','toString','base64','http_code','data','queued_count','head','message_id','clickSend','plivo','authId','%s:%s','https://api.plivo.com/v1/Account/%s/Message/','message_uuid','infobip','baseUrl','/auth/1/session','/sms/2/text/advanced','application/json','messages','Missing\x20parameters:\x20base_url','csc','crypto','apiKey','login','timestamp','sort','createHash','md5','digest','hex','signature=','GET','keys','id_sms','Missing\x20parameters:\x20apiKey','uuid','UTF-8','apiMessageId','clickatell','intelepeer','https://api.intelepeer.com/_rest/v4/app/sms/send','Bearer\x20','refid','status','message','Token\x20not\x20received','finally','utf8mb4','utf8mb4_unicode_ci','util','api','moment','request-promise','path','rimraf','../../config/environment','./smsMessage.attributes','exports','define','SmsMessage','sms_messages','messageId','body','FULLTEXT','models','get','direction','toLowerCase','out','secret','isNil','SmsInteraction','SmsInteractionId','then','update','catch','error','SmsAccount','SmsAccountId','type','twilio','accountSid','authToken','phone','remote','/api/sms/messages/','/status?token=','token','sid','SmsMessage,\x20%s,\x20%s,\x20%s','inspect'];(function(_0x58ae8a,_0x3c619e){var _0x2f0b6b=function(_0x6db940){while(--_0x6db940){_0x58ae8a['push'](_0x58ae8a['shift']());}};_0x2f0b6b(++_0x3c619e);}(_0x3f02,0x138));var _0x23f0=function(_0x12a554,_0x3d7ef8){_0x12a554=_0x12a554-0x0;var _0x244ba0=_0x3f02[_0x12a554];return _0x244ba0;};'use strict';var _=require('lodash');var util=require(_0x23f0('0x0'));var logger=require('../../config/logger')(_0x23f0('0x1'));var moment=require(_0x23f0('0x2'));var BPromise=require('bluebird');var rp=require(_0x23f0('0x3'));var fs=require('fs');var path=require(_0x23f0('0x4'));var rimraf=require(_0x23f0('0x5'));var config=require(_0x23f0('0x6'));var attributes=require(_0x23f0('0x7'));module[_0x23f0('0x8')]=function(_0x227fe8,_0x1f06e2){return _0x227fe8[_0x23f0('0x9')](_0x23f0('0xa'),attributes,{'tableName':_0x23f0('0xb'),'paranoid':![],'indexes':[{'name':_0x23f0('0xc'),'fields':[_0x23f0('0xc')]},{'name':'fti_sms_messages','fields':[_0x23f0('0xd')],'type':_0x23f0('0xe')}],'timestamps':!![],'hooks':{'afterCreate':function(_0x281f6f,_0x43c7ec,_0x5961e6){var _0xd2ddf4=_0x227fe8[_0x23f0('0xf')];var _0xf46dda=_0x281f6f[_0x23f0('0x10')]({'plain':!![]});if(_0xf46dda[_0x23f0('0x11')][_0x23f0('0x12')]()==='in'||_0xf46dda[_0x23f0('0x11')][_0x23f0('0x12')]()===_0x23f0('0x13')&&!_0xf46dda[_0x23f0('0x14')]&&!_[_0x23f0('0x15')](_0xf46dda['UserId'])){_0xd2ddf4[_0x23f0('0x16')]['findOne']({'where':{'id':_0xf46dda[_0x23f0('0x17')]}})[_0x23f0('0x18')](function(_0x6ba9ad){if(_0x6ba9ad){_0x6ba9ad[_0x23f0('0x19')]({'lastMsgAt':_0xf46dda['createdAt'],'lastMsgDirection':_0xf46dda[_0x23f0('0x11')][_0x23f0('0x12')]()});}})[_0x23f0('0x1a')](function(_0x25f976){console[_0x23f0('0x1b')](_0x25f976);});}if(_0xf46dda['direction']===_0x23f0('0x13')&&!_0xf46dda[_0x23f0('0x14')]){var _0x2af0ff;_0xd2ddf4[_0x23f0('0x1c')]['find']({'where':{'id':_0xf46dda[_0x23f0('0x1d')]},'raw':!![]})[_0x23f0('0x18')](function(_0x235dfc){_0x2af0ff=_0x235dfc;if(_0x2af0ff&&_0x2af0ff['type']){switch(_0x2af0ff[_0x23f0('0x1e')]){case'twilio':var _0x546c81=require(_0x23f0('0x1f'));if(_0x2af0ff[_0x23f0('0x20')]&&_0x2af0ff[_0x23f0('0x21')]&&_0x2af0ff[_0x23f0('0x22')]){var _0x588a41=new _0x546c81(_0x2af0ff['accountSid'],_0x2af0ff[_0x23f0('0x21')]);_0x588a41['messages']['create']({'body':_0xf46dda[_0x23f0('0xd')],'to':_0xf46dda[_0x23f0('0x22')],'from':_0x2af0ff[_0x23f0('0x22')],'statusCallback':_0x2af0ff[_0x23f0('0x23')]+_0x23f0('0x24')+_0xf46dda['id']+_0x23f0('0x25')+_0x2af0ff[_0x23f0('0x26')]})[_0x23f0('0x18')](function(_0x3f578a){if(_0x3f578a[_0x23f0('0x27')]){return _0x281f6f[_0x23f0('0x19')]({'messageId':_0x3f578a['sid']});}})['catch'](function(_0xee7e3b){logger['error'](_0x23f0('0x28'),'afterCreate',_0x23f0('0x1f'),util[_0x23f0('0x29')](_0xee7e3b,{'showHidden':![],'depth':null}));});}else{logger[_0x23f0('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x23f0('0x2a'),_0x23f0('0x1f'),_0x23f0('0x2b'));}break;case _0x23f0('0x2c'):var _0x4bc48c=_0x23f0('0x2d');if(_0x2af0ff[_0x23f0('0x2e')]&&_0x2af0ff[_0x23f0('0x2f')]){var _0x2321b9={'recipient':[_0xf46dda[_0x23f0('0x22')]],'message':_0xf46dda[_0x23f0('0xd')],'message_type':_0x2af0ff['smsMethod']};if(_0x2af0ff[_0x23f0('0x30')]&&_0x2af0ff['smsMethod']!=='SI'){_0x2321b9[_0x23f0('0x31')]=_0x2af0ff[_0x23f0('0x22')];}var _0x23bb97={'url':_0x4bc48c+_0x23f0('0x32')+_0x2af0ff[_0x23f0('0x2e')]+'&password='+_0x2af0ff[_0x23f0('0x2f')],'method':'GET'};rp(_0x23bb97)[_0x23f0('0x18')](function(_0x5f2eac){var _0x302097=_0x5f2eac[_0x23f0('0x33')](';');var _0x468e36={'user_key':_0x302097[0x0],'session_key':_0x302097[0x1]};_0x23bb97={'url':_0x4bc48c+_0x23f0('0x34'),'method':_0x23f0('0x35'),'headers':{'user_key':_0x468e36[_0x23f0('0x36')],'Session_key':_0x468e36[_0x23f0('0x37')]},'json':!![],'body':_0x2321b9};return rp(_0x23bb97);})[_0x23f0('0x18')](function(_0x5283c5){if(_0x5283c5[_0x23f0('0x38')]>=0x1){var _0x31a6b4={'messageId':_0x5283c5[_0x23f0('0x39')]};if(_0x2af0ff[_0x23f0('0x30')]!=='GP'||!_0x2af0ff[_0x23f0('0x3a')]){_0x31a6b4[_0x23f0('0x3b')]=!![];}return _0x281f6f[_0x23f0('0x19')](_0x31a6b4);}else{return logger['error'](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x2c'),util[_0x23f0('0x29')](_0x5283c5,{'showHidden':![],'depth':null}));}})[_0x23f0('0x1a')](function(_0x5789e4){return logger['error']('SmsMessage,\x20%s,\x20%s,\x20%s',_0x23f0('0x2a'),_0x23f0('0x2c'),util[_0x23f0('0x29')](_0x5789e4,{'showHidden':![],'depth':null}));});}else{logger[_0x23f0('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x23f0('0x2a'),'skebby',_0x23f0('0x3c'));}break;case'connectel':if(_0x2af0ff['authToken']){var _0x5c2936={'recipient':_0xf46dda[_0x23f0('0x22')],'message':_0xf46dda[_0x23f0('0xd')],'sender':_0x2af0ff['senderString']||_0x2af0ff['phone'],'authorization':_0x2af0ff[_0x23f0('0x21')]};var _0x43c7ec={'method':_0x23f0('0x35'),'uri':'https://smsapi.connectel.se/api/v2/send/','body':_0x5c2936,'json':!![]};rp(_0x43c7ec)[_0x23f0('0x18')](function(_0x2cac7f){var _0x23ec7b={'messageId':_0x2cac7f[_0x23f0('0x3d')]};if(!_0x2af0ff['deliveryReport']){_0x23ec7b['read']=!![];}return _0x281f6f[_0x23f0('0x19')](_0x23ec7b);})[_0x23f0('0x1a')](function(_0x2868ce){logger[_0x23f0('0x1b')](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x3e'),util[_0x23f0('0x29')](_0x2868ce,{'showHidden':![],'depth':null}));});}else{logger[_0x23f0('0x1b')](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x3e'),_0x23f0('0x3f'));}break;case _0x23f0('0x40'):if(_0x2af0ff['username']&&_0x2af0ff[_0x23f0('0x2f')]){var _0x5c2936={'messages':[{'source':'xCALLY\x20Motion','to':_0xf46dda[_0x23f0('0x22')],'body':_0xf46dda[_0x23f0('0xd')],'from':_0x2af0ff[_0x23f0('0x41')]||_0x2af0ff[_0x23f0('0x22')]}]};var _0x5e3802=util[_0x23f0('0x42')]('%s:%s',_0x2af0ff['username'],_0x2af0ff[_0x23f0('0x2f')]);var _0x43c7ec={'method':_0x23f0('0x35'),'uri':_0x23f0('0x43'),'body':_0x5c2936,'headers':{'Authorization':util[_0x23f0('0x42')](_0x23f0('0x44'),new Buffer(_0x5e3802)[_0x23f0('0x45')](_0x23f0('0x46')))},'json':!![]};rp(_0x43c7ec)[_0x23f0('0x18')](function(_0x253062){if(_0x253062[_0x23f0('0x47')]>=0xc8&&_0x253062['http_code']<=0xce){if(_0x253062[_0x23f0('0x48')]&&_0x253062['data'][_0x23f0('0x49')]>0x0){var _0x57f16b=_[_0x23f0('0x4a')](_0x253062[_0x23f0('0x48')]['messages']);var _0x5025bb={'messageId':_0x57f16b[_0x23f0('0x4b')]};if(!_0x2af0ff[_0x23f0('0x3a')]){_0x5025bb[_0x23f0('0x3b')]=!![];}return _0x281f6f[_0x23f0('0x19')](_0x5025bb);}else{logger[_0x23f0('0x1b')](_0x23f0('0x28'),_0x23f0('0x2a'),'clickSend',util[_0x23f0('0x29')](_0x253062,{'showHidden':![],'depth':null}));}}else{logger[_0x23f0('0x1b')](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x4c'),util[_0x23f0('0x29')](_0x253062,{'showHidden':![],'depth':null}));}})[_0x23f0('0x1a')](function(_0x126c8e){logger[_0x23f0('0x1b')](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x4c'),util[_0x23f0('0x29')](_0x126c8e,{'showHidden':![],'depth':null}));});}else{logger[_0x23f0('0x1b')](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x4c'),'Missing\x20parameters:\x20username,\x20password');}break;case _0x23f0('0x4d'):if(_0x2af0ff[_0x23f0('0x4e')]&&_0x2af0ff[_0x23f0('0x21')]){var _0x5c2936={'dst':_0xf46dda[_0x23f0('0x22')],'text':_0xf46dda[_0x23f0('0xd')],'src':_0x2af0ff[_0x23f0('0x41')]||_0x2af0ff[_0x23f0('0x22')],'url':_0x2af0ff['remote']+_0x23f0('0x24')+_0xf46dda['id']+_0x23f0('0x25')+_0x2af0ff['token']};var _0x5e3802=util[_0x23f0('0x42')](_0x23f0('0x4f'),_0x2af0ff[_0x23f0('0x4e')],_0x2af0ff[_0x23f0('0x21')]);var _0x43c7ec={'method':_0x23f0('0x35'),'uri':util[_0x23f0('0x42')](_0x23f0('0x50'),_0x2af0ff[_0x23f0('0x4e')]),'body':_0x5c2936,'headers':{'Authorization':util['format'](_0x23f0('0x44'),new Buffer(_0x5e3802)['toString']('base64'))},'json':!![]};rp(_0x43c7ec)[_0x23f0('0x18')](function(_0x1e1700){var _0xa2b7a5={'messageId':_0x1e1700[_0x23f0('0x51')][0x0]};return _0x281f6f['update'](_0xa2b7a5);})[_0x23f0('0x1a')](function(_0x2a809d){logger[_0x23f0('0x1b')](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x4d'),util[_0x23f0('0x29')](_0x2a809d,{'showHidden':![],'depth':null}));});}else{logger[_0x23f0('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x23f0('0x2a'),'plivo','Missing\x20parameters:\x20authId,\x20authToken');}break;case _0x23f0('0x52'):if(_0x2af0ff[_0x23f0('0x2e')]&&_0x2af0ff[_0x23f0('0x2f')]){if(_0x2af0ff[_0x23f0('0x53')]){var _0xb08344={'method':_0x23f0('0x35'),'uri':_0x2af0ff[_0x23f0('0x53')]+_0x23f0('0x54'),'body':{'username':_0x2af0ff[_0x23f0('0x2e')],'password':_0x2af0ff[_0x23f0('0x2f')]},'json':!![]};return rp(_0xb08344)[_0x23f0('0x18')](function(_0x5ec347){var _0x433290={'method':'POST','uri':_0x2af0ff['baseUrl']+_0x23f0('0x55'),'body':{'messages':[{'from':_0x2af0ff[_0x23f0('0x22')],'destinations':[{'to':_0xf46dda[_0x23f0('0x22')]}],'text':_0xf46dda[_0x23f0('0xd')],'notifyUrl':_0x2af0ff[_0x23f0('0x23')]+'/api/sms/messages/'+_0xf46dda['id']+_0x23f0('0x25')+_0x2af0ff[_0x23f0('0x26')],'notifyContentType':_0x23f0('0x56'),'callbackData':_0x2af0ff[_0x23f0('0x22')]+';'+_0xf46dda[_0x23f0('0xd')]}]},'headers':{'Authorization':'IBSSO\x20'+_0x5ec347['token']},'json':!![]};return rp(_0x433290)['then'](function(_0x40770a){if(_0x40770a[_0x23f0('0x57')]){var _0x366e74={'messageId':_0x40770a[_0x23f0('0x57')][0x0][_0x23f0('0xc')]};if(!_0x2af0ff[_0x23f0('0x3a')]){_0x366e74['read']=!![];}return _0x281f6f['update'](_0x366e74);}else{return logger[_0x23f0('0x1b')](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x52'),util['inspect'](_0x40770a,{'showHidden':![],'depth':null}));}});})[_0x23f0('0x1a')](function(_0x5b32d3){return logger[_0x23f0('0x1b')](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x52'),util[_0x23f0('0x29')](_0x5b32d3,{'showHidden':![],'depth':null}));});}else{logger['error']('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate',_0x23f0('0x52'),_0x23f0('0x58'));}}else{logger[_0x23f0('0x1b')](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x52'),_0x23f0('0x3c'));}break;case _0x23f0('0x59'):var _0x2634ae=require(_0x23f0('0x5a'));if(_0x2af0ff[_0x23f0('0x5b')]){var _0xa7e693={};_0xa7e693[_0x23f0('0x5c')]=_0x2af0ff[_0x23f0('0x2e')];_0xa7e693[_0x23f0('0x22')]=_0xf46dda['phone'];_0xa7e693[_0x23f0('0x31')]=_0x2af0ff['phone'];_0xa7e693['text']=_0xf46dda[_0x23f0('0xd')];_0xa7e693[_0x23f0('0x5d')]=+new Date();var _0x457169='';var _0x38c80d='';var _0x2019b9=Object['keys'](_0xa7e693);_0x2019b9[_0x23f0('0x5e')]();for(var _0x215fd4=0x0;_0x215fd4<_0x2019b9['length'];_0x215fd4++){if(_0x457169!=''){_0x457169+='&';}_0x457169+=_0x2019b9[_0x215fd4]+'='+encodeURIComponent(_0xa7e693[_0x2019b9[_0x215fd4]]);_0x38c80d+=_0xa7e693[_0x2019b9[_0x215fd4]];}_0x38c80d+=_0x2af0ff[_0x23f0('0x5b')];_0x38c80d=_0x2634ae[_0x23f0('0x5f')](_0x23f0('0x60'))[_0x23f0('0x19')](_0x38c80d)[_0x23f0('0x61')](_0x23f0('0x62'));if(_0x457169!==''){_0x457169+='&';}_0x457169+=_0x23f0('0x63')+_0x38c80d;var _0x23bb97={'method':_0x23f0('0x64'),'uri':_0x2af0ff[_0x23f0('0x53')]+'/external/get/send.php?'+_0x457169,'json':!![]};return rp(_0x23bb97)[_0x23f0('0x18')](function(_0xf9d7a4){var _0x1bdf86=Object[_0x23f0('0x65')](_0xf9d7a4);if(_0xf9d7a4[_0x1bdf86[0x0]][_0x23f0('0x1b')]&&parseInt(_0xf9d7a4[_0x1bdf86[0x0]][_0x23f0('0x1b')])===0x0){var _0x4823eb={'messageId':_0xf9d7a4[_0x1bdf86[0x0]][_0x23f0('0x66')]};if(!_0x2af0ff[_0x23f0('0x3a')]){_0x4823eb[_0x23f0('0x3b')]=!![];}return _0x281f6f[_0x23f0('0x19')](_0x4823eb);}else{return logger['error'](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x59'),util[_0x23f0('0x29')](_0xf9d7a4[_0x23f0('0x1b')],{'showHidden':![],'depth':null}));}})[_0x23f0('0x1a')](function(_0x5b3237){return logger['error'](_0x23f0('0x28'),'afterCreate',_0x23f0('0x59'),util[_0x23f0('0x29')](_0x5b3237,{'showHidden':![],'depth':null}));});}else{logger['error'](_0x23f0('0x28'),'afterCreate','csc',_0x23f0('0x67'));}break;case'clickatell':if(_0x2af0ff[_0x23f0('0x5b')]){var _0x6cb004={'method':'POST','uri':'https://platform.clickatell.com/messages','headers':{'Authorization':_0x2af0ff['apiKey']},'body':{'content':_0xf46dda[_0x23f0('0xd')],'to':[_0xf46dda[_0x23f0('0x22')]],'from':_0x2af0ff[_0x23f0('0x22')],'binary':![],'clientMessageId':_0x23f0('0x68'),'charset':_0x23f0('0x69')},'json':!![]};rp(_0x6cb004)[_0x23f0('0x18')](function(_0x3aebe1){if(!_0x3aebe1['error']){var _0xa7a940={'messageId':_0x3aebe1[_0x23f0('0x57')][0x0][_0x23f0('0x6a')]};if(!_0x2af0ff[_0x23f0('0x3a')]){_0xa7a940[_0x23f0('0x3b')]=!![];}return _0x281f6f[_0x23f0('0x19')](_0xa7a940);}else{return logger[_0x23f0('0x1b')](_0x23f0('0x28'),_0x23f0('0x2a'),_0x23f0('0x6b'),util['inspect'](_0x3aebe1[_0x23f0('0x1b')],{'showHidden':![],'depth':null}));}})[_0x23f0('0x1a')](function(_0x203753){return logger['error'](_0x23f0('0x28'),'afterCreate','clickatell',util['inspect'](_0x203753,{'showHidden':![],'depth':null}));});}else{logger[_0x23f0('0x1b')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x23f0('0x2a'),_0x23f0('0x6b'),_0x23f0('0x67'));}break;case _0x23f0('0x6c'):if(_0x2af0ff['apiKey']){var _0x4af135={};var _0x23bb97={'method':_0x23f0('0x35'),'uri':_0x23f0('0x6d'),'headers':{'Authorization':_0x23f0('0x6e')+_0x2af0ff['apiKey'],'Content-Type':_0x23f0('0x56')},'body':{'from':_0x2af0ff['phone'],'to':_0xf46dda[_0x23f0('0x22')],'text':_0xf46dda[_0x23f0('0xd')]},'json':!![]};return rp(_0x23bb97)['then'](function(_0x4dcbfd){if(_0x4dcbfd['code']==0xca){_0x4af135['message']=_0x4dcbfd;var _0x359fad={'method':_0x23f0('0x35'),'uri':'https://api.intelepeer.com/_rest/v4/app/sms/mdr','headers':{'Authorization':_0x23f0('0x6e')+_0x2af0ff['apiKey'],'Content-Type':'application/json'},'body':{'refid':_0x4af135['message'][_0x23f0('0x6f')]},'json':!![]};return rp(_0x359fad)[_0x23f0('0x18')](function(_0x25cd51){_0x4af135[_0x23f0('0x70')]=_0x25cd51;var _0x349ca6={'messageId':_0x4af135[_0x23f0('0x71')][_0x23f0('0x6f')],'read':!![]};return _0x281f6f['update'](_0x349ca6);});}else{return logger['error']('SmsMessage,\x20%s,\x20%s,\x20%s',_0x23f0('0x2a'),_0x23f0('0x6c'),util['inspect'](_0x4dcbfd,{'showHidden':![],'depth':null}));}})[_0x23f0('0x1a')](function(_0x81a6a0){return logger['error']('SmsMessage,\x20%s,\x20%s,\x20%s',_0x23f0('0x2a'),_0x23f0('0x6c'),util[_0x23f0('0x29')](_0x81a6a0,{'showHidden':![],'depth':null}));});}else{return logger['error'](_0x23f0('0x28'),'afterCreate','intelepeer',_0x23f0('0x72'));}break;}}})[_0x23f0('0x73')](function(){_0x5961e6();});}else{_0x5961e6();}}},'charset':_0x23f0('0x74'),'collate':_0x23f0('0x75')});};