精华内容
下载资源
问答
  • XLog

    千次阅读 2017-09-29 16:20:24
    XLog English 简单、美观、强大、可扩展的 Android 和 Java 日志库,可同时在多个通道打印日志,如 Logcat、Console 和文件。如果你愿意,甚至可以打印到远程服务器(或其他任何地方)。 XLog 能干什么...

    XLog

    English

    简单、美观、强大、可扩展的 Android 和 Java 日志库,可同时在多个通道打印日志,如 Logcat、Console 和文件。如果你愿意,甚至可以打印到远程服务器(或其他任何地方)。

    XLog 能干什么:

    • 全局配置(TAG,各种格式化器...)或基于单条日志的配置
    • 支持打印任意对象以及可自定义的对象格式化器
    • 支持打印数组
    • 支持打印无限长的日志(没有 4K 字符的限制)
    • XML 和 JSON 格式化输出
    • 线程信息(线程名等,可自定义)
    • 调用栈信息(可配置的调用栈深度,调用栈信息包括类名、方法名文件名和行号)
    • 支持日志拦截器
    • 保存日志文件(文件名和自动备份策略可灵活配置)
    • 在 Android Studio 中的日志样式美观
    • 简单易用,扩展性高

    与其他日志库的不同:

    • 优美的源代码,良好的文档
    • 扩展性高,可轻松扩展和强化功能
    • 轻量级,零依赖

    依赖

    compile 'com.elvishew:xlog:1.3.0'

    预览

    • 带线程信息、调用栈信息和边框的日志

    * 格式化后的网络 API 请求

    * 格式化后的网络 API 响应

    * 日志文件

    架构

    用法

    初始化

    简单方式

    XLog.init(LogLevel.ALL);

    或者如果你想要在正式版中禁止打日志

    XLog.init(BuildConfig.DEBUG ? LogLevel.ALL : LogLevel.NONE);
    

    高级方式

    LogConfiguration config = new LogConfiguration.Builder()
        .logLevel(BuildConfig.DEBUG ? LogLevel.ALL             // 指定日志级别,低于该级别的日志将不会被打印,默认为 LogLevel.ALL
            : LogLevel.NONE)
        .tag("MY_TAG")                                         // 指定 TAG,默认为 "X-LOG"
        .t()                                                   // 允许打印线程信息,默认禁止
        .st(2)                                                 // 允许打印深度为2的调用栈信息,默认禁止
        .b()                                                   // 允许打印日志边框,默认禁止
        .jsonFormatter(new MyJsonFormatter())                  // 指定 JSON 格式化器,默认为 DefaultJsonFormatter
        .xmlFormatter(new MyXmlFormatter())                    // 指定 XML 格式化器,默认为 DefaultXmlFormatter
        .throwableFormatter(new MyThrowableFormatter())        // 指定可抛出异常格式化器,默认为 DefaultThrowableFormatter
        .threadFormatter(new MyThreadFormatter())              // 指定线程信息格式化器,默认为 DefaultThreadFormatter
        .stackTraceFormatter(new MyStackTraceFormatter())      // 指定调用栈信息格式化器,默认为 DefaultStackTraceFormatter
        .borderFormatter(new MyBoardFormatter())               // 指定边框格式化器,默认为 DefaultBorderFormatter
        .addObjectFormatter(AnyClass.class,                    // 为指定类添加格式化器
            new AnyClassObjectFormatter())                     // 默认使用 Object.toString()
        .addInterceptor(new BlacklistTagsFilterInterceptor(    // 添加黑名单 TAG 过滤器
            "blacklist1", "blacklist2", "blacklist3"))
        .addInterceptor(new MyInterceptor())                   // 添加一个日志拦截器
        .build();
    
    Printer androidPrinter = new AndroidPrinter();             // 通过 android.util.Log 打印日志的打印器
    Printer consolePrinter = new ConsolePrinter();             // 通过 System.out 打印日志到控制台的打印器
    Printer filePrinter = new FilePrinter                      // 打印日志到文件的打印器
        .Builder("/sdcard/xlog/")                              // 指定保存日志文件的路径
        .fileNameGenerator(new DateFileNameGenerator())        // 指定日志文件名生成器,默认为 ChangelessFileNameGenerator("log")
        .backupStrategy(new NeverBackupStrategy()              // 指定日志文件备份策略,默认为 FileSizeBackupStrategy(1024 * 1024)
        .logFlattener(new MyFlattener())                       // 指定日志平铺器,默认为 DefaultFlattener
        .build();
    
    XLog.init(                                                 // 初始化 XLog
        config,                                                // 指定日志配置,如果不指定,会默认使用 new LogConfiguration.Builder().build()
        androidPrinter,                                        // 添加任意多的打印器。如果没有添加任何打印器,会默认使用 AndroidPrinter(Android)/ConsolePrinter(java)
        consolePrinter,
        filePrinter);

    对于 android,做初始化的最佳地方是 Application.onCreate()

    全局用法

    XLog.d("Simple message")
    XLog.d("My name is %s", "Elvis");
    XLog.d("An exception caught", exception);
    XLog.d(object);
    XLog.d(array);
    XLog.json(unformattedJsonString);
    XLog.xml(unformattedXmlString);
    ... // 其他全局使用

    局部用法

    创建一个 Logger

    Logger partial = XLog.tag("PARTIAL-LOG")
        ... // 其他配置
        .build();

    然后对该 Logger 进行局部范围的使用,所有打印日志的相关方法都跟 XLog 类里的一模一样。

    partial.d("Simple message 1");
    partial.d("Simple message 2");
    ... // 其他局部使用

    基于单条日志的用法

    进行基于单条日志的配置,然后就可以直接打印日志了,所有打印日志的相关方法都跟 XLog 类里的一模一样。

    XLog.t()    // 允许打印线程信息
        .st(3)  // 允许打印深度为3的调用栈信息
        .b()    // 允许打印日志边框
        ...     // 其他配置
        .d("Simple message 1");
    
    XLog.tag("TEMP-TAG")
        .st(0)  // 允许打印不限深度的调用栈信息
        ...     // 其他配置
        .d("Simple message 2");
    
    XLog.nt()   // 禁止打印线程信息
        .nst()  // 禁止打印调用栈信息
        .d("Simple message 3");
    
    XLog.b().d("Simple message 4");

    比较

    让我们设想有一个 JSON 字符串和一个 XML 字符串:

    String jsonString = "{\"name\": \"Elvis\", \"age\": 18}";
    String xmlString = "<team><member name="Elvis"/><member name="Leon"/></team>";

    Android Log

    Log.d(TAG, "Message");
    Log.d(TAG, String.format("Message with argument: age=%s", 18));
    Log.d(TAG, jsonString);
    Log.d(TAG, xmlString);
    Log.d(TAG, "Message with stack trace info", new Throwable());

    XLog

    XLog.init(LogLevel.ALL);
    XLog.d("Message");
    XLog.d("Message with argument: age=%s", 18);
    XLog.json(jsonString);
    XLog.xml(xmlString);
    XLog.st(5).d("Message with stack trace info");

    带边框的 XLog

    XLog.init(LogLevel.ALL, new LogConfiguration.Builder().b().build());
    XLog.d("Message");
    XLog.d("Message with argument: age=%s", 18);
    XLog.json(jsonString);
    XLog.xml(xmlString);
    XLog.st(5).d("Message with stack trace info");

    类似的库

    兼容性

    为了兼容 Android Log,XLog 支持 Android Log 里的所有方法。 请看 XLog 里的 Log 类。

    Log.v(String, String);
    Log.v(String, String, Throwable);
    Log.d(String, String);
    Log.d(String, String, Throwable);
    Log.i(String, String);
    Log.i(String, String, Throwable);
    Log.w(String, String);
    Log.w(String, String, Throwable);
    Log.wtf(String, String);
    Log.wtf(String, String, Throwable);
    Log.e(String, String);
    Log.e(String, String, Throwable);
    Log.println(int, String, String);
    Log.isLoggable(String, int);
    Log.getStackTraceString(Throwable);

    迁移

    如果你有一个大工程正在用 Android Log,并且很难将所有对 Android Log 的使用都换成 XLog,那么你可以使用兼容 API,简单地将所有 'android.util.Log' 替换成 'com.elvishew.xlog.XLog.Log'. (为了更好的性能,尽量不要使用兼容 API)

    Linux/Cygwin:

    grep -rl "android.util.Log" <your-source-directory> | xargs sed -i "s/android.util.Log/com.elvishew.xlog.XLog.Log/g"

    Mac

    grep -rl "android.util.Log" <your-source-directory> | xargs sed -i "" "s/android.util.Log/com.elvishew.xlog.XLog.Log/g"

    Android Studio

    在 'Project' 窗口里,切换到 'Project Files' 标签,然后右键点击你的源码目录。 在出现的菜单里,点击 'Replace in Path...' 选项。 在弹出的对话框里,'Text to find' 区域填上 'android.util.Log','Replace with' 区域填个 'com.elvishew.xlog.XLog.Log',然后点击 'Find'。

    待开发

    •  打印任意对象: XLog.d(Object) (v1.1.0 开始支持)
    •  支持日志拦截器(类似于 okhttp 的 Interceptor,这里用来拦截日志)(v1.3.0 开始支持)
    •  添加 tags 过滤器 (白名单过滤和黑名单过滤)(v1.3.0 开始支持)
    •  添加 PatternLogFlattener(主要用在向文件打印日志时),如: 使用模式 "{d yyyy-MM-dd hh:mm:ss.SSS} {l}/{t}: {m}",平铺后的日志将会是 "2016-10-30 13:00:00,000 W/my_tag: Simple message" (v1.3.0 开始支持)
    •  打印日志到文件时,采用异步方式(v1.3.0 开始支持)
    •  Logger 粒度的日志级别控制,取代当前的全局控制(v1.3.0 开始支持)
    •  为 Bundle 和 Intent 对象添加默认的格式化器(v1.4.0 开始支持)
    •  导出日志文件为 .zip(v1.4.0 开始支持)

    版本

    最新版本:1.3.0 Change log

    问题

    如果你在使用过程中遇到任何问题或者有任何建议,请创建一个 Issue。

    注意:麻烦使用英文提问和回复,方便其他国家的用户看懂并从中受益,谢谢。

    感谢

    感谢 Orhan Obut 的 logger,它让我知道一个日志库能做哪些事情。

    感谢 Serge Zaitsev 的 log,让我想到要兼容 Android Log

    许可

    Copyright 2016 Elvis Hew
    
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    
       http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
    

    关于我

    展开全文
  • xlog

    2014-05-30 10:34:00
    pg_current_xlog_insert_location函数: 指的是写入wal buffer的位置 pg_current_xlog_location函数: 指的是已经fsync(异步)到wal文件的位置(参数synchronous_commi...
    pg_current_xlog_insert_location函数:
    指的是写入wal buffer的位置
    pg_current_xlog_location函数:
    指的是已经fsync(异步)到wal文件的位置(参数synchronous_commit = off)。

     

    转载于:https://www.cnblogs.com/xxvv/p/3766272.html

    展开全文
  • XLog Lightweight and pretty, powerful and flexible logger for android and java, can print the log to Logcat, Console and Files, or anywhere if you like. Logcat Output Quick Start Dependency ...
  • 自定义xlog

    2021-04-01 11:58:11
    基于微信XLog的日志框架&&对于XLog的分析 自定义Xlog包名 https://blog.csdn.net/u011923796/article/details/102746554 Android Mars XLog 自定义存储格式 ...自定义 xlog 加密 ...

    https://juejin.cn/post/6850418121279438855
    基于微信XLog的日志框架&&对于XLog的分析

    自定义Xlog包名
    https://blog.csdn.net/u011923796/article/details/102746554

    Android Mars XLog 自定义存储格式
    https://blog.csdn.net/EthanCo/article/details/104378841

    自定义 xlog 加密
    https://www.bookstack.cn/read/mars/spilt.1.1015381e14769be1.md

    展开全文
  • 1.抖音xlog算法是什么? 与X-Gorgon算法和设备注册服务的不同,他主要是搜集环境信息参数包括一些检测点,组成一个json串然后调用data加密传到服务器进行分析比对。我们抓包可以看到一条url为/v2/r?,POST包,其body...

    1.抖音xlog算法是什么?

    与X-Gorgon算法和设备注册服务的不同,他主要是搜集环境信息参数包括一些检测点,组成一个json串然后调用data加密传到服务器进行分析比对。我们抓包可以看到一条url为/v2/r?,POST包,其body体为加密函数,加密过程VM化,只能动态调试跟踪理解,具体过程略复杂。抖音xlog接口用于收集设备环境数据,主要用于检测设备环境是否“合规”,也就是大伙经常听到的过“风控”!xlog接口的body是加密后的设备环境数据,加密通过xlog算法加密。目前抖音APP最新版12.x依然还是用的02算法,此算法抖音官方老长时间没更新了......

    POST https://xlog.snssdk.com/v2/r?os=0&ver=0.6.10.25.17-IH-Do&m=2&app_ver=12.4.0&region=zh_CN&aid=1128&did=19671560880 HTTP/1.1
    Host: xlog.snssdk.com
    Connection: keep-alive
    Cookie: sessionid=
    X-SS-REQ-TICKET: 1599446905153
    sdk-version: 1
    x-tt-trace-id: 00-8c16dd31094948432b05140591f60468-8c16dd3109494843-01
    User-Agent: com.ss.android.ugc.aweme/990 (Linux; U; Android 5.1.1; zh_CN; YQ601; Build/LMY47V; Cronet/77.0.3844.0)
    Accept-Encoding: gzip, deflate
    X-Gorgon: 0408d012000449c94d909ca41fa968eb6a8ab9ea7528d54eadae
    X-Khronos: 1599446905

     

    抖音xlog算法是在native层,无法通过反编译dex获取到具体算法实现,xlog算法大概逻辑是:

    首先调用解密方法,将02开头的 byte[]数组进行解密,解密后是一个json字符串,然后再调用xlog加密接口进行加密,然后提交,返回的依然是一个02开头的,然后再进行解密,就可以看到结果了,
    再次之前还有一个 sdfp包,也是需要用到这个加密解密的 可以参考文档

    package hook;
    
    import android.text.TextUtils;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    public final class ByteUtil {
    
      private static final String NULL_MD5_STRING = "00000000000000000000000000000000";
    
      public static byte[] b(String paramString) {
        int i = paramString.length();
        byte[] arrayOfByte = new byte[i / 2];
        for (byte b = 0; b < i; b += 2)
          arrayOfByte[b / 2] = (byte)((Character.digit(paramString.charAt(b), 16) << 4) + Character
              .digit(paramString.charAt(b + 1), 16));
        return arrayOfByte;
      }
    
      public static String ByteToStr(byte[] bArr) {
    
        int i = 0;
    
        char[] toCharArray = "0123456789abcdef".toCharArray();
        char[] cArr = new char[(bArr.length * 2)];
        while (i < bArr.length) {
          int i2 = bArr[i] & 255;
          int i3 = i * 2;
          cArr[i3] = toCharArray[i2 >>> 4];
          cArr[i3 + 1] = toCharArray[i2 & 15];
          i++;
        }
        return new String(cArr);
      }
    
      public static String getXGon(String url, String stub, String ck, String sessionid){
        StringBuilder sb=new StringBuilder();
        if (TextUtils.isEmpty(url)){
          sb.append(NULL_MD5_STRING);
        }else {
          sb.append(encryption(url).toLowerCase());
        }
    
        if (TextUtils.isEmpty(stub)){
          sb.append(NULL_MD5_STRING);
        }else {
          sb.append(stub);
        }
    
        if (TextUtils.isEmpty(ck)){
          sb.append(NULL_MD5_STRING);
        }else {
          sb.append(encryption(ck).toLowerCase());
        }
    
        if (TextUtils.isEmpty(sessionid)){
          sb.append(NULL_MD5_STRING);
        }else {
          sb.append(encryption(sessionid).toLowerCase());
        }
        return sb.toString();
      }
    
      public static String encryption(String str) {
        String re_md5=null;
        try {
          MessageDigest md = MessageDigest.getInstance("MD5");
          md.update(str.getBytes());
          byte b[] = md.digest();
    
          int i;
    
          StringBuffer buf = new StringBuffer("");
          for (int offset = 0; offset < b.length; offset++) {
            i = b[offset];
            if (i < 0)
              i += 256;
            if (i < 16)
              buf.append("0");
            buf.append(Integer.toHexString(i));
          }
    
          re_md5 = buf.toString();
    
        } catch (NoSuchAlgorithmException e) {
          e.printStackTrace();
        }
        return re_md5.toUpperCase();
      }
    
      public static byte[] StrToByte(String str) {
        String str2 = str;
        Object[] objArr = new Object[1];
        int i = 0;
        objArr[0] = str2;
    
        int length = str.length();
        byte[] bArr = new byte[(length / 2)];
        while (i < length) {
          bArr[i / 2] = (byte) ((Character.digit(str2.charAt(i), 16) << 4) + Character
              .digit(str2.charAt(i + 1), 16));
          i += 2;
        }
        return bArr;
      }
    }
    
    

     

    我们根据抖音最新的12.4版本进行逆向,解密xlog接口的数据后,发现抖音在这方面真的是做到了极致,解密后数据如下:

    {
        "extra": "SS-200",
        "grilock": "eyJvcyI6IkFuZHJvaWQiLCJ2ZXJzaW9uIjoiMS4wLjUiLCJ0b2tlbl9pZCI6IlwvOWpudDRyRFRkdyt4bmxqT1pmN3VOUnN1RHNndEMwSFJRSFJaM3pCNXl1enRKRHB1TVVxUk1TaDc3Sld3Y0RLaDFkaEFUSkxyTzkzeEFEVFAraU1XSU1CdDNCSW9jYz0iLCJjb2RlIjoyMDB9",
        "ast": 1,
        "p1": "38464475038",
        "p2": "1143087178466429",
        "ait": 1595642532,
        "ut": 1751,
        "pkg": "com.ss.android.ugc.aweme",
        "prn": "CZL-MLP",
        "vc": 120001,
        "fp": "OPPO/A59/A59:5.1/LMY47I/1519786508:user/release-keys",
        "mdi_if": {
            "ui": "",
            "mc": "",
            "mid": "",
            "ts": -1
        },
        "mdi_s": 10,
        "wifisid": "HUAWEI-10GLZ6",
        "wifimac": "6c:06:d6:c4:6a:c8",
        "wifip": "192.168.3.15",
        "vpn": 0,
        "aplist": [
            {
                "ss": "",
                "bs": "6c:06:d6:c4:6a:cd"
            },
            {
                "ss": "HUAWEI-10GLZ6_Wi-Fi5",
                "bs": "6c:06:d6:f4:6a:ce"
            },
            {
                "ss": "HUAWEI-10GLZ6_Wi-Fi5",
                "bs": "6c:06:d6:f4:6a:cd"
            },
            {
                "ss": "ChinaNet-5mds",
                "bs": "18:52:07:8a:af:c2"
            },
            {
                "ss": "",
                "bs": "6c:06:d6:c4:6a:ce"
            },
            {
                "ss": "HUAWEI-10GLZ6",
                "bs": "6c:06:d6:c4:6a:cc"
            },
            {
                "ss": "HUAWEI-10GLZ6",
                "bs": "6c:06:d6:c4:6a:c8"
            },
            {
                "ss": "",
                "bs": "6c:06:d6:c4:6a:c9"
            },
            {
                "ss": "ChinaNet-5mds-5G",
                "bs": "18:52:07:8a:af:c1"
            },
            {
                "ss": "www.uoko.com",
                "bs": "d4:ee:07:37:db:26"
            }
        ],
        "route": {
            "iip": "192.168.3.15",
            "gip": "192.168.3.1",
            "ghw": "6c:06:d6:c4:6a:c2",
            "type": "wlan0"
        },
        "location": "",
        "i_mk": -1,
        "cell": "[16241,2147483647,2147483647,13898,11]",
        "hw": {
            "brand": "OPPO",
            "model": "OPPO A59s",
            "board": "full_oppo6750_15131",
            "device": "A59",
            "product": "A59",
            "manuf": "OPPO",
            "tags": "dev-keys",
            "inc": "1576670525",
            "des": "full_oppo6750_15131-user 5.1 LMY47I 1576670525 dev-keys",
            "bt": "unknown",
            "pfbd": "mt6750",
            "display": "720*1280",
            "dpi": 320,
            "bat": 3075,
            "bas": [],
            "cpu": {
                "core": 8,
                "pc": "AArch64 Processor rev 2 (aarch64)",
                "hw": "MT6750",
                "max": "1508000",
                "min": "156000",
                "ft": "fp asimd aes pmull sha1 sha2 crc32 wp half thumb fastmult vfp edsp neon vfpv3 tlsi vfpv4 idiva idivt"
            },
            "mem": {
                "ram": "3969265664",
                "rom": "28043313152",
                "sd": "27990884352",
                "ram_f": "1715597312",
                "rom_f": "22127783936",
                "sd_f": "22041800704"
            },
            "hdf": "ZmVhdHVyZTpyZXFHbEVzVmVyc2lvbj0weDMwMDAwCmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS5hdWRpby5vdXRwdXQKZmVhdHVyZTphbmRyb2lkLmhhcmR3YXJlLmJsdWV0b290aApmZWF0dXJlOmFuZHJvaWQuaGFyZHdhcmUuYmx1ZXRvb3RoX2xlCmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEKZmVhdHVyZTphbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hbnkKZmVhdHVyZTphbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hdXRvZm9jdXMKZmVhdHVyZTphbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5mbGFzaApmZWF0dXJlOmFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhLmZyb250CmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS5ldGhlcm5ldApmZWF0dXJlOmFuZHJvaWQuaGFyZHdhcmUuZmFrZXRvdWNoCmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbgpmZWF0dXJlOmFuZHJvaWQuaGFyZHdhcmUubG9jYXRpb24uZ3BzCmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbi5uZXR3b3JrCmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS5taWNyb3Bob25lCmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS5zY3JlZW4ubGFuZHNjYXBlCmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS5zY3JlZW4ucG9ydHJhaXQKZmVhdHVyZTphbmRyb2lkLmhhcmR3YXJlLnNlbnNvci5hY2NlbGVyb21ldGVyCmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS5zZW5zb3IuY29tcGFzcwpmZWF0dXJlOmFuZHJvaWQuaGFyZHdhcmUuc2Vuc29yLmd5cm9zY29wZQpmZWF0dXJlOmFuZHJvaWQuaGFyZHdhcmUuc2Vuc29yLmxpZ2h0CmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS5zZW5zb3IucHJveGltaXR5CmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS5zZW5zb3Iuc3RlcGNvdW50ZXIKZmVhdHVyZTphbmRyb2lkLmhhcmR3YXJlLnNlbnNvci5zdGVwZGV0ZWN0b3IKZmVhdHVyZTphbmRyb2lkLmhhcmR3YXJlLnRlbGVwaG9ueQpmZWF0dXJlOmFuZHJvaWQuaGFyZHdhcmUudGVsZXBob255LmNkbWEKZmVhdHVyZTphbmRyb2lkLmhhcmR3YXJlLnRlbGVwaG9ueS5nc20KZmVhdHVyZTphbmRyb2lkLmhhcmR3YXJlLnRvdWNoc2NyZWVuCmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS50b3VjaHNjcmVlbi5tdWx0aXRvdWNoCmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS50b3VjaHNjcmVlbi5tdWx0aXRvdWNoLmRpc3RpbmN0CmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS50b3VjaHNjcmVlbi5tdWx0aXRvdWNoLmphenpoYW5kCmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS51c2IuYWNjZXNzb3J5CmZlYXR1cmU6YW5kcm9pZC5oYXJkd2FyZS51c2IuaG9zdApmZWF0dXJlOmFuZHJvaWQuaGFyZHdhcmUud2lmaQpmZWF0dXJlOmFuZHJvaWQuaGFyZHdhcmUud2lmaS5kaXJlY3QKZmVhdHVyZTphbmRyb2lkLnNvZnR3YXJlLmFwcF93aWRnZXRzCmZlYXR1cmU6YW5kcm9pZC5zb2Z0d2FyZS5iYWNrdXAKZmVhdHVyZTphbmRyb2lkLnNvZnR3YXJlLmNvbm5lY3Rpb25zZXJ2aWNlCmZlYXR1cmU6YW5kcm9pZC5zb2Z0d2FyZS5kZXZpY2VfYWRtaW4KZmVhdHVyZTphbmRyb2lkLnNvZnR3YXJlLmhvbWVfc2NyZWVuCmZlYXR1cmU6YW5kcm9pZC5zb2Z0d2FyZS5pbnB1dF9tZXRob2RzCmZlYXR1cmU6YW5kcm9pZC5zb2Z0d2FyZS5saXZlX3dhbGxwYXBlcgpmZWF0dXJlOmFuZHJvaWQuc29mdHdhcmUucHJpbnQKZmVhdHVyZTphbmRyb2lkLnNvZnR3YXJlLnNpcApmZWF0dXJlOmFuZHJvaWQuc29mdHdhcmUuc2lwLnZvaXAKZmVhdHVyZTphbmRyb2lkLnNvZnR3YXJlLnZvaWNlX3JlY29nbml6ZXJzCmZlYXR1cmU6YW5kcm9pZC5zb2Z0d2FyZS53ZWJ2aWV3CmZlYXR1cmU6bXRrLmdlbWluaS5zdXBwb3J0CmZlYXR1cmU6b3Bwby5BbGlnbi5hbGFybS5zdXBwb3J0CmZlYXR1cmU6b3Bwby5hbGwuY2xpZW50CmZlYXR1cmU6b3Bwby5hbGwuY2xpZW50XzdfNQpmZWF0dXJlOm9wcG8uYWxsLmN0CmZlYXR1cmU6b3Bwby5hbGwubXAKZmVhdHVyZTpvcHBvLmFtcy5icm9hZGNhc3QuYWRqdXN0Lm9icmVjcXVlCmZlYXR1cmU6b3Bwby5hbXMuYnJvYWRjYXN0LmFkanVzdC5wYnJlY3F1ZQpmZWF0dXJlOm9wcG8uYW1zLmJyb2FkY2FzdC5qdW1wcXVldWUKZmVhdHVyZTpvcHBvLmFtcy5icm9hZGNhc3Qub3Bwb2J0CmZlYXR1cmU6b3Bwby5hcHAyc2QuZGlzYWJsZWQKZmVhdHVyZTpvcHBvLmF1dG9icmlnaHRjdGwuYW5pbWF0aW9uLnN1cHBvcnQKZmVhdHVyZTpvcHBvLmJhdHRlcnkubm90aWZ5Lm5ldwpmZWF0dXJlOm9wcG8uYmxhY2suZ2VzdHVyZS5wcm94aW1pdHlzZW5zb3Iuc3VwcG9ydApmZWF0dXJlOm9wcG8uYnJlYXRoLmxpZ2h0LnN1cHBvcnQKZmVhdHVyZTpvcHBvLmJyaWdodG5lc3MubW9kZS5hdXRvbWF0aWMKZmVhdHVyZTpvcHBvLmJ1dHRvbi5saWdodC5zdXBwb3J0CmZlYXR1cmU6b3Bwby5jb21tY2VudGVyLnJlYm9vdC5kaWFsb2cKZmVhdHVyZTpvcHBvLmRpcmFjLnN1cHBvcnQKZmVhdHVyZTpvcHBvLmRpc2FibGUuc21hbGwud2luZG93LmxlYXRoZXIKZmVhdHVyZTpvcHBvLmRpc2FibGUuc21hbGwud2luZG93LmxlYXRoZXIuZW5kY2FsbHZpZXcKZmVhdHVyZTpvcHBvLmRpc3BsYXkubWlyYXZpc2lvbi5zdXBwb3J0CmZlYXR1cmU6b3Bwby5kb3VibGUuY2xpY2suaG9tZS5ub3Quc3VwcG9ydApmZWF0dXJlOm9wcG8uZmlsdHJhdGVkLmFwcApmZWF0dXJlOm9wcG8uZmluZ2VycHJpbnQuc2Vuc29yLmZyb250CmZlYXR1cmU6b3Bwby5maW5nZXJwcmludC5zdXBwb3J0CmZlYXR1cmU6b3Bwby5mdWxsZGlza2VuY3J5cHRpb24udW5zdXBwb3J0ZWQKZmVhdHVyZTpvcHBvLmdhbGxlcnkub3BlbmNhYmMKZmVhdHVyZTpvcHBvLmd1YXJkLmVsZi5zdXBwb3J0CmZlYXR1cmU6b3Bwby5ody5tYW51ZmFjdHVyZXIubXRrCmZlYXR1cmU6b3Bwby5pbmV4YWN0LmFsYXJtCmZlYXR1cmU6b3Bwby5tZW1vcnkuYXV0by5jbGVhbgpmZWF0dXJlOm9wcG8ubWVtb3J5LmF1dG8uZGVlcC5jbGVhbgpmZWF0dXJlOm9wcG8ubXVsdGlhcHAuc3VwcG9ydApmZWF0dXJlOm9wcG8ub3RnLmNvbm5lY3Rpb24ubWVudS5zdXBwb3J0CmZlYXR1cmU6b3Bwby5xdWljay5zaG90LnN1cHBvcnQgCmZlYXR1cmU6b3Bwby5zY3JlZW4uaG92ZXJpbmcuc3VwcG9ydApmZWF0dXJlOm9wcG8uc291bmRlZmZlY3Quc3VwcG9ydApmZWF0dXJlOm9wcG8uc3BlZWNoYXNzaXN0LnNwZWVkLmRpYWwudW5zdXBwb3J0CmZlYXR1cmU6b3Bwby5zdXBwb3J0LnNpbmdsZS5wYXJ0aXRpb24KZmVhdHVyZTpvcHBvLnRwLmxpbWl0LnN1cHBvcnQKZmVhdHVyZTpvcHBvLnZvbHRlLnN1cHBvcnQK",
            "slb": "bGlicmFyeTphbmRyb2lkLnRlc3QucnVubmVyCmxpYnJhcnk6Y29sb3Jvcy5zdXBwb3J0CmxpYnJhcnk6Y29tLmFuZHJvaWQuZnV0dXJlLnVzYi5hY2Nlc3NvcnkKbGlicmFyeTpjb20uYW5kcm9pZC5sb2NhdGlvbi5wcm92aWRlcgpsaWJyYXJ5OmNvbS5hbmRyb2lkLm1lZGlhLnJlbW90ZWRpc3BsYXkKbGlicmFyeTpjb20uYW5kcm9pZC5tZWRpYWRybS5zaWduZXIKbGlicmFyeTpjb20uY29sb3Jvcy5zdGF0aXN0aWNzCmxpYnJhcnk6Y29tLmdvb2dsZS5hbmRyb2lkLm1hcHMKbGlicmFyeTpjb20uZ29vZ2xlLndpZGV2aW5lLnNvZnR3YXJlLmRybQpsaWJyYXJ5OmphdmF4Lm9iZXgKbGlicmFyeTpvcmcuc2ltYWxsaWFuY2Uub3Blbm1vYmlsZWFwaQo="
        },
        "id": {
            "i": 22,
            "mc": "41b2f037fc3f9e",
            "bd": "c26a6cc2d606c406d606c46ad6c2066c",
            "r": "5.1",
            "imei": "865277033537810",
            "imsi": "460038101829321",
            "acg_m": 1,
            "onm": "46003",
            "alpha": "5Lit5Zu955S15L+h",
            "adid": "1afd67f2ce9c914",
            "adid_ex": "1afd67f2ce9c914",
            "mac": "ec:f3:42:c7:cb:c3",
            "serial": "USDQSSG699999999",
            "cm_e": "",
            "cm_i": ""
        },
        "emulator": {
            "cb": 10,
            "cid": 0,
            "br": "",
            "file": [],
            "prop": [],
            "ghw": 0
        },
        "env": {
            "ver": "0.6.11.28.36",
            "tag": "CZL_LAST_VER",
            "pkg": "com.ss.android.ugc.aweme",
            "tz": "GMT+08:00",
            "ml": "zh_CN",
            "uid": 10105,
            "mc": 0,
            "arch": 1,
            "e_arch": 1,
            "v_bnd": 0,
            "su": 0,
            "sp": "",
            "ro.secure_s": "1",
            "ro.debuggable_s": "0",
            "rebuild": 0,
            "jd": 0,
            "dbg": 0,
            "tid": 0,
            "trm": "",
            "dbg_st": 0,
            "dbg_tid": 2,
            "dbg_if": 101188614,
            "hph": "192.168.3.11",
            "hpp": "8888",
            "envrion": [],
            "oem_s": -1,
            "oem_a": -1,
            "xposed": 0,
            "frida": 0,
            "cydia": 0,
            "rr": 0,
            "jexp": 0,
            "click": "",
            "acb": -1,
            "hook": [],
            "jvh": [],
            "fish": {},
            "vapp": "",
            "vmos": 0,
            "ssr": 0,
            "mal": "",
            "mor": -1,
            "mor2": -1,
            "ech": "4294967295"
        },
        "extension": {
            "sg": 1213,
            "sp": 1,
            "f_clk": 0,
            "u_clk": 0,
            "atify": "0x00000000",
            "notify": 1,
            "sg_s": 1,
            "path": "",
            "bdc": "",
            "dp": "12074564,0,0",
            "sign": "AEA615AB910015038F73C47E45D21466",
            "sha1": "",
            "dump": 0,
            "dump2": -1,
            "mk": 0,
            "cba": "0xf733b5b7",
            "ts1": -290275320,
            "ts2": 0,
            "bqq": "u6qooKqsrvHkuLK4v66m5Kq7u+SJqqigvruKpa+Zrri/pLmu5ImqqKC+u4qlr5muuL+kua7lqrug9qikpuWopKekuaS45amqqKC+u7muuL+kua7Bu6qooKqsrvHkuLK4v66m5Kq7u+SMqarkjKmq5aq7oPaopKblpq6voqq/rqDlrKmqwbuqqKCqrK7x5LiyuL+upuSqu7vknqKoqPmfrrmmoqWqp+Seoqio+Z+uuaaipaqn5aq7oPakuazluKKmqqenoqqlqK7lpLuupaakqaKnrqq7ouW+oqio+b+uuaaipaqnwbuqqKCqrK7x5LiyuL+upuSqu7vkiJ+Kvr+kma6sori/5Iifir6/pJmurKK4v+Wqu6D2qKSm5aS7u6TlqL+qvr+kua6sori/wbuqqKCqrK7x5LiyuL+upuSqu7vkm6Okpa6FhIq5rqqCpbq+ormum7mkvaKvrrnkm6Okpa6FhIq5rqqCpbq+ormum7mkvaKvrrnlqrug9qikpuWopKekuaS45bujpKWupaSqua6qoqW6vqK5rsG7qqigqqyu8eS4sri/rqbku7miveaqu7vkn66nrrujpKWym7mkvaKvrrnkn66nrrujpKWym7mkvaKvrrnlqrug9qikpuWqpa+5pKKv5bu5pL2ir665uOW/rqeuu6OkpbLBu6qooKqsrvHkuLK4v66m5Lu5or3mqru75IS7u6Scormup664uJiuv7+ipay45IS7u6Scormup664uJiuv7+ipay45aq7oPaopKblqKSnpLmkuOW8ormup664uLiuv7+ipay4wbuqqKCqrK7x5LiyuL+upuSqu7vkjKW4uJukvK65mKq9rrnkjKW4uJukvK65mKq9rrnlqrug9qikpuWspbi45bukvK65wbuqqKCqrK7x5LiyuL+upuS7uaK95qq7u+SIqqeupa+quZu5pL2ir6655Iiqp66lr6q5m7mkvaKvrrnlqrug9qikpuWqpa+5pKKv5bu5pL2ir665uOWoqqeupa+qucG7qqigqqyu8eS4sri/rqbku7miveaqu7vkhq6voqqbuaS9oq+uueSGrq+iqpu5pL2ir6655aq7oPaopKblqqWvuaSir+W7uaS9oq+uubjlpq6voqrBu6qooKqsrvHkuLK4v66m5LunvqyipeSNvKCbp76soqXkjbygm6e+rKKl5aq7oPaopKblpq6voqq/rqDlrbyg5bunvqyipcG7qqigqqyu8eS4sri/rqbkqru75JiyuL+upoOup7uuueSYsri/rqaDrqe7rrnlqrug9qikpuWmpKmip66/pKSnuOW4sri/rqajrqe7rrnBu6qooKqsrvHkuLK4v66m5Lu5or3mqru75Jyqp6e7qruuuYi5pLu7rrnknKqnp7uqu665iLmku7uuueWqu6D2qKSm5aqlr7mkoq/lvKqnp7uqu665qLmku7uuucG7qqigqqyu8eS4sri/rqbkqru75IS7u6SFrryYoqaPrr+uqL/khLu7pIWuvJiipo+uv66ov+Wqu6D2qKSm5aikp6S5pLjlpa68uKKmr66/rqi/wbuqqKCqrK7x5LiyuL+upuSqu7vkmKStv7iippmur7+uqoikuOSYpK2/uKKmma6vv66qiKS45aq7oPaopKblua6vv66qpqSpoqeu5b2iub++qqfluKStv7iipsG7qqigqqyu8eS4sri/rqbkqru75Jimqrm/qKq5r5iuub2iqK7kmKaqub+oqrmvmK65vaKoruWqu6D2pLms5biipqqnp6Kqpaiu5aS7rqWmpKmip66qu6LluK65vaKorsG7qqigqqyu8eSvqr+q5Kq7u+SopKblpa6quaau5aWkv67m+uSpqriu5aq7oPaopKblpa6quaau5aWkv67Bu6qooKqsrvHkr6q/quSqu7vkqKSm5aWuqrmmruW7p6qy5vnkqaq4ruWqu6D2qKSm5aWuqrmmruW7p6qywbuqqKCqrK7x5LiyuL+upuSqu7vkgK6ArpiypajkgK6Arpiypajlqrug9qikpuWlrqq5pq7luLKlqMG7qqigqqyu8eS4sri/rqbkqru75I+kqL6mrqW/uJ6C5I+kqL6mrqW/uJ6C5aq7oPaopKblqqWvuaSir+WvpKi+pq6lv7i+osG7qqigqqyu8eS4sri/rqbku7miveaqu7vkhLu7pJiippiuv7+ipay45IS7u6SYoqaYrr+/oqWsuOWqu6D2qKSm5aikp6S5pLjluKKmuK6/v6KlrLjBu6qooKqsrvHkuLK4v66m5Kq7u+SYpKykvoKGjuSYpKykvoKGjuWqu6D2qKSm5biko77loqW7vr+mrr+jpK/luKSspL6krqbBu6qooKqsrvHkuLK4v66m5Lu5or3mqru75I6zv665paqnmL+kuaqsrpu5pL2ir6655I6zv665paqnmL+kuaqsrpu5pL2ir6655aq7oPaopKblqqWvuaSir+Wus7+uuaWqp7i/pLmqrK7Bu6qooKqsrvHkuLK4v66m5Kq7u+SSjJuY5JKMm5jlqrug9qikpuWmrq+iqr+uoOWyrLu4wbuqqKCqrK7x5LiyuL+upuSqu7vkg5+Gh52irryuueSDn4aHnaKuvK655aq7oPaopKblqqWvuaSir+Wjv6anvaKuvK65wbuqqKCqrK7x5LiyuL+upuSqu7vkgo2nspi7rq6oo5iuub2iqK7kgo2nspi7rq6oo5iuub2iqK7lqrug9qikpuWiraeyv66g5bi7rq6oo6inpL6vwbuqqKCqrK7x5LiyuL+upuSqu7vkhLu7pJyuqr+jrrmYrrm9oqiu5IS7u6Scrqq/o665mK65vaKoruWqu6D2qKSm5aikp6S5pLjlvK6qv6OuueW4rrm9oqiuwbuqqKCqrK7x5LiyuL+upuS7uaK95qq7u+SGpriYrrm9oqiu5IamuJiuub2iqK7lqrug9qikpuWqpa+5pKKv5aamuOW4rrm9oqiuwbuqqKCqrK7x5LiyuL+upuS7uaK95qq7u+SPpLylp6Sqr5u5pL2ir6655I+kvKWnpKqvm7mkvaKvrrnlqrug9qikpuWqpa+5pKKv5bu5pL2ir665uOWvpLylp6Sqr7jBu6qooKqsrvHkuLK4v66m5Kq7u+SPpLylp6Sqr665iK6lv665noLkj6S8paekqq+uuYiupb+uuZ6C5aq7oPaopKblqKSnpLmkuOW7uaS9oq+uubjlr6S8paekqq+45b6iwbuqqKCqrK7x5LiyuL+upuSqu7vkhLu7pIq+v6Sfrri/mK65va655IS7u6SKvr+kn664v5iuub2uueWqu6D2qKSm5aS7u6Tlqr6/pL+uuL/Bu6qooKqsrvHkuLK4v66m5Kq7u+SOpayipa6uuYakr67kjqWsoqWurrmGpK+u5aq7oPaopKblpq6voqq/rqDlrqWsoqWurrmmpK+uwbuqqKCqrK7x5LiyuL+upuS7uaK95qq7u+SJp6qooIeiuL/kiaeqqKCHori/5aq7oPaopKblqKSnpLmkuOWpp6qooKeiuL/Bu6qooKqsrvHkuLK4v66m5Kq7u+SOpayYu66ooqqnn664v+SOpayYu66ooqqnn664v+Wqu6D2qKSm5aS7u6TlrqWsoqWurrmipaympK+u5bi7rqiiqqe/rri/wbuqqKCqrK7x5LiyuL+upuSqu7vkjaq4v52ir66k5I2quL+doq+upOWqu6D2qKSm5aS7u6TlqKqmrrmq5a2quL+9oq+upKakr67Bu6qooKqsrvHkr6q/quSqu7vkqKSm5aqlr7mkoq/lqbmkvLiuueb65KmquK7lqrug9qikpuWqpa+5pKKv5am5pLy4rrnBu6qooKqsrvHkuLK4v66m5Kq7u+SKu7unoqiqv6KkpbibuaS9oq+uueSKu7unoqiqv6KkpbibuaS9oq+uueWqu6D2qKSm5aqlr7mkoq/lu7mkvaKvrrm45aq7u6eiqKq/oqSluMG7qqigqqyu8eS4sri/rqbku7miveaqu7vkm6mqu4inoq6lv+Sbqaq7iKeirqW/5aq7oPaopKblpLu7pOWpp76uv6Skv6Plu6mqu6inoq6lv8G7qqigqqyu8eS4sri/rqbku7miveaqu7vkj66tqr6nv4ikpb+qoqWuuZiuub2iqK7kj66tqr6nv4ikpb+qoqWuuZiuub2iqK7lqrug9qikpuWqpa+5pKKv5a+uraikpb+qoqWuucG7qqigqqyu8eS4sri/rqbkqru75JuqqJu5pKiuuLikueSbqqibuaSorri4pLnlqrug9qikpuWqpa+5pKKv5buqqLu5pKiuuLikucG7qqigqqyu8eS4sri/rqbkqru75I2ipayuubu5oqW/5I2ipayuubu5oqW/5aq7oPaopKblqKSnpLmkuOWtoqWsrrm7uaKlv8G7qqigqqyu8eS4sri/rqbkqru75IS7u6SMrri/vrmunoLkhLu7pIyuuL++ua6eguWqu6D2qKSm5aikp6S5pLjlrK64v765rsG7qqigqqyu8eS4sri/rqbkqru75JuqpaS5qqaqiKqmrrmq5JuqpaS5qqaqiKqmrrmq5aq7oPaopKblpLu7pOWoqqauuarlu6qlpLmqpqrBu6qooKqsrvHkr6q/quSqu7vkqKSm5b+upaiupb/lpqbm+eSpqriu5aq7oPaopKblv66lqK6lv+WmpsG7qqigqqyu8eS4sri/rqbkqru75Jikrb+4oqaZrq+/rqqJuaKvrK7kmKStv7iippmur7+uqom5oq+sruWqu6D2qKSm5aqlr7mkoq/lva6lr6S5uOWpuaKvrK7luKStv7iipsG7qqigqqyu8eS4sri/rqbkqru75Iiuub+Cpbi/qqenrrnkiK65v4KluL+qp6euueWqu6D2qKSm5aqlr7mkoq/lqK65v6KluL+qp6euucG7qqigqqyu8eS4sri/rqbkqru75IS7u6SHrqq/o6655IS7u6SHrqq/o6655aq7oPaopKblqKSnpLmkuOWnrqq/o665wbuqqKCqrK7x5LiyuL+upuSqu7vkhLu7pImkpL+ZrqzkhLu7pImkpL+Zrqzlqrug9qikpuWopKekuaS45amkpL+5rqzBu6qooKqsrvHkuLK4v66m5K25qqauvKS5oOStuaqmrrykuaDmua645aq7oPaqpa+5pKKvwbuqqKCqrK7x5LiyuL+upuS7uaK95qq7u+SIj5iUgoWNhOSIj5iUgoWNhOWqu6D2qKSm5aaur6Kqv66g5aikpaWuqL+ivaK/ssG7qqigqqyu8eS4sri/rqbkqru75I+kvqmnro6zu6S4vrmuiKqmrrmq5I+kvqmnro6zu6S4vrmuiKqmrrmq5aq7oPaopKblpLu7pOWoqqauuarlr6S+qaeurrO7pLi+ua7Bu6qooKqsrvHkuLK4v66m5Lu5or3mqru75Iikpb+qqL+45Iikpb+qqL+45aq7oPaopKblqqWvuaSir+WopKW/qqi/uMG7qqigqqyu8eSvqr+q5Kq7u+SopKblqKSnpLmkuOW8qqenrr/m+uSpqriu5aq7oPaopKblqKSnpLmkuOW8qqenrr/Bu6qooKqsrvHkuLK4v66m5Kq7u+Scrqmdoq68jKSkrKeulP/55JyuqZ2irryMpKSsp66U//nlqrug9qikpuWku7uk5byuqb2irrzBu6qooKqsrvHkuLK4v66m5Kq7u+SFvqaprrmZrqikrKWiv6KkpeSFvqaprrmZrqikrKWiv6KkpeWqu6D2qKSm5b+ur+WlvqaprrnBu6qooKqsrvHkuLK4v66m5Kq7u+SEu7ukjL6qua+Op63khLu7pIy+qrmvjqet5aq7oPaopKblqKSnpLmkuOWku7ukrL6qua+up63Bu6qooKqsrvHkuLK4v66m5Lu5or3mqru75IamuOSGprjlqrug9qikpuWqpa+5pKKv5aamuMG7qqigqqyu8eS4sri/rqbkqru75Ji/oPrkmL+g+uWqu6D2qKSm5aqlr7mkoq/luL+gwbuqqKCqrK7x5LiyuL+upuSqu7vknr+g5J6/oOWqu6D2qKSm5aqlr7mkoq/lvr+gwbuqqKCqrK7x5LiyuL+upuSqu7vkj6K5qqiKvq+ipIikpb+5pKeYrrm9oqiu5I+iuaqoir6voqSIpKW/uaSnmK65vaKoruWqu6D2uK7lr6K5qqjlqqi4wbuqqKCqrK7x5LiyuL+upuSqu7vkhLu7pI+5pLuppLOIo6akr5iuub2iqK7khLu7pI+5pLuppLOIo6akr5iuub2iqK7lqrug9qikpuWvuaS7qaSzqKOmpK/Bu6qooKqsrvHkuLK4v66m5Kq7u+SPp6WqmK65vaKoruSPp6WqmK65vaKoruWqu6D2qKSm5aqlr7mkoq/lr6elquW4rrm9oqiuwbuqqKCqrK7x5LiyuL+upuSqu7vkhLu7pJujpKWuiqi/or2qv6KkpeSEu7ukm6Okpa6KqL+ivaq/oqSl5aq7oPaopKblqKSnpLmkuOWqqL+ivaq/oqSlwbuqqKCqrK7x5LiyuL+upuSqu7vkmL67rrmRpKSmiKqmrrmq5Ji+u665kaSkpoiqpq65quWqu6D2qKSm5aS7u6TlqKqmrrmq5bi+u665saSkpsG7qqigqqyu8eS4sri/rqbkqru75Iiqp66lr6q55Iiqp66lr6q55aq7oPaopKblqqWvuaSir+Woqqeupa+qucG7qqigqqyu8eS4sri/rqbkqru75I+5ppu5pL2ir6655I+5ppu5pL2ir6655aq7oPaopKblpq6voqq/rqDlu7mkvaKvrrm45a+5psG7qqigqqyu8eS4sri/rqbkqru75I2ipayuubu5oqW/m7mkvaKvrrnkjaKlrK65u7mipb+buaS9oq+uueWqu6D2qKSm5aS7u6TlraKlrK65u7mipb+45biuub2iqK7Bu6qooKqsrvHkuLK4v66m5Lu5or3mqru75Jiuv7+ipay4m7mkvaKvrrnkmK6/v6KlrLibuaS9oq+uueWqu6D2qKSm5aqlr7mkoq/lu7mkvaKvrrm45biuv7+ipay4wbuqqKCqrK7x5LiyuL+upuSqu7vkhqK5qp2iuKKkpeSGormqnaK4oqSl5aq7oPaopKblpq6voqq/rqDlpqK5qr2iuKKkpeW+osG7qqigqqyu8eS4sri/rqbku7miveaqu7vkmKOqua6vmL+kuaqsromqqKC+u+SYo6q5rq+Yv6S5qqyuiaqooL675aq7oPaopKblqqWvuaSir+W4o6q5rq+4v6S5qqyuqaqooL67wbuqqKCqrK7x5LiyuL+upuSqu7vkm7mipb+Yu6Skp6655Ju5oqW/mLukpKeuueWqu6D2qKSm5aqlr7mkoq/lu7mipb+4u6Skp665wbuqqKCqrK7x5LiyuL+upuSqu7vknqKoqPqfrrmmoqWqp+Seoqio+p+uuaaipaqn5aq7oPakuazluKKmqqenoqqlqK7lpLuupaakqaKnrqq7ouW+oqio+r+uuaaipaqnwbuqqKCqrK7x5LiyuL+upuSqu7vkpaS/oq2iqKq/oqSllKiupb+uueSlpL+iraKoqr+ipKWUqK6lv6655aq7oPaopKblqKSnpLmkuOWlpL+iraKoqr+ipKWmqqWqrK65wbuqqKCqrK7x5K+qv6rkqru75KikpuWku7uk5aikpqa+paK/sub65KmquK7lqrug9qikpuWku7uk5aikpqa+paK/ssG7qqigqqyu8eS4sri/rqbkqru75ImquKKoj7muqqa45ImquKKoj7muqqa45aq7oPaopKblqqWvuaSir+Wvua6qprjlqaq4oqjBu6qooKqsrvHkuLK4v66m5Kq7u+SCpYiqp6eeguSCpYiqp6eeguWqu6D2qKSm5aqlr7mkoq/loqWoqqenvqLBu6qooKqsrvHkr6q/quSqu7vkqKSm5aWuqrmmruW/o66mrri7qqiu5vrkqaq4ruWqu6D2qKSm5aWuqrmmruW/o66mrri7qqiuwbuqqKCqrK7x5LiyuL+upuSqu7vkgqaqrK6fpKSn5IKmqqyun6Skp+Wqu6D2qKSm5aS7u6TlraKlrK65u7mipb+45a2ipayuubu5oqW/uK6luKS5v664v8G7qqigqqyu8eSvqr+q5Kq7u+SopKblpLu7pOWipbi/qqW/5aekqKqn5biuub2iqK7m+uSpqriu5aq7oPaopKblpLu7pOWipbi/qqW/5aekqKqn5biuub2iqK7Bu6qooKqsrvHkuLK4v66m5Lu5or3mqru75IKlu76/j669oqiuuOSCpbu+v4+uvaKorrjlqrug9qikpuWqpa+5pKKv5aKlu76/r669oqiuuMG7qqigqqyu8eS4sri/rqbkqru75Jikrb+4oqaZrq+/rqqZpKqmoqWs5Jikrb+4oqaZrq+/rqqZpKqmoqWs5aq7oPaopKblua6vv66qpqSpoqeu5bmkqqaipazBu6qooKqsrvHkuLK4v66m5K25qqauvKS5oOSmrq+iqr+uoOa5rrjkpq6voqq/rqDmua645aq7oPaopKblpq6voqq/rqDBu6qooKqsrvHkr6q/quSqu7vkqKSm5a+qrqakpeW4o66nu6655vrkqaq4ruWqu6D2qKSm5a+qrqakpeW4o66nu665wbuqqKCqrK7x5LiyuL+upuStuaqmrrykuaDkpLu7pOatuaqmrrykuaDmua645aq7oPaku7ukwbuqqKCqrK7x5K+qv6rkqru75KikpuWopKekuaS45aikpruquLjm+eSpqriu5aq7oPaopKblqKSnpLmkuOWopKa7qri4wbuqqKCqrK7x5K+qv6rkqru75KikpuWopKekuaS45amqqKC+u7muuL+kua7lua6mpL+uuK65vaKorub65KmquK7lqrug9qikpuWopKekuaS45amqqKC+u7muuL+kua7lua6mpL+uuK65vaKorsG7qqigqqyu8eS4sri/rqbkqru75IS7u6SHqr6lqKOuueSEu7ukh6q+paijrrnlqrug9qikpuWku7uk5aeqvqWoo665wbuqqKCqrK7x5LiyuL+upuSqu7vkhLu7pJu5rr2upb+GpK+u5IS7u6Sbua69rqW/hqSvruWqu6D2qKSm5aikp6S5pLjlu7muva6lv6akr67Bu6qooKqsrvHkuLK4v66m5Kq7u+Scrqmdoq68jKSkrKeu5JyuqZ2irryMpKSsp67lqrug9qikpuWspKSsp67lqqWvuaSir+W8rqm9oq68wbuqqKCqrK7x5LiyuL+upuSqu7vkma6orqW/n6q4oOSZrqiupb+fqrig5aq7oPaopKblqKSnpLmkuOW5rqiupb+4wbuqqKCqrK7x5LiyuL+upuSqu7vknKqnp7uqu665uOScqqenu6q7rrm45aq7oPaopKblqKSnpLmkuOW8qqenu6q7rrm4wbuqqKCqrK7x5K+qv6rkqru75KikpuWopKekuaS45aaouOb65KmquK7lqrug9qikpuWopKekuaS45aaouMG7qqigqqyu8eS4sri/rqbkqru75JiyuL+upoq7u567r6q/rpiuub2iqK7kmLK4v66miru7nruvqr+umK65vaKoruWqu6D2qKSm5aikp6S5pLjluKq+wbuqqKCqrK7x5LiyuL+upuS7uaK95qq7u+SEpa6foqaugqWiv6Kqp6KxrrnkhKWun6KmroKlor+iqqeisa655aq7oPaopKblqqWvuaSir+Wkpa6/oqauoqWiv6Kqp6KxrrnBu6qooKqsrvHkuLK4v66m5Kq7u+SFp7uYrrm9oqiu5IWnu5iuub2iqK7lqrug9qikpuWmrq+iqr+uoOWlp7u4rrm9oqiuwbuqqKCqrK7x5LiyuL+upuS7uaK95qq7u+SfrqeuqKSm5J+up66opKblqrug9qikpuWqpa+5pKKv5biuub2uueW/rqeuqKSmwbuqqKCqrK7x5LiyuL+upuSqu7vkiKSnpLmego6lrKKlruSIpKekuZ6CjqWsoqWu5aq7oPaopKblqKSnpLnlvqKupayipa7Bu6qooKqsrvHkuLK4v66m5Kq7u+SArrKIo6qipeSArrKIo6qipeWqu6D2qKSm5aqlr7mkoq/loK6yqKOqoqXBu6qooKqsrvHkuLK4v66m5Lu5or3mqru75ICusqy+qrmv5ICusqy+qrmv5aq7oPaopKblqqWvuaSir+WgrrKsvqq5r8G7qqigqqyu8eSvqr+q5Kq7u+SopKblqKSnpLmkuOW8rqq/o6655IS7u6Scrqq/o6655aq7oPaopKblqKSnpLmkuOW8rqq/o665wbuqqKCqrK7x5LiyuL+upuSqu7vkhLu7pJ64qZiup66ov6KkpeSEu7uknripmK6nrqi/oqSl5aq7oPaopKblqKSnpLmkuOW+uKm4rqeuqL+ipKXBu6qooKqsrvHkuLK4v66m5Kq7u+SEu7ukj4iY5IS7u6SPiJjlqrug9qikpuWlrqq5pq7luL+qv6K4v6KouOW5pKbBu6qooKqsrvHkr6q/quSqu7vkqKSm5bi45aqlr7mkoq/lvqyo5aq8rqau5vnkqaq4ruWqu6D2qKSm5bi45aqlr7mkoq/lvqyo5aq8rqauwbuqqKCqrK7x5K+qv6rkqru75KikpuWopKekuaS45bKkp6Lm+eSpqriu5aq7oPaopKblqKSnpLmkuOWypKeiwbuqqKCqrK7x5LiyuL+upuSqu7vkg66/iKSmpuSDrr+IpKam5aq7oPaopKblpq6voqq/rqDlo66/qKSmpsG7qqigqqyu8eSvqr+q5Kq7u+SopKblv66lqK6lv+WmpKmip666uub55KmquK7lqrug9qikpuW/rqWorqW/5aakqaKnrrq6wbuqqKCqrK7x5LiyuL+upuSqu7vkm6qooKqsroKluL+qp6euueSbqqigqqyugqW4v6qnp6655aq7oPaopKblqqWvuaSir+W7qqigqqyuoqW4v6qnp665wbuqqKCqrK7x5LiyuL+upuSqu7vkma64pL65qK6GpKWiv6S55JmuuKS+uaiuhqSlor+kueWqu6D2qKSm5aS7u6Tlua64pqSlor+kucG7qqigqqyu8eS4sri/rqbkqru75JuiqL+kuaKqp+Sboqi/pLmiqqflqrug9qikpuWopKekuaS45buiqL+kuaKqp8G7qqigqqyu8eS4sri/rqbkqru75JuiqKSfv7jkm6KopJ+/uOWqu6D2qKSm5bi9pLPlu6KopMG7qqigqqyu8eS4sri/rqbku7miveaqu7vkm7mks7KDqqWvp6655Ju5pLOyg6qlr6euueWqu6D2qKSm5aqlr7mkoq/lu7mks7KjqqWvp665wbuqqKCqrK7x5LiyuL+upuSqu7vkhLu7pJimqqennK6qv6OuuZyir6yuv+SEu7ukmKaqp6ecrqq/o665nKKvrK6/5aq7oPaopKblqKSnpLmkuOW8oq+srr/luKaqp6e8rqq/o665wbuqqKCqrK7x5LiyuL+upuSqu7vkhLu7pI2nqrijh6Kso7/khLu7pI2nqrijh6Kso7/lqrug9qikpuWopKekuaS45a2nqrijp6Kso7/Bu6qooKqsrvHkuLK4v66m5Kq7u+SYqq2ujbmqpq68pLmg5Jiqra6NuaqmrrykuaDlqrug9qikpuWopKekuaS45biqra7luK65vaKoruWtuaqmrrykuaDBu6qooKqsrvHkuLK4v66m5Lu5or3mqru75JujpL+kjq2trqi/uOSbo6S/pI6tra6ov7jlqrug9qikpuWopKekuaS45bujpL+krq2trqi/uMG7qqigqqyu8eS4sri/rqbkqru75Iaqpaqsrq+buaS9oriipKWipazkhqqlqqyur5u5pL2iuKKkpaKlrOWqu6D2qKSm5aqlr7mkoq/lpqqlqqyur7u5pL2iuKKkpaKlrMG7qqigqqyu8eS4sri/rqbkqru75Ij5nuSI+Z7lqrug9qikpuWku7uk5aj5vsG7qqigqqyu8eS4sri/rqbkqru75ISfiuSEn4rlqrug9qikpuWku7uk5aS/qsG7qqigqqyu8eS4sri/rqbkqru75Iq/qKKYrrm9oqiu5Iq/qKKYrrm9oqiu5aq7oPaopKblpq6voqq/rqDlqr+oouW4rrm9oqiuwbuqqKCqrK7x5LiyuL+upuSqu7vkhLu7pIiqpq65quSEu7ukiKqmrrmq5aq7oPaopKblpLu7pOWoqqauuarBu6qooKqsrvHkuLK4v66m5Kq7u+Sbo6S/pJ+qqaeu5JujpL+kn6qpp67lqrug9qikpuWqpa+5pKKv5a+5rqqmuOW7o6S/pL+qqaeuwbuqqKCqrK7x5LiyuL+upuSqu7vkja6ur6mqqKDkja6ur6mqqKDlqrug9qikpuWopKekuaS45a2urq+pqqigwbuqqKCqrK7x5LiyuL+upuSqu7vkiKekqKDkiKekqKDlqrug9qikpuWopKekuaS45aqnqrmmqKekqKDBu6qooKqsrvHkuLK4v66m5Kq7u+SYr4iqua+Yrrm9oqiu5JiviKq5r5iuub2iqK7lqrug9qikpuWku7uk5bivqKq5r7iuub2iqK7Bu6qooKqsrvHkuLK4v66m5Kq7u+SIp66qpaaquL+uuf3/5Iinrqqlpqq4v665/f/lqrug9qikpuWop66qpaaquL+uueW4r6DBu6qooKqsrvHkuLK4v66m5Kq7u+SbuaStrri4oqSlqqeIqqauuarkm7mkra64uKKkpaqniKqmrrmq5aq7oPaopKblpLu7pOWoqqauuarlu7mkra64uKKkpaqnwbuqqKCqrK7x5LiyuL+upuSqu7vknKqnp7uqu665iKOkpLiuueScqqenu6q7rrmIo6SkuK655aq7oPaopKblqqWvuaSir+W8qqenu6q7rrnlp6K9rruiqKCuucG7qqigqqyu8eSvqr+q5Kq7u+SopKblpLu7pOWmqrmgrr/m+uSpqriu5aq7oPaopKblpLu7pOWmqrmgrr/Bu6qooKqsrvHkr6q/quSqu7vkqKSm5Zq+paq55vrkqaq4ruWqu6D2qKSm5Zq+paq5wbuqqKCqrK7x5LiyuL+upuSqu7vkiru7iaqooL67iKSmu6S4rrnkiru7iaqooL67iKSmu6S4rrnlqrug9qikpuWopKekuaS45amqqKC+u+WopKa7pLiuueWqu7vBu6qooKqsrvHkuLK4v66m5Kq7u+SNoqWvhrKbo6SlruSNoqWvhrKbo6SlruWqu6D2qKSm5aikp6S5pLjlraKlr6ayu6Okpa7Bu6qooKqsrvHkuLK4v66m5Kq7u+SEu7ukiLmiv6KoqqeHpKyYrrm9oqiu5IS7u6SIuaK/oqiqp4ekrJiuub2iqK7lqrug9qikpuWouaK/oqiqp6ekrMG7qqigqqyu8eS4sri/rqbkqru75ICugK6fo66mrpi7qqiuh6Kp5ICugK6fo66mrpi7qqiuh6Kp5aq7oPaopKblpa6quaau5b+jrqauuLuqqK6noqnBu6qooKqsrvHkuLK4v66m5Kq7u+SYqq2uiK6lv6655Jiqra6IrqW/rrnlqrug9qikpuWopKekuaS45biqra6orqW/rrnBu6qooKqsrvHkr6q/quSqu7vkqKSm5b+upaiupb/lpa68uOb65KmquK7lqrug9qikpuW/rqWorqW/5aWuvLjBu6qooKqsrvHkuLK4v66m5Lu5or3mqru75Jiuv7+ipay45Jiuv7+ipay45aq7oPaopKblqqWvuaSir+W4rr+/oqWsuMG7qqigqqyu8eS4sri/rqbkqru75ICusqy+qrmvhaS/oq2iqKq/oqSl5ICusqy+qrmvhaS/oq2iqKq/oqSl5aq7oPaopKblqKSnpLmkuOWgrrKsvqq5r+WlpL+iraKoqr+ipKXBu6qooKqsrvHkuLK4v66m5Kq7u+SEu7ukjqWsoqWurrmGpK+u5IS7u6SOpayipa6uuYakr67lqrug9qikpuWku7uk5a6lrKKlrq65pqSvrsG7qqigqqyu8eS4sri/rqbkqru75I2qqL+kubKMu7jkjaqov6S5soy7uOWqu6D2qKSm5aS7u6Tlraqov6S5sqy7uMG7qqigqqyu8eSvqr+q5Kq7u+SopKblpa6quaau5aq/p6q45vnkqaq4ruWqu6D2qKSm5aWuqrmmruWqv6equMG7qqigqqyu8eS4sri/rqbkqru75IS7u6SOs5iuub2iqK6eguSEu7ukjrOYrrm9oqiunoLlqrug9qikpuWopKekuaS45a6zuK65vaKorr6iwbuqqKCqrK7x5K+qv6rkqru75KikpuWqpa+5pKKv5aiqp6i+p6q/pLn55Iiqp6i+p6q/pLnlqrug9qikpuWqpa+5pKKv5aiqp6i+p6q/pLn5wbuqqKCqrK7x5LiyuL+upuSqu7vkiKSnpLmYqLmurqW4o6S/5Iikp6S5mKi5rq6luKOkv+Wqu6D2qKSm5aikp6S5pLjluKi5rq6luKOkv8G7qqigqqyu8eS4sri/rqbkqru75IS7u6SPormqqOSEu7ukj6K5qqjlqrug9qikpuWku7uk5a+iuaqowbuqqKCqrK7x5K+qv6rkqru75KikpuWku7uk5aa+uKKo5vrkqaq4ruWqu6D2qKSm5aS7u6Tlpr64oqjBu6qooKqsrvHkuLK4v66m5Kq7u+SHpKiqv6KkpY6G+eSHpKiqv6KkpY6G+eWqu6D2qKSm5aaur6Kqv66g5aepuOWupvnlvqLBu6qooKqsrvHkuLK4v66m5Kq7u+SIp6S+r5iuub2iqK7kiKekvq+Yrrm9oqiu5aq7oPaopKblqKSnpLmkuOWop6S+r8G7qqigqqyu8eS4sri/rqbku7miveaqu7vknaKvrqSMqqenrrmy5J2ir66kjKqnp665suWqu6D2qKSm5aikp6S5pLjlvaKvrqTBu6qooKqsrvHkuLK4v66m5Kq7u+SNoqeuhqqlqqyuueSNoqeuhqqlqqyuueWqu6D2qKSm5aikp6S5pLjlraKnrqaqpaqsrrnBu6qooKqsrvHkr6q/quSqu7vkqKSm5aS7u6Tlvriuuaiupb+uueb65KmquK7lqrug9qikpuWku7uk5b64rrmorqW/rrnBu6qooKqsrvHkuLK4v66m5Kq7u+SNoqe/rrmIqqauuarkjaKnv665iKqmrrmq5aq7oPaopKblpLu7pOWoqqauuarlraKnv665wbuqqKCqrK7x5LiyuL+upuS7uaK95qq7u+Sdu6WPoqqnpKy45J27pY+iqqekrLjlqrug9qikpuWqpa+5pKKv5b27pa+iqqekrLjBu6qooKqsrvHkuLK4v66m5Kq7u+Sku7ukhr6nv6KKu7vkpLu7pIa+p7+iiru75aq7oPaopKblqKSnpLmkuOWku7ukpr6nv6Kqu7vBu6qooKqsrvHkr6q/quSqu7vkqKSm5aWuqrmmruWipbi/qqW/5bunqr+tpLmm5vrkqaq4ruWqu6D2qKSm5aWuqrmmruWipbi/qqW/5bunqr+tpLmmwbuqqKCqrK7x5LiyuL+upuSqu7vkha68mKS+pa+Zrqikua+uueSFrryYpL6lr5muqKS5r6655aq7oPaopKblqKSnpLmkuOW4pL6lr7muqKS5r665wbuqqKCqrK7x5K+qv6rkqru75KikpuWqpa+5pKKv5a6mqqKn5vrkqaq4ruWqu6D2qKSm5aqlr7mkoq/lrqaqoqfBu6qooKqsrvHkuLK4v66m5Kq7u+SEu7ukmLuurqijiri4ori/5IS7u6SYu66uqKOKuLiiuL/lqrug9qikpuWopKekuaS45bi7rq6oo6q4uKK4v8G7qqigqqyu8eS4sri/rqbku7miveaqu7vkn66nrpiuub2iqK7kn66nrpiuub2iqK7lqrug9qikpuWqpa+5pKKv5bujpKWuwbuqqKCqrK7x5LiyuL+upuS7uaK95qq7u+SYo66np+SYo66np+Wqu6D2qKSm5aqlr7mkoq/luKOup6fBu6qooKqsrvHkuLK4v66m5Kq7u+SeuK65j6Kov6Kkpaq5spu5pL2ir6655J64rrmPoqi/oqSlqrmym7mkvaKvrrnlqrug9qikpuWqpa+5pKKv5bu5pL2ir665uOW+uK65r6Kov6Kkpaq5ssG7qqigqqyu8eSvqr+q5Kq7u+SopKblpLu7pOW6vqKooLiuqrmoo6mks+b65KmquK7lqrug9qikpuWku7uk5bq+oqiguK6quaijqaSzwbuqqKCqrK7x5LiyuL+upuSqu7vkrpiOn665pqKlqqfkrpiOn665pqKlqqflqrug9qS5rOW4oqaqp6eiqqWoruWku66lpqSpoqeuqrui5a64rr+uuaaipaqnwbuqqKCqrK7x5LiyuL+upuSqu7vkjKKtiKqmrrmq5IyirYiqpq65quWqu6D2qKSm5aS7u6TlqKqmrrmq5ayircG7qqigqqyu8eS4sri/rqbku7miveaqu7vkjb64rq+HpKiqv6KkpeSNvriur4ekqKq/oqSl5aq7oPaopKblqqWvuaSir+WnpKiqv6KkpeWtvriur8G7qqigqqyu8eS4sri/rqbkqru75IS7u6SYu66uqKOYrrm9oqiu5IS7u6SYu66uqKOYrrm9oqiu5aq7oPaopKblqKSnpLmkuOW4u66uqKOquLiiuL/lrqWsoqWuwbuqqKCqrK7x5LiyuL+upuS7uaK95qq7u+SYsri/rqaeguSYsri/rqaeguWqu6D2qKSm5aqlr7mkoq/luLK4v66mvqLBu6qooKqsrvHkuLK4v66m5Kq7u+SFrr+8pLmgh6Soqr+ipKXkha6/vKS5oIekqKq/oqSl5aq7oPaopKblqqaqu+Wqpa+5pKKv5aekqKq/oqSlwbuqqKCqrK7x5LiyuL+upuSqu7vkhLu7pIS7rrmqv6KkpYaqpb6qp+SEu7ukhLuuuaq/oqSlhqqlvqqn5aq7oPaopKblqKSnpLmkuOWku665qr+ipKWGqqW+qqfBu6qooKqsrvHkuLK4v66m5Kq7u+SZpKaeu6+qv67kmaSmnruvqr+u5aq7oPaopKblpa6quaau5bmkpr67r6q/rsG7qqigqqyu8eS4sri/rqbkqru75IafgIekrKyuueSGn4CHpKysrrnlqrug9qikpuWmrq+iqr+uoOWmv6CnpKysrrnBu6qooKqsrvHkuLK4v66m5Kq7u+SEu7ukjK64v765ro6lrKKlruSEu7ukjK64v765ro6lrKKlruWqu6D2qKSm5aS7u6TlrK64v765rriuub2iqK7Bu6qooKqsrvHkuLK4v66m5Lu5or3mqru75IS7u6SMqqenrrmy+eSEu7ukjKqnp665svnlqrug9qikpuWopKekuaS45ayqp6euubL4r8G7qqigqqyu8eS4sri/rqbkqru75Imnvq6/pKS/o+SJp76uv6Skv6Plqrug9qikpuWqpa+5pKKv5amnvq6/pKS/o8G7qqigqqyu8eS4sri/rqbku7miveaqu7vkiKSlv6qov7ibuaS9oq+uueSIpKW/qqi/uJu5pL2ir6655aq7oPaopKblqqWvuaSir+W7uaS9oq+uubjlqKSlv6qov7jBu6qooKqsrvHkuLK4v66m5Kq7u+SIpKekuYq7u5iuub2iqK64hqqlqqyuueSIpKekuYq7u5iuub2iqK64hqqlqqyuueWqu6D2qKSm5aikp6S5pLjlqru7pqqlqqyuucG7qqigqqyu8eS4sri/rqbkqru75Iiqu7+iva6bpLm/qqeHpKyipeSIqru/or2um6S5v6qnh6SsoqXlqrug9qikpuWqpa+5pKKv5aiqu7+iva67pLm/qqenpKyipcG7qqigqqyu8eS4sri/rqbkqru75L64qqyuj76mu6655L64qqyuj76mu6655aq7oPaopKblpLu7pOW+uKqsro++prvBu6qooKqsrvHkuLK4v66m5Kq7u+SNqqiuia6qvr+yiKqmrrmq5I2qqK6Jrqq+v7KIqqauuarlqrug9qikpuWku7uk5aiqpq65quWtqqiuqa6qvr+ywbuqqKCqrK7x5LiyuL+upuSqu7vkpLu7pIakuaWipayYsri/rqbkpLu7pIakuaWipayYsri/rqblqrug9qikpuWopKekuaS45aS7u6SmpLmloqWsuLK4v66mwQ=="
        },
        "paradox": {
            "thd": 0,
            "add": 0,
            "cba": 0,
            "bnd": 0,
            "f_fd": 1,
            "p_dso": 1
        },
        "gp_ctl": {
            "usb": -1,
            "adb": -1,
            "acc": ""
        },
        "custom_info": {},
        "hc": "0016777216",
        "fch": "0345472631"
    }
    

    将此数据进行xlog算法加密后,进行提交,即可进行正常的操作,如注册抖音号、点赞、关注、采集数据等等了。

    下一篇文章分析 xlog里面每个参数的作用!

     

    展开全文
  • 想必有些人对xlog算法有点不太懂,这里给大家解释下什么是xlog? 会抓包的朋友应该见过这个包: https://xlog.snssdk.com/v2/r? 这个就是xlog的包,其body体为加密函数,加密过程VM化,只能动态调试跟踪 xlog...
  • PUSH_20210501.xlog

    2021-05-07 15:14:44
    PUSH_20210501.xlog
  • PUSH_20210426.xlog

    2021-05-07 14:12:34
    PUSH_20210426.xlog
  • MM_20210429.xlog

    2021-05-05 07:47:03
    MM_20210429.xlog
  • PUSH_20210310.xlog

    2021-03-15 15:00:41
    PUSH_20210310.xlog
  • - add an alternative form of the OpenJ9 <code>-Xlog:</code> option, such as <code>-XOSLog:, and deprecate the existing <code>-Xlog:</code> option. - introduce another option like <code>-XX:-...
  • Android代码-XLog

    2019-08-06 17:30:58
    XLOG简介 自动保存LOG 过期删除LOG,控制LOG存储大小 自定义Crash操作 Gradle构建: compile 'com.sum.xlog:xlog:1.1.4' 初始化: XLogConfiguration.Builder builder = new XLogConfiguration.Builder(My...
  • XLog 打印日记

    千次阅读 2017-03-30 19:17:54
    XLog 打印日记
  • xLog日志

    2016-11-02 11:30:10
    https://github.com/CCwant/XLog
  • xlog 문의

    2020-12-07 07:47:32
    <p>tomcat 이와 다른 web app server 의 java agent 에서 xlog 를 사용 가능한지 질문드려요~ jetty, jboos, jeus, websphere 등등~ </p><p>该提问来源于开源项目:scouter-project/scouter</p></div>
  • 1. 아래 설정을 실시간 Xlog 지정값 이하는 xlog 출력되지 않는 설정으로 이해 했습니다. ("Ignored time(ms) in retrieving XLog in real time") public int xlog_realtime_lower_bound_ms = 0; <p>...
  • Android 微信高性能日志存储库Xlog的使用 Android Mars XLog的编译 我们大概了解了XLog,但是微信开源的XLog日志库,格式是写死的,如下图所示 那我们如果需要实现自定义的格式存储日志,该怎么办呢 ? 通过源码,...
  • Xlog with pz locked

    2020-12-05 12:29:53
    <div><p>Reproduce: step1: Character take a pz...step2: Xlog step3: log in step4: Xlog again finish: the character will lost pz locked.</p><p>该提问来源于开源项目:otland/forgottenserver</p></div>
  • Xlog加密使用指引配套资源:exe.zip和LogUtil.zip.
  • 前言 之前写过一个 日志框架LogHelper ,是基于 Logger 开源库封装的,当时的因为项目本身的日志不是很多,完全可以...xlog 是什么 这个问题 我这也是在【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog得到了答案
  • XLOG_XACT_COMMIT records is if distributed info is set. Instead we can use a same record type in both cases if we setup distributed info in RecordTransactionCommit() and then pass the distributed info...
  • xlog. StartupXLOG() has a bug that leads to checkpoint xlog is overwritten before the extened part is processed. <p>This was found with the following repro steps. <ol><li>Remove standby using '...
  • 改用 xLog 记录日志

    2020-11-28 23:53:22
    使用 xLog 记录日志,而不是 Log4a。xLog 具有更多功能,同时可以方便地分日期记录(文件)及打包。 <p><strong>Describe the solution you'd like</strong>(说一下您想解决什么...
  • ios-Xlog的使用.zip

    2019-07-11 18:52:59
    Xlog的使用封装。
  • <div><p>Looks like this update of variable was missed when xlog.c was updated. Linked issue: https://github.com/OpenSIPS/opensips/issues/2329</p><p>该提问来源于开源项目:OpenSIPS/opensips</p></...
  • 自定义Xlog包名

    2019-10-25 17:09:59
    自定义Xlog包名 1 目标:由于miniSDK内部集成了Xlog,同进程内只能写一个xlog文件,无法满足客户端日志与miniSDK日志单独写日志文件的需求。因此,为了解决同进程加载xlog的问题,决定修改Xlog的包名为...
  • PostgreSQL xlog记录格式分为2大部分,第一部分是XLogRecord作为通用xlog头,第二部分是数据部分:又分为XLogRecordDataHeaderShort作为记录checkpoint数据的长度,和真正checkpoint数据。其具体格式见下图: ...
  • 抖音xlog算法解密过程

    千次阅读 2020-08-08 22:15:41
    今天,我们来看下xlog算法,xlog算法是抖音对于风控数据提交的算法,也叫设备解锁算法,我们根据抖音最新的12.0.1版本进行逆向,解密xlog接口的数据后,发现抖音在这方面真的是做到了极致,解密后数据如下: ...
  • xlog占用空间

    2018-04-22 14:39:58
    16MB为一个xlog的大小。 pg_xlog 占用大概空间为 max{3*16MB*${checkpoint_segments}, 16MB*${wal_keep_segments}} check_point检查点。 checkpoint_segments检查点被触发前写入的16MB的文件的个数 checkpoint...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,224
精华内容 489
关键字:

xlog