{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,8 +1,8 @@\n-Zip file size: 68263 bytes, number of entries: 73\n+Zip file size: 68567 bytes, number of entries: 73\n -rw-r--r--  2.0 unx       64 b- defN 20-Apr-01 08:04 META-INF/MANIFEST.MF\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/qos/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/qos/command/\n@@ -30,46 +30,46 @@\n -rw-r--r--  2.0 unx     1192 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/CommandExecutor.java\n -rw-r--r--  2.0 unx     1565 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/DefaultCommandExecutor.java\n -rw-r--r--  2.0 unx     1024 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/NoSuchCommandException.java\n -rw-r--r--  2.0 unx     1607 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/annotation/Cmd.java\n -rw-r--r--  2.0 unx     3987 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/decoder/HttpCommandDecoder.java\n -rw-r--r--  2.0 unx     1725 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/decoder/TelnetCommandDecoder.java\n -rw-r--r--  2.0 unx     3716 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Help.java\n--rw-r--r--  2.0 unx     3384 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Ls.java\n--rw-r--r--  2.0 unx     3330 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Offline.java\n--rw-r--r--  2.0 unx     3381 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Online.java\n--rw-r--r--  2.0 unx     2864 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/PublishMetadata.java\n+-rw-r--r--  2.0 unx     3472 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Ls.java\n+-rw-r--r--  2.0 unx     3410 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Offline.java\n+-rw-r--r--  2.0 unx     3461 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Online.java\n+-rw-r--r--  2.0 unx     2927 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/PublishMetadata.java\n -rw-r--r--  2.0 unx     1305 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Quit.java\n--rw-r--r--  2.0 unx     4228 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Ready.java\n--rw-r--r--  2.0 unx     1536 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Version.java\n--rw-r--r--  2.0 unx     2195 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/util/CommandHelper.java\n--rw-r--r--  2.0 unx     2717 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/util/ServiceCheckUtils.java\n+-rw-r--r--  2.0 unx     4323 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Ready.java\n+-rw-r--r--  2.0 unx     1573 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/impl/Version.java\n+-rw-r--r--  2.0 unx     2259 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/util/CommandHelper.java\n+-rw-r--r--  2.0 unx     2779 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/command/util/ServiceCheckUtils.java\n -rw-r--r--  2.0 unx      990 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/common/QosConstants.java\n--rw-r--r--  2.0 unx     2832 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/ChangeTelnetHandler.java\n--rw-r--r--  2.0 unx     6757 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/CountTelnetHandler.java\n--rw-r--r--  2.0 unx     1775 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/CurrentTelnetHandler.java\n--rw-r--r--  2.0 unx    10965 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/InvokeTelnetHandler.java\n--rw-r--r--  2.0 unx     6684 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/ListTelnetHandler.java\n--rw-r--r--  2.0 unx     3964 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/LogTelnetHandler.java\n--rw-r--r--  2.0 unx     3845 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/PortTelnetHandler.java\n--rw-r--r--  2.0 unx     2775 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/SelectTelnetHandler.java\n--rw-r--r--  2.0 unx     2696 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/ShutdownTelnetHandler.java\n--rw-r--r--  2.0 unx     4027 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/TraceTelnetHandler.java\n--rw-r--r--  2.0 unx     4307 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/protocol/QosProtocolWrapper.java\n--rw-r--r--  2.0 unx     1253 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/DubboLogo.java\n--rw-r--r--  2.0 unx     4554 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/Server.java\n+-rw-r--r--  2.0 unx     2897 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/ChangeTelnetHandler.java\n+-rw-r--r--  2.0 unx     6920 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/CountTelnetHandler.java\n+-rw-r--r--  2.0 unx     1821 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/CurrentTelnetHandler.java\n+-rw-r--r--  2.0 unx    11226 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/InvokeTelnetHandler.java\n+-rw-r--r--  2.0 unx     6850 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/ListTelnetHandler.java\n+-rw-r--r--  2.0 unx     4055 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/LogTelnetHandler.java\n+-rw-r--r--  2.0 unx     3941 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/PortTelnetHandler.java\n+-rw-r--r--  2.0 unx     2835 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/SelectTelnetHandler.java\n+-rw-r--r--  2.0 unx     2759 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/ShutdownTelnetHandler.java\n+-rw-r--r--  2.0 unx     4120 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/legacy/TraceTelnetHandler.java\n+-rw-r--r--  2.0 unx     4430 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/protocol/QosProtocolWrapper.java\n+-rw-r--r--  2.0 unx     1278 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/DubboLogo.java\n+-rw-r--r--  2.0 unx     4710 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/Server.java\n -rw-r--r--  2.0 unx     5174 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/handler/HttpProcessHandler.java\n -rw-r--r--  2.0 unx     1953 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/handler/LocalHostPermitHandler.java\n--rw-r--r--  2.0 unx     4111 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/handler/QosProcessHandler.java\n--rw-r--r--  2.0 unx     1770 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/handler/TelnetIdleEventHandler.java\n--rw-r--r--  2.0 unx     3201 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/handler/TelnetProcessHandler.java\n+-rw-r--r--  2.0 unx     4222 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/handler/QosProcessHandler.java\n+-rw-r--r--  2.0 unx     1811 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/handler/TelnetIdleEventHandler.java\n+-rw-r--r--  2.0 unx     3274 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/server/handler/TelnetProcessHandler.java\n -rw-r--r--  2.0 unx      983 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/textui/TComponent.java\n -rw-r--r--  2.0 unx     2734 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/textui/TKv.java\n -rw-r--r--  2.0 unx     2269 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/textui/TLadder.java\n--rw-r--r--  2.0 unx    15617 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/textui/TTable.java\n--rw-r--r--  2.0 unx     7374 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/textui/TTree.java\n--rw-r--r--  2.0 unx      389 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.qos.command.BaseCommand\n--rw-r--r--  2.0 unx      476 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.remoting.telnet.TelnetHandler\n+-rw-r--r--  2.0 unx    16183 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/textui/TTable.java\n+-rw-r--r--  2.0 unx     7640 b- defN 20-Apr-01 08:04 org/apache/dubbo/qos/textui/TTree.java\n+-rw-r--r--  2.0 unx      397 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.qos.command.BaseCommand\n+-rw-r--r--  2.0 unx      484 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.remoting.telnet.TelnetHandler\n -rw-r--r--  2.0 unx       52 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.rpc.Protocol\n--rw-r--r--  2.0 unx     2954 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-qos/pom.xml\n+-rw-r--r--  2.0 unx     2877 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-qos/pom.xml\n -rw-r--r--  2.0 unx       64 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-qos/pom.properties\n-73 files, 168930 bytes uncompressed, 56597 bytes compressed:  66.5%\n+73 files, 171903 bytes uncompressed, 56901 bytes compressed:  66.9%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -661,2994 +661,2994 @@\n 03BE5 Extract Zip Spec      14 (20) '2.0'\n 03BE6 Extract OS            00 (0) 'MS-DOS'\n 03BE7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n 03BE9 Compression Method    0008 (8) 'Deflated'\n 03BEB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-03BEF CRC                   1E97BBCE (513260494)\n-03BF3 Compressed Size       00000439 (1081)\n-03BF7 Uncompressed Size     00000D38 (3384)\n+03BEF CRC                   E32E7BA0 (3811474336)\n+03BF3 Compressed Size       00000445 (1093)\n+03BF7 Uncompressed Size     00000D90 (3472)\n 03BFB Filename Length       0029 (41)\n 03BFD Extra Length          0000 (0)\n 03BFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n # WARNING: Offset 0x3BFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 03C28 PAYLOAD\n \n-04061 LOCAL HEADER #37      04034B50 (67324752)\n-04065 Extract Zip Spec      14 (20) '2.0'\n-04066 Extract OS            00 (0) 'MS-DOS'\n-04067 General Purpose Flag  0800 (2048)\n+0406D LOCAL HEADER #37      04034B50 (67324752)\n+04071 Extract Zip Spec      14 (20) '2.0'\n+04072 Extract OS            00 (0) 'MS-DOS'\n+04073 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04069 Compression Method    0008 (8) 'Deflated'\n-0406B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0406F CRC                   5DD1BF6F (1574027119)\n-04073 Compressed Size       000004A6 (1190)\n-04077 Uncompressed Size     00000D02 (3330)\n-0407B Filename Length       002E (46)\n-0407D Extra Length          0000 (0)\n-0407F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04075 Compression Method    0008 (8) 'Deflated'\n+04077 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0407B CRC                   C56E8E67 (3312356967)\n+0407F Compressed Size       000004B2 (1202)\n+04083 Uncompressed Size     00000D52 (3410)\n+04087 Filename Length       002E (46)\n+04089 Extra Length          0000 (0)\n+0408B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x407F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x408B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-040AD PAYLOAD\n+040B9 PAYLOAD\n \n-04553 LOCAL HEADER #38      04034B50 (67324752)\n-04557 Extract Zip Spec      14 (20) '2.0'\n-04558 Extract OS            00 (0) 'MS-DOS'\n-04559 General Purpose Flag  0800 (2048)\n+0456B LOCAL HEADER #38      04034B50 (67324752)\n+0456F Extract Zip Spec      14 (20) '2.0'\n+04570 Extract OS            00 (0) 'MS-DOS'\n+04571 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0455B Compression Method    0008 (8) 'Deflated'\n-0455D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-04561 CRC                   677CD800 (1736235008)\n-04565 Compressed Size       000004B1 (1201)\n-04569 Uncompressed Size     00000D35 (3381)\n-0456D Filename Length       002D (45)\n-0456F Extra Length          0000 (0)\n-04571 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04573 Compression Method    0008 (8) 'Deflated'\n+04575 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04579 CRC                   A95B3402 (2841326594)\n+0457D Compressed Size       000004BB (1211)\n+04581 Uncompressed Size     00000D85 (3461)\n+04585 Filename Length       002D (45)\n+04587 Extra Length          0000 (0)\n+04589 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4571: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4589: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0459E PAYLOAD\n+045B6 PAYLOAD\n \n-04A4F LOCAL HEADER #39      04034B50 (67324752)\n-04A53 Extract Zip Spec      14 (20) '2.0'\n-04A54 Extract OS            00 (0) 'MS-DOS'\n-04A55 General Purpose Flag  0800 (2048)\n+04A71 LOCAL HEADER #39      04034B50 (67324752)\n+04A75 Extract Zip Spec      14 (20) '2.0'\n+04A76 Extract OS            00 (0) 'MS-DOS'\n+04A77 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04A57 Compression Method    0008 (8) 'Deflated'\n-04A59 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-04A5D CRC                   15091C1F (352918559)\n-04A61 Compressed Size       00000490 (1168)\n-04A65 Uncompressed Size     00000B30 (2864)\n-04A69 Filename Length       0036 (54)\n-04A6B Extra Length          0000 (0)\n-04A6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04A79 Compression Method    0008 (8) 'Deflated'\n+04A7B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04A7F CRC                   E56C2CA8 (3849071784)\n+04A83 Compressed Size       0000049C (1180)\n+04A87 Uncompressed Size     00000B6F (2927)\n+04A8B Filename Length       0036 (54)\n+04A8D Extra Length          0000 (0)\n+04A8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4A6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4A8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04AA3 PAYLOAD\n+04AC5 PAYLOAD\n \n-04F33 LOCAL HEADER #40      04034B50 (67324752)\n-04F37 Extract Zip Spec      14 (20) '2.0'\n-04F38 Extract OS            00 (0) 'MS-DOS'\n-04F39 General Purpose Flag  0800 (2048)\n+04F61 LOCAL HEADER #40      04034B50 (67324752)\n+04F65 Extract Zip Spec      14 (20) '2.0'\n+04F66 Extract OS            00 (0) 'MS-DOS'\n+04F67 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-04F3B Compression Method    0008 (8) 'Deflated'\n-04F3D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-04F41 CRC                   AADA64B2 (2866439346)\n-04F45 Compressed Size       0000028D (653)\n-04F49 Uncompressed Size     00000519 (1305)\n-04F4D Filename Length       002B (43)\n-04F4F Extra Length          0000 (0)\n-04F51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+04F69 Compression Method    0008 (8) 'Deflated'\n+04F6B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+04F6F CRC                   AADA64B2 (2866439346)\n+04F73 Compressed Size       0000028D (653)\n+04F77 Uncompressed Size     00000519 (1305)\n+04F7B Filename Length       002B (43)\n+04F7D Extra Length          0000 (0)\n+04F7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4F51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4F7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-04F7C PAYLOAD\n+04FAA PAYLOAD\n \n-05209 LOCAL HEADER #41      04034B50 (67324752)\n-0520D Extract Zip Spec      14 (20) '2.0'\n-0520E Extract OS            00 (0) 'MS-DOS'\n-0520F General Purpose Flag  0800 (2048)\n+05237 LOCAL HEADER #41      04034B50 (67324752)\n+0523B Extract Zip Spec      14 (20) '2.0'\n+0523C Extract OS            00 (0) 'MS-DOS'\n+0523D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-05211 Compression Method    0008 (8) 'Deflated'\n-05213 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-05217 CRC                   CD1091C2 (3440415170)\n-0521B Compressed Size       000005E7 (1511)\n-0521F Uncompressed Size     00001084 (4228)\n-05223 Filename Length       002C (44)\n-05225 Extra Length          0000 (0)\n-05227 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0523F Compression Method    0008 (8) 'Deflated'\n+05241 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+05245 CRC                   DC712B5A (3698404186)\n+05249 Compressed Size       000005F1 (1521)\n+0524D Uncompressed Size     000010E3 (4323)\n+05251 Filename Length       002C (44)\n+05253 Extra Length          0000 (0)\n+05255 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5227: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5255: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05253 PAYLOAD\n+05281 PAYLOAD\n \n-0583A LOCAL HEADER #42      04034B50 (67324752)\n-0583E Extract Zip Spec      14 (20) '2.0'\n-0583F Extract OS            00 (0) 'MS-DOS'\n-05840 General Purpose Flag  0800 (2048)\n+05872 LOCAL HEADER #42      04034B50 (67324752)\n+05876 Extract Zip Spec      14 (20) '2.0'\n+05877 Extract OS            00 (0) 'MS-DOS'\n+05878 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-05842 Compression Method    0008 (8) 'Deflated'\n-05844 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-05848 CRC                   CA6DC12E (3396190510)\n-0584C Compressed Size       000002BF (703)\n-05850 Uncompressed Size     00000600 (1536)\n-05854 Filename Length       002E (46)\n-05856 Extra Length          0000 (0)\n-05858 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0587A Compression Method    0008 (8) 'Deflated'\n+0587C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+05880 CRC                   1F2281E7 (522355175)\n+05884 Compressed Size       000002CB (715)\n+05888 Uncompressed Size     00000625 (1573)\n+0588C Filename Length       002E (46)\n+0588E Extra Length          0000 (0)\n+05890 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5858: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5890: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05886 PAYLOAD\n+058BE PAYLOAD\n \n-05B45 LOCAL HEADER #43      04034B50 (67324752)\n-05B49 Extract Zip Spec      14 (20) '2.0'\n-05B4A Extract OS            00 (0) 'MS-DOS'\n-05B4B General Purpose Flag  0800 (2048)\n+05B89 LOCAL HEADER #43      04034B50 (67324752)\n+05B8D Extract Zip Spec      14 (20) '2.0'\n+05B8E Extract OS            00 (0) 'MS-DOS'\n+05B8F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-05B4D Compression Method    0008 (8) 'Deflated'\n-05B4F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-05B53 CRC                   8BEA30C0 (2347380928)\n-05B57 Compressed Size       00000348 (840)\n-05B5B Uncompressed Size     00000893 (2195)\n-05B5F Filename Length       0034 (52)\n-05B61 Extra Length          0000 (0)\n-05B63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+05B91 Compression Method    0008 (8) 'Deflated'\n+05B93 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+05B97 CRC                   0E9B786A (245069930)\n+05B9B Compressed Size       00000350 (848)\n+05B9F Uncompressed Size     000008D3 (2259)\n+05BA3 Filename Length       0034 (52)\n+05BA5 Extra Length          0000 (0)\n+05BA7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5B63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5BA7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05B97 PAYLOAD\n+05BDB PAYLOAD\n \n-05EDF LOCAL HEADER #44      04034B50 (67324752)\n-05EE3 Extract Zip Spec      14 (20) '2.0'\n-05EE4 Extract OS            00 (0) 'MS-DOS'\n-05EE5 General Purpose Flag  0800 (2048)\n+05F2B LOCAL HEADER #44      04034B50 (67324752)\n+05F2F Extract Zip Spec      14 (20) '2.0'\n+05F30 Extract OS            00 (0) 'MS-DOS'\n+05F31 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-05EE7 Compression Method    0008 (8) 'Deflated'\n-05EE9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-05EED CRC                   9A0D91FA (2584580602)\n-05EF1 Compressed Size       000003DD (989)\n-05EF5 Uncompressed Size     00000A9D (2717)\n-05EF9 Filename Length       0038 (56)\n-05EFB Extra Length          0000 (0)\n-05EFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+05F33 Compression Method    0008 (8) 'Deflated'\n+05F35 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+05F39 CRC                   966E868C (2523825804)\n+05F3D Compressed Size       000003E8 (1000)\n+05F41 Uncompressed Size     00000ADB (2779)\n+05F45 Filename Length       0038 (56)\n+05F47 Extra Length          0000 (0)\n+05F49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5EFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5F49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-05F35 PAYLOAD\n+05F81 PAYLOAD\n \n-06312 LOCAL HEADER #45      04034B50 (67324752)\n-06316 Extract Zip Spec      14 (20) '2.0'\n-06317 Extract OS            00 (0) 'MS-DOS'\n-06318 General Purpose Flag  0800 (2048)\n+06369 LOCAL HEADER #45      04034B50 (67324752)\n+0636D Extract Zip Spec      14 (20) '2.0'\n+0636E Extract OS            00 (0) 'MS-DOS'\n+0636F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0631A Compression Method    0008 (8) 'Deflated'\n-0631C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-06320 CRC                   93C23403 (2478978051)\n-06324 Compressed Size       0000023B (571)\n-06328 Uncompressed Size     000003DE (990)\n-0632C Filename Length       002D (45)\n-0632E Extra Length          0000 (0)\n-06330 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+06371 Compression Method    0008 (8) 'Deflated'\n+06373 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+06377 CRC                   93C23403 (2478978051)\n+0637B Compressed Size       0000023B (571)\n+0637F Uncompressed Size     000003DE (990)\n+06383 Filename Length       002D (45)\n+06385 Extra Length          0000 (0)\n+06387 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6330: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6387: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0635D PAYLOAD\n+063B4 PAYLOAD\n \n-06598 LOCAL HEADER #46      04034B50 (67324752)\n-0659C Extract Zip Spec      14 (20) '2.0'\n-0659D Extract OS            00 (0) 'MS-DOS'\n-0659E General Purpose Flag  0800 (2048)\n+065EF LOCAL HEADER #46      04034B50 (67324752)\n+065F3 Extract Zip Spec      14 (20) '2.0'\n+065F4 Extract OS            00 (0) 'MS-DOS'\n+065F5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-065A0 Compression Method    0008 (8) 'Deflated'\n-065A2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-065A6 CRC                   FA05AB13 (4194675475)\n-065AA Compressed Size       0000046B (1131)\n-065AE Uncompressed Size     00000B10 (2832)\n-065B2 Filename Length       0034 (52)\n-065B4 Extra Length          0000 (0)\n-065B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+065F7 Compression Method    0008 (8) 'Deflated'\n+065F9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+065FD CRC                   4EEFA113 (1324327187)\n+06601 Compressed Size       00000475 (1141)\n+06605 Uncompressed Size     00000B51 (2897)\n+06609 Filename Length       0034 (52)\n+0660B Extra Length          0000 (0)\n+0660D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x65B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x660D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-065EA PAYLOAD\n+06641 PAYLOAD\n \n-06A55 LOCAL HEADER #47      04034B50 (67324752)\n-06A59 Extract Zip Spec      14 (20) '2.0'\n-06A5A Extract OS            00 (0) 'MS-DOS'\n-06A5B General Purpose Flag  0800 (2048)\n+06AB6 LOCAL HEADER #47      04034B50 (67324752)\n+06ABA Extract Zip Spec      14 (20) '2.0'\n+06ABB Extract OS            00 (0) 'MS-DOS'\n+06ABC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-06A5D Compression Method    0008 (8) 'Deflated'\n-06A5F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-06A63 CRC                   4A88912B (1250464043)\n-06A67 Compressed Size       000007CB (1995)\n-06A6B Uncompressed Size     00001A65 (6757)\n-06A6F Filename Length       0033 (51)\n-06A71 Extra Length          0000 (0)\n-06A73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+06ABE Compression Method    0008 (8) 'Deflated'\n+06AC0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+06AC4 CRC                   9CF5D1EF (2633355759)\n+06AC8 Compressed Size       000007D6 (2006)\n+06ACC Uncompressed Size     00001B08 (6920)\n+06AD0 Filename Length       0033 (51)\n+06AD2 Extra Length          0000 (0)\n+06AD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6A73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6AD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-06AA6 PAYLOAD\n+06B07 PAYLOAD\n \n-07271 LOCAL HEADER #48      04034B50 (67324752)\n-07275 Extract Zip Spec      14 (20) '2.0'\n-07276 Extract OS            00 (0) 'MS-DOS'\n-07277 General Purpose Flag  0800 (2048)\n+072DD LOCAL HEADER #48      04034B50 (67324752)\n+072E1 Extract Zip Spec      14 (20) '2.0'\n+072E2 Extract OS            00 (0) 'MS-DOS'\n+072E3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-07279 Compression Method    0008 (8) 'Deflated'\n-0727B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0727F CRC                   0FA20D48 (262278472)\n-07283 Compressed Size       00000343 (835)\n-07287 Uncompressed Size     000006EF (1775)\n-0728B Filename Length       0035 (53)\n-0728D Extra Length          0000 (0)\n-0728F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+072E5 Compression Method    0008 (8) 'Deflated'\n+072E7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+072EB CRC                   60B50DD7 (1622478295)\n+072EF Compressed Size       0000034C (844)\n+072F3 Uncompressed Size     0000071D (1821)\n+072F7 Filename Length       0035 (53)\n+072F9 Extra Length          0000 (0)\n+072FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x728F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x72FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-072C4 PAYLOAD\n+07330 PAYLOAD\n \n-07607 LOCAL HEADER #49      04034B50 (67324752)\n-0760B Extract Zip Spec      14 (20) '2.0'\n-0760C Extract OS            00 (0) 'MS-DOS'\n-0760D General Purpose Flag  0800 (2048)\n+0767C LOCAL HEADER #49      04034B50 (67324752)\n+07680 Extract Zip Spec      14 (20) '2.0'\n+07681 Extract OS            00 (0) 'MS-DOS'\n+07682 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0760F Compression Method    0008 (8) 'Deflated'\n-07611 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-07615 CRC                   27D9ECF0 (668593392)\n-07619 Compressed Size       00000B77 (2935)\n-0761D Uncompressed Size     00002AD5 (10965)\n-07621 Filename Length       0034 (52)\n-07623 Extra Length          0000 (0)\n-07625 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+07684 Compression Method    0008 (8) 'Deflated'\n+07686 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0768A CRC                   78614F57 (2019643223)\n+0768E Compressed Size       00000B88 (2952)\n+07692 Uncompressed Size     00002BDA (11226)\n+07696 Filename Length       0034 (52)\n+07698 Extra Length          0000 (0)\n+0769A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7625: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x769A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-07659 PAYLOAD\n+076CE PAYLOAD\n \n-081D0 LOCAL HEADER #50      04034B50 (67324752)\n-081D4 Extract Zip Spec      14 (20) '2.0'\n-081D5 Extract OS            00 (0) 'MS-DOS'\n-081D6 General Purpose Flag  0800 (2048)\n+08256 LOCAL HEADER #50      04034B50 (67324752)\n+0825A Extract Zip Spec      14 (20) '2.0'\n+0825B Extract OS            00 (0) 'MS-DOS'\n+0825C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-081D8 Compression Method    0008 (8) 'Deflated'\n-081DA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-081DE CRC                   540DE20D (1410195981)\n-081E2 Compressed Size       000006AC (1708)\n-081E6 Uncompressed Size     00001A1C (6684)\n-081EA Filename Length       0032 (50)\n-081EC Extra Length          0000 (0)\n-081EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0825E Compression Method    0008 (8) 'Deflated'\n+08260 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+08264 CRC                   17A6F6D0 (396818128)\n+08268 Compressed Size       000006B7 (1719)\n+0826C Uncompressed Size     00001AC2 (6850)\n+08270 Filename Length       0032 (50)\n+08272 Extra Length          0000 (0)\n+08274 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x81EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8274: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-08220 PAYLOAD\n+082A6 PAYLOAD\n \n-088CC LOCAL HEADER #51      04034B50 (67324752)\n-088D0 Extract Zip Spec      14 (20) '2.0'\n-088D1 Extract OS            00 (0) 'MS-DOS'\n-088D2 General Purpose Flag  0800 (2048)\n+0895D LOCAL HEADER #51      04034B50 (67324752)\n+08961 Extract Zip Spec      14 (20) '2.0'\n+08962 Extract OS            00 (0) 'MS-DOS'\n+08963 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-088D4 Compression Method    0008 (8) 'Deflated'\n-088D6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-088DA CRC                   256F6EAD (628059821)\n-088DE Compressed Size       000005BF (1471)\n-088E2 Uncompressed Size     00000F7C (3964)\n-088E6 Filename Length       0031 (49)\n-088E8 Extra Length          0000 (0)\n-088EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+08965 Compression Method    0008 (8) 'Deflated'\n+08967 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0896B CRC                   65289261 (1697157729)\n+0896F Compressed Size       000005CC (1484)\n+08973 Uncompressed Size     00000FD7 (4055)\n+08977 Filename Length       0031 (49)\n+08979 Extra Length          0000 (0)\n+0897B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x88EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x897B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0891B PAYLOAD\n+089AC PAYLOAD\n \n-08EDA LOCAL HEADER #52      04034B50 (67324752)\n-08EDE Extract Zip Spec      14 (20) '2.0'\n-08EDF Extract OS            00 (0) 'MS-DOS'\n-08EE0 General Purpose Flag  0800 (2048)\n+08F78 LOCAL HEADER #52      04034B50 (67324752)\n+08F7C Extract Zip Spec      14 (20) '2.0'\n+08F7D Extract OS            00 (0) 'MS-DOS'\n+08F7E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-08EE2 Compression Method    0008 (8) 'Deflated'\n-08EE4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-08EE8 CRC                   41EC82BB (1106019003)\n-08EEC Compressed Size       000004E6 (1254)\n-08EF0 Uncompressed Size     00000F05 (3845)\n-08EF4 Filename Length       0032 (50)\n-08EF6 Extra Length          0000 (0)\n-08EF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+08F80 Compression Method    0008 (8) 'Deflated'\n+08F82 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+08F86 CRC                   59C732CA (1506226890)\n+08F8A Compressed Size       000004F2 (1266)\n+08F8E Uncompressed Size     00000F65 (3941)\n+08F92 Filename Length       0032 (50)\n+08F94 Extra Length          0000 (0)\n+08F96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x8EF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8F96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-08F2A PAYLOAD\n+08FC8 PAYLOAD\n \n-09410 LOCAL HEADER #53      04034B50 (67324752)\n-09414 Extract Zip Spec      14 (20) '2.0'\n-09415 Extract OS            00 (0) 'MS-DOS'\n-09416 General Purpose Flag  0800 (2048)\n+094BA LOCAL HEADER #53      04034B50 (67324752)\n+094BE Extract Zip Spec      14 (20) '2.0'\n+094BF Extract OS            00 (0) 'MS-DOS'\n+094C0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-09418 Compression Method    0008 (8) 'Deflated'\n-0941A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0941E CRC                   C71A64BF (3340395711)\n-09422 Compressed Size       0000044C (1100)\n-09426 Uncompressed Size     00000AD7 (2775)\n-0942A Filename Length       0034 (52)\n-0942C Extra Length          0000 (0)\n-0942E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+094C2 Compression Method    0008 (8) 'Deflated'\n+094C4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+094C8 CRC                   62C17732 (1656846130)\n+094CC Compressed Size       00000456 (1110)\n+094D0 Uncompressed Size     00000B13 (2835)\n+094D4 Filename Length       0034 (52)\n+094D6 Extra Length          0000 (0)\n+094D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x942E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x94D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09462 PAYLOAD\n+0950C PAYLOAD\n \n-098AE LOCAL HEADER #54      04034B50 (67324752)\n-098B2 Extract Zip Spec      14 (20) '2.0'\n-098B3 Extract OS            00 (0) 'MS-DOS'\n-098B4 General Purpose Flag  0800 (2048)\n+09962 LOCAL HEADER #54      04034B50 (67324752)\n+09966 Extract Zip Spec      14 (20) '2.0'\n+09967 Extract OS            00 (0) 'MS-DOS'\n+09968 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-098B6 Compression Method    0008 (8) 'Deflated'\n-098B8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-098BC CRC                   ED50455A (3981460826)\n-098C0 Compressed Size       0000045A (1114)\n-098C4 Uncompressed Size     00000A88 (2696)\n-098C8 Filename Length       0036 (54)\n-098CA Extra Length          0000 (0)\n-098CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0996A Compression Method    0008 (8) 'Deflated'\n+0996C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+09970 CRC                   BD59212E (3176735022)\n+09974 Compressed Size       00000465 (1125)\n+09978 Uncompressed Size     00000AC7 (2759)\n+0997C Filename Length       0036 (54)\n+0997E Extra Length          0000 (0)\n+09980 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x98CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x9980: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09902 PAYLOAD\n+099B6 PAYLOAD\n \n-09D5C LOCAL HEADER #55      04034B50 (67324752)\n-09D60 Extract Zip Spec      14 (20) '2.0'\n-09D61 Extract OS            00 (0) 'MS-DOS'\n-09D62 General Purpose Flag  0800 (2048)\n+09E1B LOCAL HEADER #55      04034B50 (67324752)\n+09E1F Extract Zip Spec      14 (20) '2.0'\n+09E20 Extract OS            00 (0) 'MS-DOS'\n+09E21 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-09D64 Compression Method    0008 (8) 'Deflated'\n-09D66 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-09D6A CRC                   BA485F30 (3125305136)\n-09D6E Compressed Size       00000573 (1395)\n-09D72 Uncompressed Size     00000FBB (4027)\n-09D76 Filename Length       0033 (51)\n-09D78 Extra Length          0000 (0)\n-09D7A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+09E23 Compression Method    0008 (8) 'Deflated'\n+09E25 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+09E29 CRC                   6E324421 (1848788001)\n+09E2D Compressed Size       0000057D (1405)\n+09E31 Uncompressed Size     00001018 (4120)\n+09E35 Filename Length       0033 (51)\n+09E37 Extra Length          0000 (0)\n+09E39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x9D7A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x9E39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09DAD PAYLOAD\n+09E6C PAYLOAD\n \n-0A320 LOCAL HEADER #56      04034B50 (67324752)\n-0A324 Extract Zip Spec      14 (20) '2.0'\n-0A325 Extract OS            00 (0) 'MS-DOS'\n-0A326 General Purpose Flag  0800 (2048)\n+0A3E9 LOCAL HEADER #56      04034B50 (67324752)\n+0A3ED Extract Zip Spec      14 (20) '2.0'\n+0A3EE Extract OS            00 (0) 'MS-DOS'\n+0A3EF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0A328 Compression Method    0008 (8) 'Deflated'\n-0A32A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0A32E CRC                   72812E46 (1921068614)\n-0A332 Compressed Size       0000059C (1436)\n-0A336 Uncompressed Size     000010D3 (4307)\n-0A33A Filename Length       0035 (53)\n-0A33C Extra Length          0000 (0)\n-0A33E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0A3F1 Compression Method    0008 (8) 'Deflated'\n+0A3F3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0A3F7 CRC                   5829DD8D (1479138701)\n+0A3FB Compressed Size       000005A6 (1446)\n+0A3FF Uncompressed Size     0000114E (4430)\n+0A403 Filename Length       0035 (53)\n+0A405 Extra Length          0000 (0)\n+0A407 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xA33E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA407: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A373 PAYLOAD\n+0A43C PAYLOAD\n \n-0A90F LOCAL HEADER #57      04034B50 (67324752)\n-0A913 Extract Zip Spec      14 (20) '2.0'\n-0A914 Extract OS            00 (0) 'MS-DOS'\n-0A915 General Purpose Flag  0800 (2048)\n+0A9E2 LOCAL HEADER #57      04034B50 (67324752)\n+0A9E6 Extract Zip Spec      14 (20) '2.0'\n+0A9E7 Extract OS            00 (0) 'MS-DOS'\n+0A9E8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0A917 Compression Method    0008 (8) 'Deflated'\n-0A919 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0A91D CRC                   4C3B1439 (1278940217)\n-0A921 Compressed Size       00000263 (611)\n-0A925 Uncompressed Size     000004E5 (1253)\n-0A929 Filename Length       002A (42)\n-0A92B Extra Length          0000 (0)\n-0A92D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0A9EA Compression Method    0008 (8) 'Deflated'\n+0A9EC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0A9F0 CRC                   AF68925C (2942866012)\n+0A9F4 Compressed Size       0000026A (618)\n+0A9F8 Uncompressed Size     000004FE (1278)\n+0A9FC Filename Length       002A (42)\n+0A9FE Extra Length          0000 (0)\n+0AA00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xA92D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xAA00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A957 PAYLOAD\n+0AA2A PAYLOAD\n \n-0ABBA LOCAL HEADER #58      04034B50 (67324752)\n-0ABBE Extract Zip Spec      14 (20) '2.0'\n-0ABBF Extract OS            00 (0) 'MS-DOS'\n-0ABC0 General Purpose Flag  0800 (2048)\n+0AC94 LOCAL HEADER #58      04034B50 (67324752)\n+0AC98 Extract Zip Spec      14 (20) '2.0'\n+0AC99 Extract OS            00 (0) 'MS-DOS'\n+0AC9A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0ABC2 Compression Method    0008 (8) 'Deflated'\n-0ABC4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0ABC8 CRC                   0C035F96 (201547670)\n-0ABCC Compressed Size       000005F9 (1529)\n-0ABD0 Uncompressed Size     000011CA (4554)\n-0ABD4 Filename Length       0027 (39)\n-0ABD6 Extra Length          0000 (0)\n-0ABD8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0AC9C Compression Method    0008 (8) 'Deflated'\n+0AC9E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0ACA2 CRC                   97DFDDD6 (2548030934)\n+0ACA6 Compressed Size       00000604 (1540)\n+0ACAA Uncompressed Size     00001266 (4710)\n+0ACAE Filename Length       0027 (39)\n+0ACB0 Extra Length          0000 (0)\n+0ACB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xABD8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xACB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0ABFF PAYLOAD\n+0ACD9 PAYLOAD\n \n-0B1F8 LOCAL HEADER #59      04034B50 (67324752)\n-0B1FC Extract Zip Spec      14 (20) '2.0'\n-0B1FD Extract OS            00 (0) 'MS-DOS'\n-0B1FE General Purpose Flag  0800 (2048)\n+0B2DD LOCAL HEADER #59      04034B50 (67324752)\n+0B2E1 Extract Zip Spec      14 (20) '2.0'\n+0B2E2 Extract OS            00 (0) 'MS-DOS'\n+0B2E3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0B200 Compression Method    0008 (8) 'Deflated'\n-0B202 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0B206 CRC                   5688E99A (1451813274)\n-0B20A Compressed Size       000005C2 (1474)\n-0B20E Uncompressed Size     00001436 (5174)\n-0B212 Filename Length       003B (59)\n-0B214 Extra Length          0000 (0)\n-0B216 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B2E5 Compression Method    0008 (8) 'Deflated'\n+0B2E7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0B2EB CRC                   5688E99A (1451813274)\n+0B2EF Compressed Size       000005C2 (1474)\n+0B2F3 Uncompressed Size     00001436 (5174)\n+0B2F7 Filename Length       003B (59)\n+0B2F9 Extra Length          0000 (0)\n+0B2FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB216: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB2FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B251 PAYLOAD\n+0B336 PAYLOAD\n \n-0B813 LOCAL HEADER #60      04034B50 (67324752)\n-0B817 Extract Zip Spec      14 (20) '2.0'\n-0B818 Extract OS            00 (0) 'MS-DOS'\n-0B819 General Purpose Flag  0800 (2048)\n+0B8F8 LOCAL HEADER #60      04034B50 (67324752)\n+0B8FC Extract Zip Spec      14 (20) '2.0'\n+0B8FD Extract OS            00 (0) 'MS-DOS'\n+0B8FE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0B81B Compression Method    0008 (8) 'Deflated'\n-0B81D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0B821 CRC                   DA916F8A (3666964362)\n-0B825 Compressed Size       00000376 (886)\n-0B829 Uncompressed Size     000007A1 (1953)\n-0B82D Filename Length       003F (63)\n-0B82F Extra Length          0000 (0)\n-0B831 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B900 Compression Method    0008 (8) 'Deflated'\n+0B902 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0B906 CRC                   DA916F8A (3666964362)\n+0B90A Compressed Size       00000376 (886)\n+0B90E Uncompressed Size     000007A1 (1953)\n+0B912 Filename Length       003F (63)\n+0B914 Extra Length          0000 (0)\n+0B916 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB831: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB916: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B870 PAYLOAD\n+0B955 PAYLOAD\n \n-0BBE6 LOCAL HEADER #61      04034B50 (67324752)\n-0BBEA Extract Zip Spec      14 (20) '2.0'\n-0BBEB Extract OS            00 (0) 'MS-DOS'\n-0BBEC General Purpose Flag  0800 (2048)\n+0BCCB LOCAL HEADER #61      04034B50 (67324752)\n+0BCCF Extract Zip Spec      14 (20) '2.0'\n+0BCD0 Extract OS            00 (0) 'MS-DOS'\n+0BCD1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0BBEE Compression Method    0008 (8) 'Deflated'\n-0BBF0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0BBF4 CRC                   1CB52B1D (481635101)\n-0BBF8 Compressed Size       000005C7 (1479)\n-0BBFC Uncompressed Size     0000100F (4111)\n-0BC00 Filename Length       003A (58)\n-0BC02 Extra Length          0000 (0)\n-0BC04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0BCD3 Compression Method    0008 (8) 'Deflated'\n+0BCD5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0BCD9 CRC                   5C0FF18B (1544548747)\n+0BCDD Compressed Size       000005D2 (1490)\n+0BCE1 Uncompressed Size     0000107E (4222)\n+0BCE5 Filename Length       003A (58)\n+0BCE7 Extra Length          0000 (0)\n+0BCE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xBC04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xBCE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0BC3E PAYLOAD\n+0BD23 PAYLOAD\n \n-0C205 LOCAL HEADER #62      04034B50 (67324752)\n-0C209 Extract Zip Spec      14 (20) '2.0'\n-0C20A Extract OS            00 (0) 'MS-DOS'\n-0C20B General Purpose Flag  0800 (2048)\n+0C2F5 LOCAL HEADER #62      04034B50 (67324752)\n+0C2F9 Extract Zip Spec      14 (20) '2.0'\n+0C2FA Extract OS            00 (0) 'MS-DOS'\n+0C2FB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C20D Compression Method    0008 (8) 'Deflated'\n-0C20F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0C213 CRC                   B7AE5AFA (3081657082)\n-0C217 Compressed Size       00000340 (832)\n-0C21B Uncompressed Size     000006EA (1770)\n-0C21F Filename Length       003F (63)\n-0C221 Extra Length          0000 (0)\n-0C223 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0C2FD Compression Method    0008 (8) 'Deflated'\n+0C2FF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0C303 CRC                   F592DA8D (4120042125)\n+0C307 Compressed Size       0000034A (842)\n+0C30B Uncompressed Size     00000713 (1811)\n+0C30F Filename Length       003F (63)\n+0C311 Extra Length          0000 (0)\n+0C313 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC223: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC313: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C262 PAYLOAD\n+0C352 PAYLOAD\n \n-0C5A2 LOCAL HEADER #63      04034B50 (67324752)\n-0C5A6 Extract Zip Spec      14 (20) '2.0'\n-0C5A7 Extract OS            00 (0) 'MS-DOS'\n-0C5A8 General Purpose Flag  0800 (2048)\n+0C69C LOCAL HEADER #63      04034B50 (67324752)\n+0C6A0 Extract Zip Spec      14 (20) '2.0'\n+0C6A1 Extract OS            00 (0) 'MS-DOS'\n+0C6A2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C5AA Compression Method    0008 (8) 'Deflated'\n-0C5AC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0C5B0 CRC                   D392C9E8 (3549612520)\n-0C5B4 Compressed Size       00000468 (1128)\n-0C5B8 Uncompressed Size     00000C81 (3201)\n-0C5BC Filename Length       003D (61)\n-0C5BE Extra Length          0000 (0)\n-0C5C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0C6A4 Compression Method    0008 (8) 'Deflated'\n+0C6A6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0C6AA CRC                   D705EF34 (3607490356)\n+0C6AE Compressed Size       00000476 (1142)\n+0C6B2 Uncompressed Size     00000CCA (3274)\n+0C6B6 Filename Length       003D (61)\n+0C6B8 Extra Length          0000 (0)\n+0C6BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC5C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC6BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C5FD PAYLOAD\n+0C6F7 PAYLOAD\n \n-0CA65 LOCAL HEADER #64      04034B50 (67324752)\n-0CA69 Extract Zip Spec      14 (20) '2.0'\n-0CA6A Extract OS            00 (0) 'MS-DOS'\n-0CA6B General Purpose Flag  0800 (2048)\n+0CB6D LOCAL HEADER #64      04034B50 (67324752)\n+0CB71 Extract Zip Spec      14 (20) '2.0'\n+0CB72 Extract OS            00 (0) 'MS-DOS'\n+0CB73 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0CA6D Compression Method    0008 (8) 'Deflated'\n-0CA6F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0CA73 CRC                   2AA01116 (715133206)\n-0CA77 Compressed Size       0000021D (541)\n-0CA7B Uncompressed Size     000003D7 (983)\n-0CA7F Filename Length       002B (43)\n-0CA81 Extra Length          0000 (0)\n-0CA83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0CB75 Compression Method    0008 (8) 'Deflated'\n+0CB77 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0CB7B CRC                   2AA01116 (715133206)\n+0CB7F Compressed Size       0000021D (541)\n+0CB83 Uncompressed Size     000003D7 (983)\n+0CB87 Filename Length       002B (43)\n+0CB89 Extra Length          0000 (0)\n+0CB8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0CAAE PAYLOAD\n+0CBB6 PAYLOAD\n \n-0CCCB LOCAL HEADER #65      04034B50 (67324752)\n-0CCCF Extract Zip Spec      14 (20) '2.0'\n-0CCD0 Extract OS            00 (0) 'MS-DOS'\n-0CCD1 General Purpose Flag  0800 (2048)\n+0CDD3 LOCAL HEADER #65      04034B50 (67324752)\n+0CDD7 Extract Zip Spec      14 (20) '2.0'\n+0CDD8 Extract OS            00 (0) 'MS-DOS'\n+0CDD9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0CCD3 Compression Method    0008 (8) 'Deflated'\n-0CCD5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0CCD9 CRC                   70DD7BE1 (1893563361)\n-0CCDD Compressed Size       000003F2 (1010)\n-0CCE1 Uncompressed Size     00000AAE (2734)\n-0CCE5 Filename Length       0024 (36)\n-0CCE7 Extra Length          0000 (0)\n-0CCE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0CDDB Compression Method    0008 (8) 'Deflated'\n+0CDDD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0CDE1 CRC                   70DD7BE1 (1893563361)\n+0CDE5 Compressed Size       000003F2 (1010)\n+0CDE9 Uncompressed Size     00000AAE (2734)\n+0CDED Filename Length       0024 (36)\n+0CDEF Extra Length          0000 (0)\n+0CDF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCCE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0CD0D PAYLOAD\n+0CE15 PAYLOAD\n \n-0D0FF LOCAL HEADER #66      04034B50 (67324752)\n-0D103 Extract Zip Spec      14 (20) '2.0'\n-0D104 Extract OS            00 (0) 'MS-DOS'\n-0D105 General Purpose Flag  0800 (2048)\n+0D207 LOCAL HEADER #66      04034B50 (67324752)\n+0D20B Extract Zip Spec      14 (20) '2.0'\n+0D20C Extract OS            00 (0) 'MS-DOS'\n+0D20D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0D107 Compression Method    0008 (8) 'Deflated'\n-0D109 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0D10D CRC                   725BA0A7 (1918607527)\n-0D111 Compressed Size       000003A6 (934)\n-0D115 Uncompressed Size     000008DD (2269)\n-0D119 Filename Length       0028 (40)\n-0D11B Extra Length          0000 (0)\n-0D11D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0D20F Compression Method    0008 (8) 'Deflated'\n+0D211 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0D215 CRC                   725BA0A7 (1918607527)\n+0D219 Compressed Size       000003A6 (934)\n+0D21D Uncompressed Size     000008DD (2269)\n+0D221 Filename Length       0028 (40)\n+0D223 Extra Length          0000 (0)\n+0D225 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD11D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD225: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D145 PAYLOAD\n+0D24D PAYLOAD\n \n-0D4EB LOCAL HEADER #67      04034B50 (67324752)\n-0D4EF Extract Zip Spec      14 (20) '2.0'\n-0D4F0 Extract OS            00 (0) 'MS-DOS'\n-0D4F1 General Purpose Flag  0800 (2048)\n+0D5F3 LOCAL HEADER #67      04034B50 (67324752)\n+0D5F7 Extract Zip Spec      14 (20) '2.0'\n+0D5F8 Extract OS            00 (0) 'MS-DOS'\n+0D5F9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0D4F3 Compression Method    0008 (8) 'Deflated'\n-0D4F5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0D4F9 CRC                   353D3BE5 (893205477)\n-0D4FD Compressed Size       00000D61 (3425)\n-0D501 Uncompressed Size     00003D01 (15617)\n-0D505 Filename Length       0027 (39)\n-0D507 Extra Length          0000 (0)\n-0D509 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0D5FB Compression Method    0008 (8) 'Deflated'\n+0D5FD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0D601 CRC                   7076ABE9 (1886825449)\n+0D605 Compressed Size       00000D79 (3449)\n+0D609 Uncompressed Size     00003F37 (16183)\n+0D60D Filename Length       0027 (39)\n+0D60F Extra Length          0000 (0)\n+0D611 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD509: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD611: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D530 PAYLOAD\n+0D638 PAYLOAD\n \n-0E291 LOCAL HEADER #68      04034B50 (67324752)\n-0E295 Extract Zip Spec      14 (20) '2.0'\n-0E296 Extract OS            00 (0) 'MS-DOS'\n-0E297 General Purpose Flag  0800 (2048)\n+0E3B1 LOCAL HEADER #68      04034B50 (67324752)\n+0E3B5 Extract Zip Spec      14 (20) '2.0'\n+0E3B6 Extract OS            00 (0) 'MS-DOS'\n+0E3B7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0E299 Compression Method    0008 (8) 'Deflated'\n-0E29B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0E29F CRC                   1DFA3CFF (502938879)\n-0E2A3 Compressed Size       000007F3 (2035)\n-0E2A7 Uncompressed Size     00001CCE (7374)\n-0E2AB Filename Length       0026 (38)\n-0E2AD Extra Length          0000 (0)\n-0E2AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0E3B9 Compression Method    0008 (8) 'Deflated'\n+0E3BB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0E3BF CRC                   E7722336 (3883017014)\n+0E3C3 Compressed Size       00000803 (2051)\n+0E3C7 Uncompressed Size     00001DD8 (7640)\n+0E3CB Filename Length       0026 (38)\n+0E3CD Extra Length          0000 (0)\n+0E3CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xE2AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xE3CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0E2D5 PAYLOAD\n+0E3F5 PAYLOAD\n \n-0EAC8 LOCAL HEADER #69      04034B50 (67324752)\n-0EACC Extract Zip Spec      14 (20) '2.0'\n-0EACD Extract OS            00 (0) 'MS-DOS'\n-0EACE General Purpose Flag  0800 (2048)\n+0EBF8 LOCAL HEADER #69      04034B50 (67324752)\n+0EBFC Extract Zip Spec      14 (20) '2.0'\n+0EBFD Extract OS            00 (0) 'MS-DOS'\n+0EBFE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0EAD0 Compression Method    0008 (8) 'Deflated'\n-0EAD2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EAD6 CRC                   FCA06F71 (4238372721)\n-0EADA Compressed Size       0000007A (122)\n-0EADE Uncompressed Size     00000185 (389)\n-0EAE2 Filename Length       0040 (64)\n-0EAE4 Extra Length          0000 (0)\n-0EAE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0EC00 Compression Method    0008 (8) 'Deflated'\n+0EC02 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EC06 CRC                   A18B762D (2710271533)\n+0EC0A Compressed Size       00000080 (128)\n+0EC0E Uncompressed Size     0000018D (397)\n+0EC12 Filename Length       0040 (64)\n+0EC14 Extra Length          0000 (0)\n+0EC16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xEAE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEC16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0EB26 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0EC56 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0EBA0 LOCAL HEADER #70      04034B50 (67324752)\n-0EBA4 Extract Zip Spec      14 (20) '2.0'\n-0EBA5 Extract OS            00 (0) 'MS-DOS'\n-0EBA6 General Purpose Flag  0800 (2048)\n+0ECD6 LOCAL HEADER #70      04034B50 (67324752)\n+0ECDA Extract Zip Spec      14 (20) '2.0'\n+0ECDB Extract OS            00 (0) 'MS-DOS'\n+0ECDC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0EBA8 Compression Method    0008 (8) 'Deflated'\n-0EBAA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EBAE CRC                   16B87389 (381186953)\n-0EBB2 Compressed Size       00000084 (132)\n-0EBB6 Uncompressed Size     000001DC (476)\n-0EBBA Filename Length       0046 (70)\n-0EBBC Extra Length          0000 (0)\n-0EBBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0ECDE Compression Method    0008 (8) 'Deflated'\n+0ECE0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0ECE4 CRC                   60DE3136 (1625174326)\n+0ECE8 Compressed Size       00000085 (133)\n+0ECEC Uncompressed Size     000001E4 (484)\n+0ECF0 Filename Length       0046 (70)\n+0ECF2 Extra Length          0000 (0)\n+0ECF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xEBBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xECF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0EC04 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0ED3A PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0EC88 LOCAL HEADER #71      04034B50 (67324752)\n-0EC8C Extract Zip Spec      14 (20) '2.0'\n-0EC8D Extract OS            00 (0) 'MS-DOS'\n-0EC8E General Purpose Flag  0800 (2048)\n+0EDBF LOCAL HEADER #71      04034B50 (67324752)\n+0EDC3 Extract Zip Spec      14 (20) '2.0'\n+0EDC4 Extract OS            00 (0) 'MS-DOS'\n+0EDC5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0EC90 Compression Method    0008 (8) 'Deflated'\n-0EC92 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0EC96 CRC                   66A9E2AF (1722409647)\n-0EC9A Compressed Size       00000030 (48)\n-0EC9E Uncompressed Size     00000034 (52)\n-0ECA2 Filename Length       0035 (53)\n-0ECA4 Extra Length          0000 (0)\n-0ECA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0EDC7 Compression Method    0008 (8) 'Deflated'\n+0EDC9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EDCD CRC                   66A9E2AF (1722409647)\n+0EDD1 Compressed Size       00000030 (48)\n+0EDD5 Uncompressed Size     00000034 (52)\n+0EDD9 Filename Length       0035 (53)\n+0EDDB Extra Length          0000 (0)\n+0EDDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xECA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEDDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0ECDB PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0EE12 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0ED0B LOCAL HEADER #72      04034B50 (67324752)\n-0ED0F Extract Zip Spec      14 (20) '2.0'\n-0ED10 Extract OS            00 (0) 'MS-DOS'\n-0ED11 General Purpose Flag  0800 (2048)\n+0EE42 LOCAL HEADER #72      04034B50 (67324752)\n+0EE46 Extract Zip Spec      14 (20) '2.0'\n+0EE47 Extract OS            00 (0) 'MS-DOS'\n+0EE48 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0ED13 Compression Method    0008 (8) 'Deflated'\n-0ED15 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0ED19 CRC                   17F3C42C (401851436)\n-0ED1D Compressed Size       0000039E (926)\n-0ED21 Uncompressed Size     00000B8A (2954)\n-0ED25 Filename Length       0031 (49)\n-0ED27 Extra Length          0000 (0)\n-0ED29 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0EE4A Compression Method    0008 (8) 'Deflated'\n+0EE4C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0EE50 CRC                   CC527EDE (3427958494)\n+0EE54 Compressed Size       00000397 (919)\n+0EE58 Uncompressed Size     00000B3D (2877)\n+0EE5C Filename Length       0031 (49)\n+0EE5E Extra Length          0000 (0)\n+0EE60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xED29: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEE60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0ED5A PAYLOAD\n+0EE91 PAYLOAD\n \n-0F0F8 LOCAL HEADER #73      04034B50 (67324752)\n-0F0FC Extract Zip Spec      14 (20) '2.0'\n-0F0FD Extract OS            00 (0) 'MS-DOS'\n-0F0FE General Purpose Flag  0800 (2048)\n+0F228 LOCAL HEADER #73      04034B50 (67324752)\n+0F22C Extract Zip Spec      14 (20) '2.0'\n+0F22D Extract OS            00 (0) 'MS-DOS'\n+0F22E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F100 Compression Method    0008 (8) 'Deflated'\n-0F102 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F106 CRC                   9B978690 (2610398864)\n-0F10A Compressed Size       0000003D (61)\n-0F10E Uncompressed Size     00000040 (64)\n-0F112 Filename Length       0038 (56)\n-0F114 Extra Length          0000 (0)\n-0F116 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F230 Compression Method    0008 (8) 'Deflated'\n+0F232 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F236 CRC                   9B978690 (2610398864)\n+0F23A Compressed Size       0000003D (61)\n+0F23E Uncompressed Size     00000040 (64)\n+0F242 Filename Length       0038 (56)\n+0F244 Extra Length          0000 (0)\n+0F246 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF116: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF246: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0F14E PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0F27E PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-0F18B CENTRAL HEADER #1     02014B50 (33639248)\n-0F18F Created Zip Spec      14 (20) '2.0'\n-0F190 Created OS            03 (3) 'Unix'\n-0F191 Extract Zip Spec      14 (20) '2.0'\n-0F192 Extract OS            00 (0) 'MS-DOS'\n-0F193 General Purpose Flag  0800 (2048)\n+0F2BB CENTRAL HEADER #1     02014B50 (33639248)\n+0F2BF Created Zip Spec      14 (20) '2.0'\n+0F2C0 Created OS            03 (3) 'Unix'\n+0F2C1 Extract Zip Spec      14 (20) '2.0'\n+0F2C2 Extract OS            00 (0) 'MS-DOS'\n+0F2C3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F195 Compression Method    0008 (8) 'Deflated'\n-0F197 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F19B CRC                   A689EB18 (2794056472)\n-0F19F Compressed Size       00000042 (66)\n-0F1A3 Uncompressed Size     00000040 (64)\n-0F1A7 Filename Length       0014 (20)\n-0F1A9 Extra Length          0000 (0)\n-0F1AB Comment Length        0000 (0)\n-0F1AD Disk Start            0000 (0)\n-0F1AF Int File Attributes   0000 (0)\n+0F2C5 Compression Method    0008 (8) 'Deflated'\n+0F2C7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F2CB CRC                   A689EB18 (2794056472)\n+0F2CF Compressed Size       00000042 (66)\n+0F2D3 Uncompressed Size     00000040 (64)\n+0F2D7 Filename Length       0014 (20)\n+0F2D9 Extra Length          0000 (0)\n+0F2DB Comment Length        0000 (0)\n+0F2DD Disk Start            0000 (0)\n+0F2DF Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F1B1 Ext File Attributes   81A40000 (2175008768)\n+0F2E1 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F1B5 Local Header Offset   00000000 (0)\n-0F1B9 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+0F2E5 Local Header Offset   00000000 (0)\n+0F2E9 Filename              'XXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF1B9: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF2E9: Filename 'XXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F1CD CENTRAL HEADER #2     02014B50 (33639248)\n-0F1D1 Created Zip Spec      14 (20) '2.0'\n-0F1D2 Created OS            03 (3) 'Unix'\n-0F1D3 Extract Zip Spec      0A (10) '1.0'\n-0F1D4 Extract OS            00 (0) 'MS-DOS'\n-0F1D5 General Purpose Flag  0800 (2048)\n+0F2FD CENTRAL HEADER #2     02014B50 (33639248)\n+0F301 Created Zip Spec      14 (20) '2.0'\n+0F302 Created OS            03 (3) 'Unix'\n+0F303 Extract Zip Spec      0A (10) '1.0'\n+0F304 Extract OS            00 (0) 'MS-DOS'\n+0F305 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F1D7 Compression Method    0000 (0) 'Stored'\n-0F1D9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F1DD CRC                   00000000 (0)\n-0F1E1 Compressed Size       00000000 (0)\n-0F1E5 Uncompressed Size     00000000 (0)\n-0F1E9 Filename Length       0009 (9)\n-0F1EB Extra Length          0000 (0)\n-0F1ED Comment Length        0000 (0)\n-0F1EF Disk Start            0000 (0)\n-0F1F1 Int File Attributes   0000 (0)\n+0F307 Compression Method    0000 (0) 'Stored'\n+0F309 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F30D CRC                   00000000 (0)\n+0F311 Compressed Size       00000000 (0)\n+0F315 Uncompressed Size     00000000 (0)\n+0F319 Filename Length       0009 (9)\n+0F31B Extra Length          0000 (0)\n+0F31D Comment Length        0000 (0)\n+0F31F Disk Start            0000 (0)\n+0F321 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F1F3 Ext File Attributes   41ED0010 (1106051088)\n+0F323 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F1F7 Local Header Offset   00000074 (116)\n-0F1FB Filename              'XXXXXXXXX'\n+0F327 Local Header Offset   00000074 (116)\n+0F32B Filename              'XXXXXXXXX'\n #\n-# WARNING: Offset 0xF1FB: Filename 'XXXXXXXXX'\n+# WARNING: Offset 0xF32B: Filename 'XXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF1FB: Directory 'XXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF32B: Directory 'XXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF1D3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n+# WARNING: Offset 0xF303: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n #\n \n-0F204 CENTRAL HEADER #3     02014B50 (33639248)\n-0F208 Created Zip Spec      14 (20) '2.0'\n-0F209 Created OS            03 (3) 'Unix'\n-0F20A Extract Zip Spec      0A (10) '1.0'\n-0F20B Extract OS            00 (0) 'MS-DOS'\n-0F20C General Purpose Flag  0800 (2048)\n+0F334 CENTRAL HEADER #3     02014B50 (33639248)\n+0F338 Created Zip Spec      14 (20) '2.0'\n+0F339 Created OS            03 (3) 'Unix'\n+0F33A Extract Zip Spec      0A (10) '1.0'\n+0F33B Extract OS            00 (0) 'MS-DOS'\n+0F33C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F20E Compression Method    0000 (0) 'Stored'\n-0F210 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F214 CRC                   00000000 (0)\n-0F218 Compressed Size       00000000 (0)\n-0F21C Uncompressed Size     00000000 (0)\n-0F220 Filename Length       0004 (4)\n-0F222 Extra Length          0000 (0)\n-0F224 Comment Length        0000 (0)\n-0F226 Disk Start            0000 (0)\n-0F228 Int File Attributes   0000 (0)\n+0F33E Compression Method    0000 (0) 'Stored'\n+0F340 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F344 CRC                   00000000 (0)\n+0F348 Compressed Size       00000000 (0)\n+0F34C Uncompressed Size     00000000 (0)\n+0F350 Filename Length       0004 (4)\n+0F352 Extra Length          0000 (0)\n+0F354 Comment Length        0000 (0)\n+0F356 Disk Start            0000 (0)\n+0F358 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F22A Ext File Attributes   41ED0010 (1106051088)\n+0F35A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F22E Local Header Offset   0000009B (155)\n-0F232 Filename              'XXXX'\n+0F35E Local Header Offset   0000009B (155)\n+0F362 Filename              'XXXX'\n #\n-# WARNING: Offset 0xF232: Filename 'XXXX'\n+# WARNING: Offset 0xF362: Filename 'XXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF232: Directory 'XXXX' must end in a '/'\n+# ERROR: Offset 0xF362: Directory 'XXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF20A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n+# WARNING: Offset 0xF33A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n #\n \n-0F236 CENTRAL HEADER #4     02014B50 (33639248)\n-0F23A Created Zip Spec      14 (20) '2.0'\n-0F23B Created OS            03 (3) 'Unix'\n-0F23C Extract Zip Spec      0A (10) '1.0'\n-0F23D Extract OS            00 (0) 'MS-DOS'\n-0F23E General Purpose Flag  0800 (2048)\n+0F366 CENTRAL HEADER #4     02014B50 (33639248)\n+0F36A Created Zip Spec      14 (20) '2.0'\n+0F36B Created OS            03 (3) 'Unix'\n+0F36C Extract Zip Spec      0A (10) '1.0'\n+0F36D Extract OS            00 (0) 'MS-DOS'\n+0F36E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F240 Compression Method    0000 (0) 'Stored'\n-0F242 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F246 CRC                   00000000 (0)\n-0F24A Compressed Size       00000000 (0)\n-0F24E Uncompressed Size     00000000 (0)\n-0F252 Filename Length       000B (11)\n-0F254 Extra Length          0000 (0)\n-0F256 Comment Length        0000 (0)\n-0F258 Disk Start            0000 (0)\n-0F25A Int File Attributes   0000 (0)\n+0F370 Compression Method    0000 (0) 'Stored'\n+0F372 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F376 CRC                   00000000 (0)\n+0F37A Compressed Size       00000000 (0)\n+0F37E Uncompressed Size     00000000 (0)\n+0F382 Filename Length       000B (11)\n+0F384 Extra Length          0000 (0)\n+0F386 Comment Length        0000 (0)\n+0F388 Disk Start            0000 (0)\n+0F38A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F25C Ext File Attributes   41ED0010 (1106051088)\n+0F38C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F260 Local Header Offset   000000BD (189)\n-0F264 Filename              'XXXXXXXXXXX'\n+0F390 Local Header Offset   000000BD (189)\n+0F394 Filename              'XXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF264: Filename 'XXXXXXXXXXX'\n+# WARNING: Offset 0xF394: Filename 'XXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF264: Directory 'XXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF394: Directory 'XXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF23C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n+# WARNING: Offset 0xF36C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n #\n \n-0F26F CENTRAL HEADER #5     02014B50 (33639248)\n-0F273 Created Zip Spec      14 (20) '2.0'\n-0F274 Created OS            03 (3) 'Unix'\n-0F275 Extract Zip Spec      0A (10) '1.0'\n-0F276 Extract OS            00 (0) 'MS-DOS'\n-0F277 General Purpose Flag  0800 (2048)\n+0F39F CENTRAL HEADER #5     02014B50 (33639248)\n+0F3A3 Created Zip Spec      14 (20) '2.0'\n+0F3A4 Created OS            03 (3) 'Unix'\n+0F3A5 Extract Zip Spec      0A (10) '1.0'\n+0F3A6 Extract OS            00 (0) 'MS-DOS'\n+0F3A7 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F279 Compression Method    0000 (0) 'Stored'\n-0F27B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F27F CRC                   00000000 (0)\n-0F283 Compressed Size       00000000 (0)\n-0F287 Uncompressed Size     00000000 (0)\n-0F28B Filename Length       0011 (17)\n-0F28D Extra Length          0000 (0)\n-0F28F Comment Length        0000 (0)\n-0F291 Disk Start            0000 (0)\n-0F293 Int File Attributes   0000 (0)\n+0F3A9 Compression Method    0000 (0) 'Stored'\n+0F3AB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F3AF CRC                   00000000 (0)\n+0F3B3 Compressed Size       00000000 (0)\n+0F3B7 Uncompressed Size     00000000 (0)\n+0F3BB Filename Length       0011 (17)\n+0F3BD Extra Length          0000 (0)\n+0F3BF Comment Length        0000 (0)\n+0F3C1 Disk Start            0000 (0)\n+0F3C3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F295 Ext File Attributes   41ED0010 (1106051088)\n+0F3C5 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F299 Local Header Offset   000000E6 (230)\n-0F29D Filename              'XXXXXXXXXXXXXXXXX'\n+0F3C9 Local Header Offset   000000E6 (230)\n+0F3CD Filename              'XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF29D: Filename 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF3CD: Filename 'XXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF29D: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF3CD: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF275: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF3A5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n #\n \n-0F2AE CENTRAL HEADER #6     02014B50 (33639248)\n-0F2B2 Created Zip Spec      14 (20) '2.0'\n-0F2B3 Created OS            03 (3) 'Unix'\n-0F2B4 Extract Zip Spec      0A (10) '1.0'\n-0F2B5 Extract OS            00 (0) 'MS-DOS'\n-0F2B6 General Purpose Flag  0800 (2048)\n+0F3DE CENTRAL HEADER #6     02014B50 (33639248)\n+0F3E2 Created Zip Spec      14 (20) '2.0'\n+0F3E3 Created OS            03 (3) 'Unix'\n+0F3E4 Extract Zip Spec      0A (10) '1.0'\n+0F3E5 Extract OS            00 (0) 'MS-DOS'\n+0F3E6 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F2B8 Compression Method    0000 (0) 'Stored'\n-0F2BA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F2BE CRC                   00000000 (0)\n-0F2C2 Compressed Size       00000000 (0)\n-0F2C6 Uncompressed Size     00000000 (0)\n-0F2CA Filename Length       0015 (21)\n-0F2CC Extra Length          0000 (0)\n-0F2CE Comment Length        0000 (0)\n-0F2D0 Disk Start            0000 (0)\n-0F2D2 Int File Attributes   0000 (0)\n+0F3E8 Compression Method    0000 (0) 'Stored'\n+0F3EA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F3EE CRC                   00000000 (0)\n+0F3F2 Compressed Size       00000000 (0)\n+0F3F6 Uncompressed Size     00000000 (0)\n+0F3FA Filename Length       0015 (21)\n+0F3FC Extra Length          0000 (0)\n+0F3FE Comment Length        0000 (0)\n+0F400 Disk Start            0000 (0)\n+0F402 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F2D4 Ext File Attributes   41ED0010 (1106051088)\n+0F404 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F2D8 Local Header Offset   00000115 (277)\n-0F2DC Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+0F408 Local Header Offset   00000115 (277)\n+0F40C Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF2DC: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF40C: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF2DC: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF40C: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF2B4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF3E4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F2F1 CENTRAL HEADER #7     02014B50 (33639248)\n-0F2F5 Created Zip Spec      14 (20) '2.0'\n-0F2F6 Created OS            03 (3) 'Unix'\n-0F2F7 Extract Zip Spec      0A (10) '1.0'\n-0F2F8 Extract OS            00 (0) 'MS-DOS'\n-0F2F9 General Purpose Flag  0800 (2048)\n+0F421 CENTRAL HEADER #7     02014B50 (33639248)\n+0F425 Created Zip Spec      14 (20) '2.0'\n+0F426 Created OS            03 (3) 'Unix'\n+0F427 Extract Zip Spec      0A (10) '1.0'\n+0F428 Extract OS            00 (0) 'MS-DOS'\n+0F429 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F2FB Compression Method    0000 (0) 'Stored'\n-0F2FD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F301 CRC                   00000000 (0)\n-0F305 Compressed Size       00000000 (0)\n-0F309 Uncompressed Size     00000000 (0)\n-0F30D Filename Length       001D (29)\n-0F30F Extra Length          0000 (0)\n-0F311 Comment Length        0000 (0)\n-0F313 Disk Start            0000 (0)\n-0F315 Int File Attributes   0000 (0)\n+0F42B Compression Method    0000 (0) 'Stored'\n+0F42D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F431 CRC                   00000000 (0)\n+0F435 Compressed Size       00000000 (0)\n+0F439 Uncompressed Size     00000000 (0)\n+0F43D Filename Length       001D (29)\n+0F43F Extra Length          0000 (0)\n+0F441 Comment Length        0000 (0)\n+0F443 Disk Start            0000 (0)\n+0F445 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F317 Ext File Attributes   41ED0010 (1106051088)\n+0F447 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F31B Local Header Offset   00000148 (328)\n-0F31F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F44B Local Header Offset   00000148 (328)\n+0F44F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF31F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF44F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF31F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF44F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF2F7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF427: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F33C CENTRAL HEADER #8     02014B50 (33639248)\n-0F340 Created Zip Spec      14 (20) '2.0'\n-0F341 Created OS            03 (3) 'Unix'\n-0F342 Extract Zip Spec      0A (10) '1.0'\n-0F343 Extract OS            00 (0) 'MS-DOS'\n-0F344 General Purpose Flag  0800 (2048)\n+0F46C CENTRAL HEADER #8     02014B50 (33639248)\n+0F470 Created Zip Spec      14 (20) '2.0'\n+0F471 Created OS            03 (3) 'Unix'\n+0F472 Extract Zip Spec      0A (10) '1.0'\n+0F473 Extract OS            00 (0) 'MS-DOS'\n+0F474 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F346 Compression Method    0000 (0) 'Stored'\n-0F348 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F34C CRC                   00000000 (0)\n-0F350 Compressed Size       00000000 (0)\n-0F354 Uncompressed Size     00000000 (0)\n-0F358 Filename Length       0028 (40)\n-0F35A Extra Length          0000 (0)\n-0F35C Comment Length        0000 (0)\n-0F35E Disk Start            0000 (0)\n-0F360 Int File Attributes   0000 (0)\n+0F476 Compression Method    0000 (0) 'Stored'\n+0F478 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F47C CRC                   00000000 (0)\n+0F480 Compressed Size       00000000 (0)\n+0F484 Uncompressed Size     00000000 (0)\n+0F488 Filename Length       0028 (40)\n+0F48A Extra Length          0000 (0)\n+0F48C Comment Length        0000 (0)\n+0F48E Disk Start            0000 (0)\n+0F490 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F362 Ext File Attributes   41ED0010 (1106051088)\n+0F492 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F366 Local Header Offset   00000183 (387)\n-0F36A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F496 Local Header Offset   00000183 (387)\n+0F49A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF36A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF49A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF36A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF49A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF342: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF472: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F392 CENTRAL HEADER #9     02014B50 (33639248)\n-0F396 Created Zip Spec      14 (20) '2.0'\n-0F397 Created OS            03 (3) 'Unix'\n-0F398 Extract Zip Spec      0A (10) '1.0'\n-0F399 Extract OS            00 (0) 'MS-DOS'\n-0F39A General Purpose Flag  0800 (2048)\n+0F4C2 CENTRAL HEADER #9     02014B50 (33639248)\n+0F4C6 Created Zip Spec      14 (20) '2.0'\n+0F4C7 Created OS            03 (3) 'Unix'\n+0F4C8 Extract Zip Spec      0A (10) '1.0'\n+0F4C9 Extract OS            00 (0) 'MS-DOS'\n+0F4CA General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F39C Compression Method    0000 (0) 'Stored'\n-0F39E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F3A2 CRC                   00000000 (0)\n-0F3A6 Compressed Size       00000000 (0)\n-0F3AA Uncompressed Size     00000000 (0)\n-0F3AE Filename Length       0025 (37)\n-0F3B0 Extra Length          0000 (0)\n-0F3B2 Comment Length        0000 (0)\n-0F3B4 Disk Start            0000 (0)\n-0F3B6 Int File Attributes   0000 (0)\n+0F4CC Compression Method    0000 (0) 'Stored'\n+0F4CE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F4D2 CRC                   00000000 (0)\n+0F4D6 Compressed Size       00000000 (0)\n+0F4DA Uncompressed Size     00000000 (0)\n+0F4DE Filename Length       0025 (37)\n+0F4E0 Extra Length          0000 (0)\n+0F4E2 Comment Length        0000 (0)\n+0F4E4 Disk Start            0000 (0)\n+0F4E6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F3B8 Ext File Attributes   41ED0010 (1106051088)\n+0F4E8 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F3BC Local Header Offset   000001C9 (457)\n-0F3C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F4EC Local Header Offset   000001C9 (457)\n+0F4F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF3C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF4F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF3C0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF4F0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF398: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF4C8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F3E5 CENTRAL HEADER #10    02014B50 (33639248)\n-0F3E9 Created Zip Spec      14 (20) '2.0'\n-0F3EA Created OS            03 (3) 'Unix'\n-0F3EB Extract Zip Spec      0A (10) '1.0'\n-0F3EC Extract OS            00 (0) 'MS-DOS'\n-0F3ED General Purpose Flag  0800 (2048)\n+0F515 CENTRAL HEADER #10    02014B50 (33639248)\n+0F519 Created Zip Spec      14 (20) '2.0'\n+0F51A Created OS            03 (3) 'Unix'\n+0F51B Extract Zip Spec      0A (10) '1.0'\n+0F51C Extract OS            00 (0) 'MS-DOS'\n+0F51D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F3EF Compression Method    0000 (0) 'Stored'\n-0F3F1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F3F5 CRC                   00000000 (0)\n-0F3F9 Compressed Size       00000000 (0)\n-0F3FD Uncompressed Size     00000000 (0)\n-0F401 Filename Length       0022 (34)\n-0F403 Extra Length          0000 (0)\n-0F405 Comment Length        0000 (0)\n-0F407 Disk Start            0000 (0)\n-0F409 Int File Attributes   0000 (0)\n+0F51F Compression Method    0000 (0) 'Stored'\n+0F521 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F525 CRC                   00000000 (0)\n+0F529 Compressed Size       00000000 (0)\n+0F52D Uncompressed Size     00000000 (0)\n+0F531 Filename Length       0022 (34)\n+0F533 Extra Length          0000 (0)\n+0F535 Comment Length        0000 (0)\n+0F537 Disk Start            0000 (0)\n+0F539 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F40B Ext File Attributes   41ED0010 (1106051088)\n+0F53B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F40F Local Header Offset   0000020C (524)\n-0F413 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F53F Local Header Offset   0000020C (524)\n+0F543 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF413: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF543: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF413: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF543: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF3EB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF51B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F435 CENTRAL HEADER #11    02014B50 (33639248)\n-0F439 Created Zip Spec      14 (20) '2.0'\n-0F43A Created OS            03 (3) 'Unix'\n-0F43B Extract Zip Spec      0A (10) '1.0'\n-0F43C Extract OS            00 (0) 'MS-DOS'\n-0F43D General Purpose Flag  0800 (2048)\n+0F565 CENTRAL HEADER #11    02014B50 (33639248)\n+0F569 Created Zip Spec      14 (20) '2.0'\n+0F56A Created OS            03 (3) 'Unix'\n+0F56B Extract Zip Spec      0A (10) '1.0'\n+0F56C Extract OS            00 (0) 'MS-DOS'\n+0F56D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F43F Compression Method    0000 (0) 'Stored'\n-0F441 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F445 CRC                   00000000 (0)\n-0F449 Compressed Size       00000000 (0)\n-0F44D Uncompressed Size     00000000 (0)\n-0F451 Filename Length       0022 (34)\n-0F453 Extra Length          0000 (0)\n-0F455 Comment Length        0000 (0)\n-0F457 Disk Start            0000 (0)\n-0F459 Int File Attributes   0000 (0)\n+0F56F Compression Method    0000 (0) 'Stored'\n+0F571 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F575 CRC                   00000000 (0)\n+0F579 Compressed Size       00000000 (0)\n+0F57D Uncompressed Size     00000000 (0)\n+0F581 Filename Length       0022 (34)\n+0F583 Extra Length          0000 (0)\n+0F585 Comment Length        0000 (0)\n+0F587 Disk Start            0000 (0)\n+0F589 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F45B Ext File Attributes   41ED0010 (1106051088)\n+0F58B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F45F Local Header Offset   0000024C (588)\n-0F463 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F58F Local Header Offset   0000024C (588)\n+0F593 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF463: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF593: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF463: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF593: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF43B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF56B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F485 CENTRAL HEADER #12    02014B50 (33639248)\n-0F489 Created Zip Spec      14 (20) '2.0'\n-0F48A Created OS            03 (3) 'Unix'\n-0F48B Extract Zip Spec      0A (10) '1.0'\n-0F48C Extract OS            00 (0) 'MS-DOS'\n-0F48D General Purpose Flag  0800 (2048)\n+0F5B5 CENTRAL HEADER #12    02014B50 (33639248)\n+0F5B9 Created Zip Spec      14 (20) '2.0'\n+0F5BA Created OS            03 (3) 'Unix'\n+0F5BB Extract Zip Spec      0A (10) '1.0'\n+0F5BC Extract OS            00 (0) 'MS-DOS'\n+0F5BD General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F48F Compression Method    0000 (0) 'Stored'\n-0F491 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F495 CRC                   00000000 (0)\n-0F499 Compressed Size       00000000 (0)\n-0F49D Uncompressed Size     00000000 (0)\n-0F4A1 Filename Length       001C (28)\n-0F4A3 Extra Length          0000 (0)\n-0F4A5 Comment Length        0000 (0)\n-0F4A7 Disk Start            0000 (0)\n-0F4A9 Int File Attributes   0000 (0)\n+0F5BF Compression Method    0000 (0) 'Stored'\n+0F5C1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F5C5 CRC                   00000000 (0)\n+0F5C9 Compressed Size       00000000 (0)\n+0F5CD Uncompressed Size     00000000 (0)\n+0F5D1 Filename Length       001C (28)\n+0F5D3 Extra Length          0000 (0)\n+0F5D5 Comment Length        0000 (0)\n+0F5D7 Disk Start            0000 (0)\n+0F5D9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F4AB Ext File Attributes   41ED0010 (1106051088)\n+0F5DB Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F4AF Local Header Offset   0000028C (652)\n-0F4B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F5DF Local Header Offset   0000028C (652)\n+0F5E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF4B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF5E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF4B3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF5E3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF48B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF5BB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F4CF CENTRAL HEADER #13    02014B50 (33639248)\n-0F4D3 Created Zip Spec      14 (20) '2.0'\n-0F4D4 Created OS            03 (3) 'Unix'\n-0F4D5 Extract Zip Spec      0A (10) '1.0'\n-0F4D6 Extract OS            00 (0) 'MS-DOS'\n-0F4D7 General Purpose Flag  0800 (2048)\n+0F5FF CENTRAL HEADER #13    02014B50 (33639248)\n+0F603 Created Zip Spec      14 (20) '2.0'\n+0F604 Created OS            03 (3) 'Unix'\n+0F605 Extract Zip Spec      0A (10) '1.0'\n+0F606 Extract OS            00 (0) 'MS-DOS'\n+0F607 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F4D9 Compression Method    0000 (0) 'Stored'\n-0F4DB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F4DF CRC                   00000000 (0)\n-0F4E3 Compressed Size       00000000 (0)\n-0F4E7 Uncompressed Size     00000000 (0)\n-0F4EB Filename Length       001C (28)\n-0F4ED Extra Length          0000 (0)\n-0F4EF Comment Length        0000 (0)\n-0F4F1 Disk Start            0000 (0)\n-0F4F3 Int File Attributes   0000 (0)\n+0F609 Compression Method    0000 (0) 'Stored'\n+0F60B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F60F CRC                   00000000 (0)\n+0F613 Compressed Size       00000000 (0)\n+0F617 Uncompressed Size     00000000 (0)\n+0F61B Filename Length       001C (28)\n+0F61D Extra Length          0000 (0)\n+0F61F Comment Length        0000 (0)\n+0F621 Disk Start            0000 (0)\n+0F623 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F4F5 Ext File Attributes   41ED0010 (1106051088)\n+0F625 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F4F9 Local Header Offset   000002C6 (710)\n-0F4FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F629 Local Header Offset   000002C6 (710)\n+0F62D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF4FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF62D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF4FD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF62D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF4D5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF605: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F519 CENTRAL HEADER #14    02014B50 (33639248)\n-0F51D Created Zip Spec      14 (20) '2.0'\n-0F51E Created OS            03 (3) 'Unix'\n-0F51F Extract Zip Spec      0A (10) '1.0'\n-0F520 Extract OS            00 (0) 'MS-DOS'\n-0F521 General Purpose Flag  0800 (2048)\n+0F649 CENTRAL HEADER #14    02014B50 (33639248)\n+0F64D Created Zip Spec      14 (20) '2.0'\n+0F64E Created OS            03 (3) 'Unix'\n+0F64F Extract Zip Spec      0A (10) '1.0'\n+0F650 Extract OS            00 (0) 'MS-DOS'\n+0F651 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F523 Compression Method    0000 (0) 'Stored'\n-0F525 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F529 CRC                   00000000 (0)\n-0F52D Compressed Size       00000000 (0)\n-0F531 Uncompressed Size     00000000 (0)\n-0F535 Filename Length       001E (30)\n-0F537 Extra Length          0000 (0)\n-0F539 Comment Length        0000 (0)\n-0F53B Disk Start            0000 (0)\n-0F53D Int File Attributes   0000 (0)\n+0F653 Compression Method    0000 (0) 'Stored'\n+0F655 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F659 CRC                   00000000 (0)\n+0F65D Compressed Size       00000000 (0)\n+0F661 Uncompressed Size     00000000 (0)\n+0F665 Filename Length       001E (30)\n+0F667 Extra Length          0000 (0)\n+0F669 Comment Length        0000 (0)\n+0F66B Disk Start            0000 (0)\n+0F66D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F53F Ext File Attributes   41ED0010 (1106051088)\n+0F66F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F543 Local Header Offset   00000300 (768)\n-0F547 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F673 Local Header Offset   00000300 (768)\n+0F677 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF547: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF677: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF547: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF677: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF51F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF64F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F565 CENTRAL HEADER #15    02014B50 (33639248)\n-0F569 Created Zip Spec      14 (20) '2.0'\n-0F56A Created OS            03 (3) 'Unix'\n-0F56B Extract Zip Spec      0A (10) '1.0'\n-0F56C Extract OS            00 (0) 'MS-DOS'\n-0F56D General Purpose Flag  0800 (2048)\n+0F695 CENTRAL HEADER #15    02014B50 (33639248)\n+0F699 Created Zip Spec      14 (20) '2.0'\n+0F69A Created OS            03 (3) 'Unix'\n+0F69B Extract Zip Spec      0A (10) '1.0'\n+0F69C Extract OS            00 (0) 'MS-DOS'\n+0F69D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F56F Compression Method    0000 (0) 'Stored'\n-0F571 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F575 CRC                   00000000 (0)\n-0F579 Compressed Size       00000000 (0)\n-0F57D Uncompressed Size     00000000 (0)\n-0F581 Filename Length       001C (28)\n-0F583 Extra Length          0000 (0)\n-0F585 Comment Length        0000 (0)\n-0F587 Disk Start            0000 (0)\n-0F589 Int File Attributes   0000 (0)\n+0F69F Compression Method    0000 (0) 'Stored'\n+0F6A1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F6A5 CRC                   00000000 (0)\n+0F6A9 Compressed Size       00000000 (0)\n+0F6AD Uncompressed Size     00000000 (0)\n+0F6B1 Filename Length       001C (28)\n+0F6B3 Extra Length          0000 (0)\n+0F6B5 Comment Length        0000 (0)\n+0F6B7 Disk Start            0000 (0)\n+0F6B9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F58B Ext File Attributes   41ED0010 (1106051088)\n+0F6BB Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F58F Local Header Offset   0000033C (828)\n-0F593 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F6BF Local Header Offset   0000033C (828)\n+0F6C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF593: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF6C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF593: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF6C3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF56B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF69B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F5AF CENTRAL HEADER #16    02014B50 (33639248)\n-0F5B3 Created Zip Spec      14 (20) '2.0'\n-0F5B4 Created OS            03 (3) 'Unix'\n-0F5B5 Extract Zip Spec      0A (10) '1.0'\n-0F5B6 Extract OS            00 (0) 'MS-DOS'\n-0F5B7 General Purpose Flag  0800 (2048)\n+0F6DF CENTRAL HEADER #16    02014B50 (33639248)\n+0F6E3 Created Zip Spec      14 (20) '2.0'\n+0F6E4 Created OS            03 (3) 'Unix'\n+0F6E5 Extract Zip Spec      0A (10) '1.0'\n+0F6E6 Extract OS            00 (0) 'MS-DOS'\n+0F6E7 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F5B9 Compression Method    0000 (0) 'Stored'\n-0F5BB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F5BF CRC                   00000000 (0)\n-0F5C3 Compressed Size       00000000 (0)\n-0F5C7 Uncompressed Size     00000000 (0)\n-0F5CB Filename Length       0024 (36)\n-0F5CD Extra Length          0000 (0)\n-0F5CF Comment Length        0000 (0)\n-0F5D1 Disk Start            0000 (0)\n-0F5D3 Int File Attributes   0000 (0)\n+0F6E9 Compression Method    0000 (0) 'Stored'\n+0F6EB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F6EF CRC                   00000000 (0)\n+0F6F3 Compressed Size       00000000 (0)\n+0F6F7 Uncompressed Size     00000000 (0)\n+0F6FB Filename Length       0024 (36)\n+0F6FD Extra Length          0000 (0)\n+0F6FF Comment Length        0000 (0)\n+0F701 Disk Start            0000 (0)\n+0F703 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F5D5 Ext File Attributes   41ED0010 (1106051088)\n+0F705 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F5D9 Local Header Offset   00000376 (886)\n-0F5DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F709 Local Header Offset   00000376 (886)\n+0F70D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF5DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF70D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF5DD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF70D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF5B5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF6E5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F601 CENTRAL HEADER #17    02014B50 (33639248)\n-0F605 Created Zip Spec      14 (20) '2.0'\n-0F606 Created OS            03 (3) 'Unix'\n-0F607 Extract Zip Spec      0A (10) '1.0'\n-0F608 Extract OS            00 (0) 'MS-DOS'\n-0F609 General Purpose Flag  0800 (2048)\n+0F731 CENTRAL HEADER #17    02014B50 (33639248)\n+0F735 Created Zip Spec      14 (20) '2.0'\n+0F736 Created OS            03 (3) 'Unix'\n+0F737 Extract Zip Spec      0A (10) '1.0'\n+0F738 Extract OS            00 (0) 'MS-DOS'\n+0F739 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F60B Compression Method    0000 (0) 'Stored'\n-0F60D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F611 CRC                   00000000 (0)\n-0F615 Compressed Size       00000000 (0)\n-0F619 Uncompressed Size     00000000 (0)\n-0F61D Filename Length       001C (28)\n-0F61F Extra Length          0000 (0)\n-0F621 Comment Length        0000 (0)\n-0F623 Disk Start            0000 (0)\n-0F625 Int File Attributes   0000 (0)\n+0F73B Compression Method    0000 (0) 'Stored'\n+0F73D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F741 CRC                   00000000 (0)\n+0F745 Compressed Size       00000000 (0)\n+0F749 Uncompressed Size     00000000 (0)\n+0F74D Filename Length       001C (28)\n+0F74F Extra Length          0000 (0)\n+0F751 Comment Length        0000 (0)\n+0F753 Disk Start            0000 (0)\n+0F755 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F627 Ext File Attributes   41ED0010 (1106051088)\n+0F757 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F62B Local Header Offset   000003B8 (952)\n-0F62F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F75B Local Header Offset   000003B8 (952)\n+0F75F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF62F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF75F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF62F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF75F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF607: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF737: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F64B CENTRAL HEADER #18    02014B50 (33639248)\n-0F64F Created Zip Spec      14 (20) '2.0'\n-0F650 Created OS            03 (3) 'Unix'\n-0F651 Extract Zip Spec      0A (10) '1.0'\n-0F652 Extract OS            00 (0) 'MS-DOS'\n-0F653 General Purpose Flag  0800 (2048)\n+0F77B CENTRAL HEADER #18    02014B50 (33639248)\n+0F77F Created Zip Spec      14 (20) '2.0'\n+0F780 Created OS            03 (3) 'Unix'\n+0F781 Extract Zip Spec      0A (10) '1.0'\n+0F782 Extract OS            00 (0) 'MS-DOS'\n+0F783 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F655 Compression Method    0000 (0) 'Stored'\n-0F657 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F65B CRC                   00000000 (0)\n-0F65F Compressed Size       00000000 (0)\n-0F663 Uncompressed Size     00000000 (0)\n-0F667 Filename Length       000F (15)\n-0F669 Extra Length          0000 (0)\n-0F66B Comment Length        0000 (0)\n-0F66D Disk Start            0000 (0)\n-0F66F Int File Attributes   0000 (0)\n+0F785 Compression Method    0000 (0) 'Stored'\n+0F787 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F78B CRC                   00000000 (0)\n+0F78F Compressed Size       00000000 (0)\n+0F793 Uncompressed Size     00000000 (0)\n+0F797 Filename Length       000F (15)\n+0F799 Extra Length          0000 (0)\n+0F79B Comment Length        0000 (0)\n+0F79D Disk Start            0000 (0)\n+0F79F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F671 Ext File Attributes   41ED0010 (1106051088)\n+0F7A1 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F675 Local Header Offset   000003F2 (1010)\n-0F679 Filename              'XXXXXXXXXXXXXXX'\n+0F7A5 Local Header Offset   000003F2 (1010)\n+0F7A9 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF679: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF7A9: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF679: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF7A9: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF651: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF781: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-0F688 CENTRAL HEADER #19    02014B50 (33639248)\n-0F68C Created Zip Spec      14 (20) '2.0'\n-0F68D Created OS            03 (3) 'Unix'\n-0F68E Extract Zip Spec      0A (10) '1.0'\n-0F68F Extract OS            00 (0) 'MS-DOS'\n-0F690 General Purpose Flag  0800 (2048)\n+0F7B8 CENTRAL HEADER #19    02014B50 (33639248)\n+0F7BC Created Zip Spec      14 (20) '2.0'\n+0F7BD Created OS            03 (3) 'Unix'\n+0F7BE Extract Zip Spec      0A (10) '1.0'\n+0F7BF Extract OS            00 (0) 'MS-DOS'\n+0F7C0 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F692 Compression Method    0000 (0) 'Stored'\n-0F694 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F698 CRC                   00000000 (0)\n-0F69C Compressed Size       00000000 (0)\n-0F6A0 Uncompressed Size     00000000 (0)\n-0F6A4 Filename Length       0018 (24)\n-0F6A6 Extra Length          0000 (0)\n-0F6A8 Comment Length        0000 (0)\n-0F6AA Disk Start            0000 (0)\n-0F6AC Int File Attributes   0000 (0)\n+0F7C2 Compression Method    0000 (0) 'Stored'\n+0F7C4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F7C8 CRC                   00000000 (0)\n+0F7CC Compressed Size       00000000 (0)\n+0F7D0 Uncompressed Size     00000000 (0)\n+0F7D4 Filename Length       0018 (24)\n+0F7D6 Extra Length          0000 (0)\n+0F7D8 Comment Length        0000 (0)\n+0F7DA Disk Start            0000 (0)\n+0F7DC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F6AE Ext File Attributes   41ED0010 (1106051088)\n+0F7DE Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F6B2 Local Header Offset   0000041F (1055)\n-0F6B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+0F7E2 Local Header Offset   0000041F (1055)\n+0F7E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF6B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF7E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF6B6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF7E6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF68E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF7BE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F6CE CENTRAL HEADER #20    02014B50 (33639248)\n-0F6D2 Created Zip Spec      14 (20) '2.0'\n-0F6D3 Created OS            03 (3) 'Unix'\n-0F6D4 Extract Zip Spec      0A (10) '1.0'\n-0F6D5 Extract OS            00 (0) 'MS-DOS'\n-0F6D6 General Purpose Flag  0800 (2048)\n+0F7FE CENTRAL HEADER #20    02014B50 (33639248)\n+0F802 Created Zip Spec      14 (20) '2.0'\n+0F803 Created OS            03 (3) 'Unix'\n+0F804 Extract Zip Spec      0A (10) '1.0'\n+0F805 Extract OS            00 (0) 'MS-DOS'\n+0F806 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F6D8 Compression Method    0000 (0) 'Stored'\n-0F6DA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F6DE CRC                   00000000 (0)\n-0F6E2 Compressed Size       00000000 (0)\n-0F6E6 Uncompressed Size     00000000 (0)\n-0F6EA Filename Length       000F (15)\n-0F6EC Extra Length          0000 (0)\n-0F6EE Comment Length        0000 (0)\n-0F6F0 Disk Start            0000 (0)\n-0F6F2 Int File Attributes   0000 (0)\n+0F808 Compression Method    0000 (0) 'Stored'\n+0F80A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F80E CRC                   00000000 (0)\n+0F812 Compressed Size       00000000 (0)\n+0F816 Uncompressed Size     00000000 (0)\n+0F81A Filename Length       000F (15)\n+0F81C Extra Length          0000 (0)\n+0F81E Comment Length        0000 (0)\n+0F820 Disk Start            0000 (0)\n+0F822 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F6F4 Ext File Attributes   41ED0010 (1106051088)\n+0F824 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F6F8 Local Header Offset   00000455 (1109)\n-0F6FC Filename              'XXXXXXXXXXXXXXX'\n+0F828 Local Header Offset   00000455 (1109)\n+0F82C Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF6FC: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF82C: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF6FC: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF82C: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF6D4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF804: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-0F70B CENTRAL HEADER #21    02014B50 (33639248)\n-0F70F Created Zip Spec      14 (20) '2.0'\n-0F710 Created OS            03 (3) 'Unix'\n-0F711 Extract Zip Spec      0A (10) '1.0'\n-0F712 Extract OS            00 (0) 'MS-DOS'\n-0F713 General Purpose Flag  0800 (2048)\n+0F83B CENTRAL HEADER #21    02014B50 (33639248)\n+0F83F Created Zip Spec      14 (20) '2.0'\n+0F840 Created OS            03 (3) 'Unix'\n+0F841 Extract Zip Spec      0A (10) '1.0'\n+0F842 Extract OS            00 (0) 'MS-DOS'\n+0F843 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F715 Compression Method    0000 (0) 'Stored'\n-0F717 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F71B CRC                   00000000 (0)\n-0F71F Compressed Size       00000000 (0)\n-0F723 Uncompressed Size     00000000 (0)\n-0F727 Filename Length       0020 (32)\n-0F729 Extra Length          0000 (0)\n-0F72B Comment Length        0000 (0)\n-0F72D Disk Start            0000 (0)\n-0F72F Int File Attributes   0000 (0)\n+0F845 Compression Method    0000 (0) 'Stored'\n+0F847 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F84B CRC                   00000000 (0)\n+0F84F Compressed Size       00000000 (0)\n+0F853 Uncompressed Size     00000000 (0)\n+0F857 Filename Length       0020 (32)\n+0F859 Extra Length          0000 (0)\n+0F85B Comment Length        0000 (0)\n+0F85D Disk Start            0000 (0)\n+0F85F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F731 Ext File Attributes   41ED0010 (1106051088)\n+0F861 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F735 Local Header Offset   00000482 (1154)\n-0F739 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F865 Local Header Offset   00000482 (1154)\n+0F869 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF739: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF869: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF739: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF869: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF711: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF841: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F759 CENTRAL HEADER #22    02014B50 (33639248)\n-0F75D Created Zip Spec      14 (20) '2.0'\n-0F75E Created OS            03 (3) 'Unix'\n-0F75F Extract Zip Spec      0A (10) '1.0'\n-0F760 Extract OS            00 (0) 'MS-DOS'\n-0F761 General Purpose Flag  0800 (2048)\n+0F889 CENTRAL HEADER #22    02014B50 (33639248)\n+0F88D Created Zip Spec      14 (20) '2.0'\n+0F88E Created OS            03 (3) 'Unix'\n+0F88F Extract Zip Spec      0A (10) '1.0'\n+0F890 Extract OS            00 (0) 'MS-DOS'\n+0F891 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-0F763 Compression Method    0000 (0) 'Stored'\n-0F765 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F769 CRC                   00000000 (0)\n-0F76D Compressed Size       00000000 (0)\n-0F771 Uncompressed Size     00000000 (0)\n-0F775 Filename Length       002A (42)\n-0F777 Extra Length          0000 (0)\n-0F779 Comment Length        0000 (0)\n-0F77B Disk Start            0000 (0)\n-0F77D Int File Attributes   0000 (0)\n+0F893 Compression Method    0000 (0) 'Stored'\n+0F895 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F899 CRC                   00000000 (0)\n+0F89D Compressed Size       00000000 (0)\n+0F8A1 Uncompressed Size     00000000 (0)\n+0F8A5 Filename Length       002A (42)\n+0F8A7 Extra Length          0000 (0)\n+0F8A9 Comment Length        0000 (0)\n+0F8AB Disk Start            0000 (0)\n+0F8AD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F77F Ext File Attributes   41ED0010 (1106051088)\n+0F8AF Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-0F783 Local Header Offset   000004C0 (1216)\n-0F787 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F8B3 Local Header Offset   000004C0 (1216)\n+0F8B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF787: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF8B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xF787: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xF8B7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xF75F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF88F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-0F7B1 CENTRAL HEADER #23    02014B50 (33639248)\n-0F7B5 Created Zip Spec      14 (20) '2.0'\n-0F7B6 Created OS            03 (3) 'Unix'\n-0F7B7 Extract Zip Spec      14 (20) '2.0'\n-0F7B8 Extract OS            00 (0) 'MS-DOS'\n-0F7B9 General Purpose Flag  0800 (2048)\n+0F8E1 CENTRAL HEADER #23    02014B50 (33639248)\n+0F8E5 Created Zip Spec      14 (20) '2.0'\n+0F8E6 Created OS            03 (3) 'Unix'\n+0F8E7 Extract Zip Spec      14 (20) '2.0'\n+0F8E8 Extract OS            00 (0) 'MS-DOS'\n+0F8E9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F7BB Compression Method    0008 (8) 'Deflated'\n-0F7BD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F7C1 CRC                   3FA1E7D4 (1067575252)\n-0F7C5 Compressed Size       000004D5 (1237)\n-0F7C9 Uncompressed Size     00001A04 (6660)\n-0F7CD Filename Length       0015 (21)\n-0F7CF Extra Length          0000 (0)\n-0F7D1 Comment Length        0000 (0)\n-0F7D3 Disk Start            0000 (0)\n-0F7D5 Int File Attributes   0000 (0)\n+0F8EB Compression Method    0008 (8) 'Deflated'\n+0F8ED Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F8F1 CRC                   3FA1E7D4 (1067575252)\n+0F8F5 Compressed Size       000004D5 (1237)\n+0F8F9 Uncompressed Size     00001A04 (6660)\n+0F8FD Filename Length       0015 (21)\n+0F8FF Extra Length          0000 (0)\n+0F901 Comment Length        0000 (0)\n+0F903 Disk Start            0000 (0)\n+0F905 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F7D7 Ext File Attributes   81A40000 (2175008768)\n+0F907 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F7DB Local Header Offset   00000508 (1288)\n-0F7DF Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+0F90B Local Header Offset   00000508 (1288)\n+0F90F Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF7DF: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF90F: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F7F4 CENTRAL HEADER #24    02014B50 (33639248)\n-0F7F8 Created Zip Spec      14 (20) '2.0'\n-0F7F9 Created OS            03 (3) 'Unix'\n-0F7FA Extract Zip Spec      14 (20) '2.0'\n-0F7FB Extract OS            00 (0) 'MS-DOS'\n-0F7FC General Purpose Flag  0800 (2048)\n+0F924 CENTRAL HEADER #24    02014B50 (33639248)\n+0F928 Created Zip Spec      14 (20) '2.0'\n+0F929 Created OS            03 (3) 'Unix'\n+0F92A Extract Zip Spec      14 (20) '2.0'\n+0F92B Extract OS            00 (0) 'MS-DOS'\n+0F92C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F7FE Compression Method    0008 (8) 'Deflated'\n-0F800 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F804 CRC                   86E2B4B4 (2263004340)\n-0F808 Compressed Size       00000F6D (3949)\n-0F80C Uncompressed Size     00002C5E (11358)\n-0F810 Filename Length       0010 (16)\n-0F812 Extra Length          0000 (0)\n-0F814 Comment Length        0000 (0)\n-0F816 Disk Start            0000 (0)\n-0F818 Int File Attributes   0000 (0)\n+0F92E Compression Method    0008 (8) 'Deflated'\n+0F930 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F934 CRC                   86E2B4B4 (2263004340)\n+0F938 Compressed Size       00000F6D (3949)\n+0F93C Uncompressed Size     00002C5E (11358)\n+0F940 Filename Length       0010 (16)\n+0F942 Extra Length          0000 (0)\n+0F944 Comment Length        0000 (0)\n+0F946 Disk Start            0000 (0)\n+0F948 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F81A Ext File Attributes   81A40000 (2175008768)\n+0F94A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F81E Local Header Offset   00000A10 (2576)\n-0F822 Filename              'XXXXXXXXXXXXXXXX'\n+0F94E Local Header Offset   00000A10 (2576)\n+0F952 Filename              'XXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF822: Filename 'XXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF952: Filename 'XXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F832 CENTRAL HEADER #25    02014B50 (33639248)\n-0F836 Created Zip Spec      14 (20) '2.0'\n-0F837 Created OS            03 (3) 'Unix'\n-0F838 Extract Zip Spec      14 (20) '2.0'\n-0F839 Extract OS            00 (0) 'MS-DOS'\n-0F83A General Purpose Flag  0800 (2048)\n+0F962 CENTRAL HEADER #25    02014B50 (33639248)\n+0F966 Created Zip Spec      14 (20) '2.0'\n+0F967 Created OS            03 (3) 'Unix'\n+0F968 Extract Zip Spec      14 (20) '2.0'\n+0F969 Extract OS            00 (0) 'MS-DOS'\n+0F96A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F83C Compression Method    0008 (8) 'Deflated'\n-0F83E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F842 CRC                   6BA82C99 (1806183577)\n-0F846 Compressed Size       0000007A (122)\n-0F84A Uncompressed Size     000000A6 (166)\n-0F84E Filename Length       000F (15)\n-0F850 Extra Length          0000 (0)\n-0F852 Comment Length        0000 (0)\n-0F854 Disk Start            0000 (0)\n-0F856 Int File Attributes   0000 (0)\n+0F96C Compression Method    0008 (8) 'Deflated'\n+0F96E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F972 CRC                   6BA82C99 (1806183577)\n+0F976 Compressed Size       0000007A (122)\n+0F97A Uncompressed Size     000000A6 (166)\n+0F97E Filename Length       000F (15)\n+0F980 Extra Length          0000 (0)\n+0F982 Comment Length        0000 (0)\n+0F984 Disk Start            0000 (0)\n+0F986 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F858 Ext File Attributes   81A40000 (2175008768)\n+0F988 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F85C Local Header Offset   000019AB (6571)\n-0F860 Filename              'XXXXXXXXXXXXXXX'\n+0F98C Local Header Offset   000019AB (6571)\n+0F990 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF860: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF990: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F86F CENTRAL HEADER #26    02014B50 (33639248)\n-0F873 Created Zip Spec      14 (20) '2.0'\n-0F874 Created OS            03 (3) 'Unix'\n-0F875 Extract Zip Spec      14 (20) '2.0'\n-0F876 Extract OS            00 (0) 'MS-DOS'\n-0F877 General Purpose Flag  0800 (2048)\n+0F99F CENTRAL HEADER #26    02014B50 (33639248)\n+0F9A3 Created Zip Spec      14 (20) '2.0'\n+0F9A4 Created OS            03 (3) 'Unix'\n+0F9A5 Extract Zip Spec      14 (20) '2.0'\n+0F9A6 Extract OS            00 (0) 'MS-DOS'\n+0F9A7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F879 Compression Method    0008 (8) 'Deflated'\n-0F87B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F87F CRC                   FE44AB9A (4265913242)\n-0F883 Compressed Size       00000237 (567)\n-0F887 Uncompressed Size     000003F7 (1015)\n-0F88B Filename Length       002D (45)\n-0F88D Extra Length          0000 (0)\n-0F88F Comment Length        0000 (0)\n-0F891 Disk Start            0000 (0)\n-0F893 Int File Attributes   0000 (0)\n+0F9A9 Compression Method    0008 (8) 'Deflated'\n+0F9AB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0F9AF CRC                   FE44AB9A (4265913242)\n+0F9B3 Compressed Size       00000237 (567)\n+0F9B7 Uncompressed Size     000003F7 (1015)\n+0F9BB Filename Length       002D (45)\n+0F9BD Extra Length          0000 (0)\n+0F9BF Comment Length        0000 (0)\n+0F9C1 Disk Start            0000 (0)\n+0F9C3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F895 Ext File Attributes   81A40000 (2175008768)\n+0F9C5 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F899 Local Header Offset   00001A52 (6738)\n-0F89D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F9C9 Local Header Offset   00001A52 (6738)\n+0F9CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF89D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF9CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F8CA CENTRAL HEADER #27    02014B50 (33639248)\n-0F8CE Created Zip Spec      14 (20) '2.0'\n-0F8CF Created OS            03 (3) 'Unix'\n-0F8D0 Extract Zip Spec      14 (20) '2.0'\n-0F8D1 Extract OS            00 (0) 'MS-DOS'\n-0F8D2 General Purpose Flag  0800 (2048)\n+0F9FA CENTRAL HEADER #27    02014B50 (33639248)\n+0F9FE Created Zip Spec      14 (20) '2.0'\n+0F9FF Created OS            03 (3) 'Unix'\n+0FA00 Extract Zip Spec      14 (20) '2.0'\n+0FA01 Extract OS            00 (0) 'MS-DOS'\n+0FA02 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F8D4 Compression Method    0008 (8) 'Deflated'\n-0F8D6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F8DA CRC                   C783A617 (3347293719)\n-0F8DE Compressed Size       0000030B (779)\n-0F8E2 Uncompressed Size     00000880 (2176)\n-0F8E6 Filename Length       0030 (48)\n-0F8E8 Extra Length          0000 (0)\n-0F8EA Comment Length        0000 (0)\n-0F8EC Disk Start            0000 (0)\n-0F8EE Int File Attributes   0000 (0)\n+0FA04 Compression Method    0008 (8) 'Deflated'\n+0FA06 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FA0A CRC                   C783A617 (3347293719)\n+0FA0E Compressed Size       0000030B (779)\n+0FA12 Uncompressed Size     00000880 (2176)\n+0FA16 Filename Length       0030 (48)\n+0FA18 Extra Length          0000 (0)\n+0FA1A Comment Length        0000 (0)\n+0FA1C Disk Start            0000 (0)\n+0FA1E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F8F0 Ext File Attributes   81A40000 (2175008768)\n+0FA20 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F8F4 Local Header Offset   00001CD4 (7380)\n-0F8F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FA24 Local Header Offset   00001CD4 (7380)\n+0FA28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF8F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFA28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F928 CENTRAL HEADER #28    02014B50 (33639248)\n-0F92C Created Zip Spec      14 (20) '2.0'\n-0F92D Created OS            03 (3) 'Unix'\n-0F92E Extract Zip Spec      14 (20) '2.0'\n-0F92F Extract OS            00 (0) 'MS-DOS'\n-0F930 General Purpose Flag  0800 (2048)\n+0FA58 CENTRAL HEADER #28    02014B50 (33639248)\n+0FA5C Created Zip Spec      14 (20) '2.0'\n+0FA5D Created OS            03 (3) 'Unix'\n+0FA5E Extract Zip Spec      14 (20) '2.0'\n+0FA5F Extract OS            00 (0) 'MS-DOS'\n+0FA60 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F932 Compression Method    0008 (8) 'Deflated'\n-0F934 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F938 CRC                   F2C44151 (4072948049)\n-0F93C Compressed Size       00000252 (594)\n-0F940 Uncompressed Size     000004A6 (1190)\n-0F944 Filename Length       0037 (55)\n-0F946 Extra Length          0000 (0)\n-0F948 Comment Length        0000 (0)\n-0F94A Disk Start            0000 (0)\n-0F94C Int File Attributes   0000 (0)\n+0FA62 Compression Method    0008 (8) 'Deflated'\n+0FA64 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FA68 CRC                   F2C44151 (4072948049)\n+0FA6C Compressed Size       00000252 (594)\n+0FA70 Uncompressed Size     000004A6 (1190)\n+0FA74 Filename Length       0037 (55)\n+0FA76 Extra Length          0000 (0)\n+0FA78 Comment Length        0000 (0)\n+0FA7A Disk Start            0000 (0)\n+0FA7C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F94E Ext File Attributes   81A40000 (2175008768)\n+0FA7E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F952 Local Header Offset   0000202D (8237)\n-0F956 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FA82 Local Header Offset   0000202D (8237)\n+0FA86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF956: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFA86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F98D CENTRAL HEADER #29    02014B50 (33639248)\n-0F991 Created Zip Spec      14 (20) '2.0'\n-0F992 Created OS            03 (3) 'Unix'\n-0F993 Extract Zip Spec      14 (20) '2.0'\n-0F994 Extract OS            00 (0) 'MS-DOS'\n-0F995 General Purpose Flag  0800 (2048)\n+0FABD CENTRAL HEADER #29    02014B50 (33639248)\n+0FAC1 Created Zip Spec      14 (20) '2.0'\n+0FAC2 Created OS            03 (3) 'Unix'\n+0FAC3 Extract Zip Spec      14 (20) '2.0'\n+0FAC4 Extract OS            00 (0) 'MS-DOS'\n+0FAC5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F997 Compression Method    0008 (8) 'Deflated'\n-0F999 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F99D CRC                   D40E78F4 (3557718260)\n-0F9A1 Compressed Size       00000262 (610)\n-0F9A5 Uncompressed Size     000004A8 (1192)\n-0F9A9 Filename Length       0031 (49)\n-0F9AB Extra Length          0000 (0)\n-0F9AD Comment Length        0000 (0)\n-0F9AF Disk Start            0000 (0)\n-0F9B1 Int File Attributes   0000 (0)\n+0FAC7 Compression Method    0008 (8) 'Deflated'\n+0FAC9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FACD CRC                   D40E78F4 (3557718260)\n+0FAD1 Compressed Size       00000262 (610)\n+0FAD5 Uncompressed Size     000004A8 (1192)\n+0FAD9 Filename Length       0031 (49)\n+0FADB Extra Length          0000 (0)\n+0FADD Comment Length        0000 (0)\n+0FADF Disk Start            0000 (0)\n+0FAE1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0F9B3 Ext File Attributes   81A40000 (2175008768)\n+0FAE3 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0F9B7 Local Header Offset   000022D4 (8916)\n-0F9BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FAE7 Local Header Offset   000022D4 (8916)\n+0FAEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF9BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFAEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0F9EC CENTRAL HEADER #30    02014B50 (33639248)\n-0F9F0 Created Zip Spec      14 (20) '2.0'\n-0F9F1 Created OS            03 (3) 'Unix'\n-0F9F2 Extract Zip Spec      14 (20) '2.0'\n-0F9F3 Extract OS            00 (0) 'MS-DOS'\n-0F9F4 General Purpose Flag  0800 (2048)\n+0FB1C CENTRAL HEADER #30    02014B50 (33639248)\n+0FB20 Created Zip Spec      14 (20) '2.0'\n+0FB21 Created OS            03 (3) 'Unix'\n+0FB22 Extract Zip Spec      14 (20) '2.0'\n+0FB23 Extract OS            00 (0) 'MS-DOS'\n+0FB24 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F9F6 Compression Method    0008 (8) 'Deflated'\n-0F9F8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0F9FC CRC                   2A63E263 (711189091)\n-0FA00 Compressed Size       000002D1 (721)\n-0FA04 Uncompressed Size     0000061D (1565)\n-0FA08 Filename Length       0038 (56)\n-0FA0A Extra Length          0000 (0)\n-0FA0C Comment Length        0000 (0)\n-0FA0E Disk Start            0000 (0)\n-0FA10 Int File Attributes   0000 (0)\n+0FB26 Compression Method    0008 (8) 'Deflated'\n+0FB28 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FB2C CRC                   2A63E263 (711189091)\n+0FB30 Compressed Size       000002D1 (721)\n+0FB34 Uncompressed Size     0000061D (1565)\n+0FB38 Filename Length       0038 (56)\n+0FB3A Extra Length          0000 (0)\n+0FB3C Comment Length        0000 (0)\n+0FB3E Disk Start            0000 (0)\n+0FB40 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FA12 Ext File Attributes   81A40000 (2175008768)\n+0FB42 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FA16 Local Header Offset   00002585 (9605)\n-0FA1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FB46 Local Header Offset   00002585 (9605)\n+0FB4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFA1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFB4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FA52 CENTRAL HEADER #31    02014B50 (33639248)\n-0FA56 Created Zip Spec      14 (20) '2.0'\n-0FA57 Created OS            03 (3) 'Unix'\n-0FA58 Extract Zip Spec      14 (20) '2.0'\n-0FA59 Extract OS            00 (0) 'MS-DOS'\n-0FA5A General Purpose Flag  0800 (2048)\n+0FB82 CENTRAL HEADER #31    02014B50 (33639248)\n+0FB86 Created Zip Spec      14 (20) '2.0'\n+0FB87 Created OS            03 (3) 'Unix'\n+0FB88 Extract Zip Spec      14 (20) '2.0'\n+0FB89 Extract OS            00 (0) 'MS-DOS'\n+0FB8A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FA5C Compression Method    0008 (8) 'Deflated'\n-0FA5E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FA62 CRC                   D473D979 (3564362105)\n-0FA66 Compressed Size       0000022A (554)\n-0FA6A Uncompressed Size     00000400 (1024)\n-0FA6E Filename Length       0038 (56)\n-0FA70 Extra Length          0000 (0)\n-0FA72 Comment Length        0000 (0)\n-0FA74 Disk Start            0000 (0)\n-0FA76 Int File Attributes   0000 (0)\n+0FB8C Compression Method    0008 (8) 'Deflated'\n+0FB8E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FB92 CRC                   D473D979 (3564362105)\n+0FB96 Compressed Size       0000022A (554)\n+0FB9A Uncompressed Size     00000400 (1024)\n+0FB9E Filename Length       0038 (56)\n+0FBA0 Extra Length          0000 (0)\n+0FBA2 Comment Length        0000 (0)\n+0FBA4 Disk Start            0000 (0)\n+0FBA6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FA78 Ext File Attributes   81A40000 (2175008768)\n+0FBA8 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FA7C Local Header Offset   000028AC (10412)\n-0FA80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FBAC Local Header Offset   000028AC (10412)\n+0FBB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFA80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFBB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FAB8 CENTRAL HEADER #32    02014B50 (33639248)\n-0FABC Created Zip Spec      14 (20) '2.0'\n-0FABD Created OS            03 (3) 'Unix'\n-0FABE Extract Zip Spec      14 (20) '2.0'\n-0FABF Extract OS            00 (0) 'MS-DOS'\n-0FAC0 General Purpose Flag  0800 (2048)\n+0FBE8 CENTRAL HEADER #32    02014B50 (33639248)\n+0FBEC Created Zip Spec      14 (20) '2.0'\n+0FBED Created OS            03 (3) 'Unix'\n+0FBEE Extract Zip Spec      14 (20) '2.0'\n+0FBEF Extract OS            00 (0) 'MS-DOS'\n+0FBF0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FAC2 Compression Method    0008 (8) 'Deflated'\n-0FAC4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FAC8 CRC                   45D6532E (1171673902)\n-0FACC Compressed Size       000002C2 (706)\n-0FAD0 Uncompressed Size     00000647 (1607)\n-0FAD4 Filename Length       0030 (48)\n-0FAD6 Extra Length          0000 (0)\n-0FAD8 Comment Length        0000 (0)\n-0FADA Disk Start            0000 (0)\n-0FADC Int File Attributes   0000 (0)\n+0FBF2 Compression Method    0008 (8) 'Deflated'\n+0FBF4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FBF8 CRC                   45D6532E (1171673902)\n+0FBFC Compressed Size       000002C2 (706)\n+0FC00 Uncompressed Size     00000647 (1607)\n+0FC04 Filename Length       0030 (48)\n+0FC06 Extra Length          0000 (0)\n+0FC08 Comment Length        0000 (0)\n+0FC0A Disk Start            0000 (0)\n+0FC0C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FADE Ext File Attributes   81A40000 (2175008768)\n+0FC0E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FAE2 Local Header Offset   00002B2C (11052)\n-0FAE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FC12 Local Header Offset   00002B2C (11052)\n+0FC16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFAE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFC16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FB16 CENTRAL HEADER #33    02014B50 (33639248)\n-0FB1A Created Zip Spec      14 (20) '2.0'\n-0FB1B Created OS            03 (3) 'Unix'\n-0FB1C Extract Zip Spec      14 (20) '2.0'\n-0FB1D Extract OS            00 (0) 'MS-DOS'\n-0FB1E General Purpose Flag  0800 (2048)\n+0FC46 CENTRAL HEADER #33    02014B50 (33639248)\n+0FC4A Created Zip Spec      14 (20) '2.0'\n+0FC4B Created OS            03 (3) 'Unix'\n+0FC4C Extract Zip Spec      14 (20) '2.0'\n+0FC4D Extract OS            00 (0) 'MS-DOS'\n+0FC4E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FB20 Compression Method    0008 (8) 'Deflated'\n-0FB22 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FB26 CRC                   D812ECFA (3625118970)\n-0FB2A Compressed Size       000004A3 (1187)\n-0FB2E Uncompressed Size     00000F93 (3987)\n-0FB32 Filename Length       003C (60)\n-0FB34 Extra Length          0000 (0)\n-0FB36 Comment Length        0000 (0)\n-0FB38 Disk Start            0000 (0)\n-0FB3A Int File Attributes   0000 (0)\n+0FC50 Compression Method    0008 (8) 'Deflated'\n+0FC52 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FC56 CRC                   D812ECFA (3625118970)\n+0FC5A Compressed Size       000004A3 (1187)\n+0FC5E Uncompressed Size     00000F93 (3987)\n+0FC62 Filename Length       003C (60)\n+0FC64 Extra Length          0000 (0)\n+0FC66 Comment Length        0000 (0)\n+0FC68 Disk Start            0000 (0)\n+0FC6A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FB3C Ext File Attributes   81A40000 (2175008768)\n+0FC6C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FB40 Local Header Offset   00002E3C (11836)\n-0FB44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FC70 Local Header Offset   00002E3C (11836)\n+0FC74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFB44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFC74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FB80 CENTRAL HEADER #34    02014B50 (33639248)\n-0FB84 Created Zip Spec      14 (20) '2.0'\n-0FB85 Created OS            03 (3) 'Unix'\n-0FB86 Extract Zip Spec      14 (20) '2.0'\n-0FB87 Extract OS            00 (0) 'MS-DOS'\n-0FB88 General Purpose Flag  0800 (2048)\n+0FCB0 CENTRAL HEADER #34    02014B50 (33639248)\n+0FCB4 Created Zip Spec      14 (20) '2.0'\n+0FCB5 Created OS            03 (3) 'Unix'\n+0FCB6 Extract Zip Spec      14 (20) '2.0'\n+0FCB7 Extract OS            00 (0) 'MS-DOS'\n+0FCB8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FB8A Compression Method    0008 (8) 'Deflated'\n-0FB8C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FB90 CRC                   E1096065 (3775488101)\n-0FB94 Compressed Size       0000030F (783)\n-0FB98 Uncompressed Size     000006BD (1725)\n-0FB9C Filename Length       003E (62)\n-0FB9E Extra Length          0000 (0)\n-0FBA0 Comment Length        0000 (0)\n-0FBA2 Disk Start            0000 (0)\n-0FBA4 Int File Attributes   0000 (0)\n+0FCBA Compression Method    0008 (8) 'Deflated'\n+0FCBC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FCC0 CRC                   E1096065 (3775488101)\n+0FCC4 Compressed Size       0000030F (783)\n+0FCC8 Uncompressed Size     000006BD (1725)\n+0FCCC Filename Length       003E (62)\n+0FCCE Extra Length          0000 (0)\n+0FCD0 Comment Length        0000 (0)\n+0FCD2 Disk Start            0000 (0)\n+0FCD4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FBA6 Ext File Attributes   81A40000 (2175008768)\n+0FCD6 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FBAA Local Header Offset   00003339 (13113)\n-0FBAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FCDA Local Header Offset   00003339 (13113)\n+0FCDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFBAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFCDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FBEC CENTRAL HEADER #35    02014B50 (33639248)\n-0FBF0 Created Zip Spec      14 (20) '2.0'\n-0FBF1 Created OS            03 (3) 'Unix'\n-0FBF2 Extract Zip Spec      14 (20) '2.0'\n-0FBF3 Extract OS            00 (0) 'MS-DOS'\n-0FBF4 General Purpose Flag  0800 (2048)\n+0FD1C CENTRAL HEADER #35    02014B50 (33639248)\n+0FD20 Created Zip Spec      14 (20) '2.0'\n+0FD21 Created OS            03 (3) 'Unix'\n+0FD22 Extract Zip Spec      14 (20) '2.0'\n+0FD23 Extract OS            00 (0) 'MS-DOS'\n+0FD24 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FBF6 Compression Method    0008 (8) 'Deflated'\n-0FBF8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FBFC CRC                   86EEED41 (2263805249)\n-0FC00 Compressed Size       000004F4 (1268)\n-0FC04 Uncompressed Size     00000E84 (3716)\n-0FC08 Filename Length       002B (43)\n-0FC0A Extra Length          0000 (0)\n-0FC0C Comment Length        0000 (0)\n-0FC0E Disk Start            0000 (0)\n-0FC10 Int File Attributes   0000 (0)\n+0FD26 Compression Method    0008 (8) 'Deflated'\n+0FD28 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FD2C CRC                   86EEED41 (2263805249)\n+0FD30 Compressed Size       000004F4 (1268)\n+0FD34 Uncompressed Size     00000E84 (3716)\n+0FD38 Filename Length       002B (43)\n+0FD3A Extra Length          0000 (0)\n+0FD3C Comment Length        0000 (0)\n+0FD3E Disk Start            0000 (0)\n+0FD40 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FC12 Ext File Attributes   81A40000 (2175008768)\n+0FD42 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FC16 Local Header Offset   000036A4 (13988)\n-0FC1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FD46 Local Header Offset   000036A4 (13988)\n+0FD4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFC1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFD4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FC45 CENTRAL HEADER #36    02014B50 (33639248)\n-0FC49 Created Zip Spec      14 (20) '2.0'\n-0FC4A Created OS            03 (3) 'Unix'\n-0FC4B Extract Zip Spec      14 (20) '2.0'\n-0FC4C Extract OS            00 (0) 'MS-DOS'\n-0FC4D General Purpose Flag  0800 (2048)\n+0FD75 CENTRAL HEADER #36    02014B50 (33639248)\n+0FD79 Created Zip Spec      14 (20) '2.0'\n+0FD7A Created OS            03 (3) 'Unix'\n+0FD7B Extract Zip Spec      14 (20) '2.0'\n+0FD7C Extract OS            00 (0) 'MS-DOS'\n+0FD7D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FC4F Compression Method    0008 (8) 'Deflated'\n-0FC51 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FC55 CRC                   1E97BBCE (513260494)\n-0FC59 Compressed Size       00000439 (1081)\n-0FC5D Uncompressed Size     00000D38 (3384)\n-0FC61 Filename Length       0029 (41)\n-0FC63 Extra Length          0000 (0)\n-0FC65 Comment Length        0000 (0)\n-0FC67 Disk Start            0000 (0)\n-0FC69 Int File Attributes   0000 (0)\n+0FD7F Compression Method    0008 (8) 'Deflated'\n+0FD81 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FD85 CRC                   E32E7BA0 (3811474336)\n+0FD89 Compressed Size       00000445 (1093)\n+0FD8D Uncompressed Size     00000D90 (3472)\n+0FD91 Filename Length       0029 (41)\n+0FD93 Extra Length          0000 (0)\n+0FD95 Comment Length        0000 (0)\n+0FD97 Disk Start            0000 (0)\n+0FD99 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FC6B Ext File Attributes   81A40000 (2175008768)\n+0FD9B Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FC6F Local Header Offset   00003BE1 (15329)\n-0FC73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FD9F Local Header Offset   00003BE1 (15329)\n+0FDA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFC73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFDA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FC9C CENTRAL HEADER #37    02014B50 (33639248)\n-0FCA0 Created Zip Spec      14 (20) '2.0'\n-0FCA1 Created OS            03 (3) 'Unix'\n-0FCA2 Extract Zip Spec      14 (20) '2.0'\n-0FCA3 Extract OS            00 (0) 'MS-DOS'\n-0FCA4 General Purpose Flag  0800 (2048)\n+0FDCC CENTRAL HEADER #37    02014B50 (33639248)\n+0FDD0 Created Zip Spec      14 (20) '2.0'\n+0FDD1 Created OS            03 (3) 'Unix'\n+0FDD2 Extract Zip Spec      14 (20) '2.0'\n+0FDD3 Extract OS            00 (0) 'MS-DOS'\n+0FDD4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FCA6 Compression Method    0008 (8) 'Deflated'\n-0FCA8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FCAC CRC                   5DD1BF6F (1574027119)\n-0FCB0 Compressed Size       000004A6 (1190)\n-0FCB4 Uncompressed Size     00000D02 (3330)\n-0FCB8 Filename Length       002E (46)\n-0FCBA Extra Length          0000 (0)\n-0FCBC Comment Length        0000 (0)\n-0FCBE Disk Start            0000 (0)\n-0FCC0 Int File Attributes   0000 (0)\n+0FDD6 Compression Method    0008 (8) 'Deflated'\n+0FDD8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FDDC CRC                   C56E8E67 (3312356967)\n+0FDE0 Compressed Size       000004B2 (1202)\n+0FDE4 Uncompressed Size     00000D52 (3410)\n+0FDE8 Filename Length       002E (46)\n+0FDEA Extra Length          0000 (0)\n+0FDEC Comment Length        0000 (0)\n+0FDEE Disk Start            0000 (0)\n+0FDF0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FCC2 Ext File Attributes   81A40000 (2175008768)\n+0FDF2 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FCC6 Local Header Offset   00004061 (16481)\n-0FCCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FDF6 Local Header Offset   0000406D (16493)\n+0FDFA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFCCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFDFA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FCF8 CENTRAL HEADER #38    02014B50 (33639248)\n-0FCFC Created Zip Spec      14 (20) '2.0'\n-0FCFD Created OS            03 (3) 'Unix'\n-0FCFE Extract Zip Spec      14 (20) '2.0'\n-0FCFF Extract OS            00 (0) 'MS-DOS'\n-0FD00 General Purpose Flag  0800 (2048)\n+0FE28 CENTRAL HEADER #38    02014B50 (33639248)\n+0FE2C Created Zip Spec      14 (20) '2.0'\n+0FE2D Created OS            03 (3) 'Unix'\n+0FE2E Extract Zip Spec      14 (20) '2.0'\n+0FE2F Extract OS            00 (0) 'MS-DOS'\n+0FE30 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FD02 Compression Method    0008 (8) 'Deflated'\n-0FD04 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FD08 CRC                   677CD800 (1736235008)\n-0FD0C Compressed Size       000004B1 (1201)\n-0FD10 Uncompressed Size     00000D35 (3381)\n-0FD14 Filename Length       002D (45)\n-0FD16 Extra Length          0000 (0)\n-0FD18 Comment Length        0000 (0)\n-0FD1A Disk Start            0000 (0)\n-0FD1C Int File Attributes   0000 (0)\n+0FE32 Compression Method    0008 (8) 'Deflated'\n+0FE34 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FE38 CRC                   A95B3402 (2841326594)\n+0FE3C Compressed Size       000004BB (1211)\n+0FE40 Uncompressed Size     00000D85 (3461)\n+0FE44 Filename Length       002D (45)\n+0FE46 Extra Length          0000 (0)\n+0FE48 Comment Length        0000 (0)\n+0FE4A Disk Start            0000 (0)\n+0FE4C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FD1E Ext File Attributes   81A40000 (2175008768)\n+0FE4E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FD22 Local Header Offset   00004553 (17747)\n-0FD26 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FE52 Local Header Offset   0000456B (17771)\n+0FE56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFD26: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFE56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FD53 CENTRAL HEADER #39    02014B50 (33639248)\n-0FD57 Created Zip Spec      14 (20) '2.0'\n-0FD58 Created OS            03 (3) 'Unix'\n-0FD59 Extract Zip Spec      14 (20) '2.0'\n-0FD5A Extract OS            00 (0) 'MS-DOS'\n-0FD5B General Purpose Flag  0800 (2048)\n+0FE83 CENTRAL HEADER #39    02014B50 (33639248)\n+0FE87 Created Zip Spec      14 (20) '2.0'\n+0FE88 Created OS            03 (3) 'Unix'\n+0FE89 Extract Zip Spec      14 (20) '2.0'\n+0FE8A Extract OS            00 (0) 'MS-DOS'\n+0FE8B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FD5D Compression Method    0008 (8) 'Deflated'\n-0FD5F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FD63 CRC                   15091C1F (352918559)\n-0FD67 Compressed Size       00000490 (1168)\n-0FD6B Uncompressed Size     00000B30 (2864)\n-0FD6F Filename Length       0036 (54)\n-0FD71 Extra Length          0000 (0)\n-0FD73 Comment Length        0000 (0)\n-0FD75 Disk Start            0000 (0)\n-0FD77 Int File Attributes   0000 (0)\n+0FE8D Compression Method    0008 (8) 'Deflated'\n+0FE8F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FE93 CRC                   E56C2CA8 (3849071784)\n+0FE97 Compressed Size       0000049C (1180)\n+0FE9B Uncompressed Size     00000B6F (2927)\n+0FE9F Filename Length       0036 (54)\n+0FEA1 Extra Length          0000 (0)\n+0FEA3 Comment Length        0000 (0)\n+0FEA5 Disk Start            0000 (0)\n+0FEA7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FD79 Ext File Attributes   81A40000 (2175008768)\n+0FEA9 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FD7D Local Header Offset   00004A4F (19023)\n-0FD81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FEAD Local Header Offset   00004A71 (19057)\n+0FEB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFD81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFEB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FDB7 CENTRAL HEADER #40    02014B50 (33639248)\n-0FDBB Created Zip Spec      14 (20) '2.0'\n-0FDBC Created OS            03 (3) 'Unix'\n-0FDBD Extract Zip Spec      14 (20) '2.0'\n-0FDBE Extract OS            00 (0) 'MS-DOS'\n-0FDBF General Purpose Flag  0800 (2048)\n+0FEE7 CENTRAL HEADER #40    02014B50 (33639248)\n+0FEEB Created Zip Spec      14 (20) '2.0'\n+0FEEC Created OS            03 (3) 'Unix'\n+0FEED Extract Zip Spec      14 (20) '2.0'\n+0FEEE Extract OS            00 (0) 'MS-DOS'\n+0FEEF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FDC1 Compression Method    0008 (8) 'Deflated'\n-0FDC3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FDC7 CRC                   AADA64B2 (2866439346)\n-0FDCB Compressed Size       0000028D (653)\n-0FDCF Uncompressed Size     00000519 (1305)\n-0FDD3 Filename Length       002B (43)\n-0FDD5 Extra Length          0000 (0)\n-0FDD7 Comment Length        0000 (0)\n-0FDD9 Disk Start            0000 (0)\n-0FDDB Int File Attributes   0000 (0)\n+0FEF1 Compression Method    0008 (8) 'Deflated'\n+0FEF3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FEF7 CRC                   AADA64B2 (2866439346)\n+0FEFB Compressed Size       0000028D (653)\n+0FEFF Uncompressed Size     00000519 (1305)\n+0FF03 Filename Length       002B (43)\n+0FF05 Extra Length          0000 (0)\n+0FF07 Comment Length        0000 (0)\n+0FF09 Disk Start            0000 (0)\n+0FF0B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FDDD Ext File Attributes   81A40000 (2175008768)\n+0FF0D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FDE1 Local Header Offset   00004F33 (20275)\n-0FDE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FF11 Local Header Offset   00004F61 (20321)\n+0FF15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFDE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFF15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FE10 CENTRAL HEADER #41    02014B50 (33639248)\n-0FE14 Created Zip Spec      14 (20) '2.0'\n-0FE15 Created OS            03 (3) 'Unix'\n-0FE16 Extract Zip Spec      14 (20) '2.0'\n-0FE17 Extract OS            00 (0) 'MS-DOS'\n-0FE18 General Purpose Flag  0800 (2048)\n+0FF40 CENTRAL HEADER #41    02014B50 (33639248)\n+0FF44 Created Zip Spec      14 (20) '2.0'\n+0FF45 Created OS            03 (3) 'Unix'\n+0FF46 Extract Zip Spec      14 (20) '2.0'\n+0FF47 Extract OS            00 (0) 'MS-DOS'\n+0FF48 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FE1A Compression Method    0008 (8) 'Deflated'\n-0FE1C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FE20 CRC                   CD1091C2 (3440415170)\n-0FE24 Compressed Size       000005E7 (1511)\n-0FE28 Uncompressed Size     00001084 (4228)\n-0FE2C Filename Length       002C (44)\n-0FE2E Extra Length          0000 (0)\n-0FE30 Comment Length        0000 (0)\n-0FE32 Disk Start            0000 (0)\n-0FE34 Int File Attributes   0000 (0)\n+0FF4A Compression Method    0008 (8) 'Deflated'\n+0FF4C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FF50 CRC                   DC712B5A (3698404186)\n+0FF54 Compressed Size       000005F1 (1521)\n+0FF58 Uncompressed Size     000010E3 (4323)\n+0FF5C Filename Length       002C (44)\n+0FF5E Extra Length          0000 (0)\n+0FF60 Comment Length        0000 (0)\n+0FF62 Disk Start            0000 (0)\n+0FF64 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FE36 Ext File Attributes   81A40000 (2175008768)\n+0FF66 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FE3A Local Header Offset   00005209 (21001)\n-0FE3E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FF6A Local Header Offset   00005237 (21047)\n+0FF6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFE3E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFF6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FE6A CENTRAL HEADER #42    02014B50 (33639248)\n-0FE6E Created Zip Spec      14 (20) '2.0'\n-0FE6F Created OS            03 (3) 'Unix'\n-0FE70 Extract Zip Spec      14 (20) '2.0'\n-0FE71 Extract OS            00 (0) 'MS-DOS'\n-0FE72 General Purpose Flag  0800 (2048)\n+0FF9A CENTRAL HEADER #42    02014B50 (33639248)\n+0FF9E Created Zip Spec      14 (20) '2.0'\n+0FF9F Created OS            03 (3) 'Unix'\n+0FFA0 Extract Zip Spec      14 (20) '2.0'\n+0FFA1 Extract OS            00 (0) 'MS-DOS'\n+0FFA2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FE74 Compression Method    0008 (8) 'Deflated'\n-0FE76 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FE7A CRC                   CA6DC12E (3396190510)\n-0FE7E Compressed Size       000002BF (703)\n-0FE82 Uncompressed Size     00000600 (1536)\n-0FE86 Filename Length       002E (46)\n-0FE88 Extra Length          0000 (0)\n-0FE8A Comment Length        0000 (0)\n-0FE8C Disk Start            0000 (0)\n-0FE8E Int File Attributes   0000 (0)\n+0FFA4 Compression Method    0008 (8) 'Deflated'\n+0FFA6 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+0FFAA CRC                   1F2281E7 (522355175)\n+0FFAE Compressed Size       000002CB (715)\n+0FFB2 Uncompressed Size     00000625 (1573)\n+0FFB6 Filename Length       002E (46)\n+0FFB8 Extra Length          0000 (0)\n+0FFBA Comment Length        0000 (0)\n+0FFBC Disk Start            0000 (0)\n+0FFBE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FE90 Ext File Attributes   81A40000 (2175008768)\n+0FFC0 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FE94 Local Header Offset   0000583A (22586)\n-0FE98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FFC4 Local Header Offset   00005872 (22642)\n+0FFC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFE98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFFC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FEC6 CENTRAL HEADER #43    02014B50 (33639248)\n-0FECA Created Zip Spec      14 (20) '2.0'\n-0FECB Created OS            03 (3) 'Unix'\n-0FECC Extract Zip Spec      14 (20) '2.0'\n-0FECD Extract OS            00 (0) 'MS-DOS'\n-0FECE General Purpose Flag  0800 (2048)\n+0FFF6 CENTRAL HEADER #43    02014B50 (33639248)\n+0FFFA Created Zip Spec      14 (20) '2.0'\n+0FFFB Created OS            03 (3) 'Unix'\n+0FFFC Extract Zip Spec      14 (20) '2.0'\n+0FFFD Extract OS            00 (0) 'MS-DOS'\n+0FFFE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FED0 Compression Method    0008 (8) 'Deflated'\n-0FED2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FED6 CRC                   8BEA30C0 (2347380928)\n-0FEDA Compressed Size       00000348 (840)\n-0FEDE Uncompressed Size     00000893 (2195)\n-0FEE2 Filename Length       0034 (52)\n-0FEE4 Extra Length          0000 (0)\n-0FEE6 Comment Length        0000 (0)\n-0FEE8 Disk Start            0000 (0)\n-0FEEA Int File Attributes   0000 (0)\n+10000 Compression Method    0008 (8) 'Deflated'\n+10002 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10006 CRC                   0E9B786A (245069930)\n+1000A Compressed Size       00000350 (848)\n+1000E Uncompressed Size     000008D3 (2259)\n+10012 Filename Length       0034 (52)\n+10014 Extra Length          0000 (0)\n+10016 Comment Length        0000 (0)\n+10018 Disk Start            0000 (0)\n+1001A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FEEC Ext File Attributes   81A40000 (2175008768)\n+1001C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FEF0 Local Header Offset   00005B45 (23365)\n-0FEF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10020 Local Header Offset   00005B89 (23433)\n+10024 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFEF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10024: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FF28 CENTRAL HEADER #44    02014B50 (33639248)\n-0FF2C Created Zip Spec      14 (20) '2.0'\n-0FF2D Created OS            03 (3) 'Unix'\n-0FF2E Extract Zip Spec      14 (20) '2.0'\n-0FF2F Extract OS            00 (0) 'MS-DOS'\n-0FF30 General Purpose Flag  0800 (2048)\n+10058 CENTRAL HEADER #44    02014B50 (33639248)\n+1005C Created Zip Spec      14 (20) '2.0'\n+1005D Created OS            03 (3) 'Unix'\n+1005E Extract Zip Spec      14 (20) '2.0'\n+1005F Extract OS            00 (0) 'MS-DOS'\n+10060 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FF32 Compression Method    0008 (8) 'Deflated'\n-0FF34 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FF38 CRC                   9A0D91FA (2584580602)\n-0FF3C Compressed Size       000003DD (989)\n-0FF40 Uncompressed Size     00000A9D (2717)\n-0FF44 Filename Length       0038 (56)\n-0FF46 Extra Length          0000 (0)\n-0FF48 Comment Length        0000 (0)\n-0FF4A Disk Start            0000 (0)\n-0FF4C Int File Attributes   0000 (0)\n+10062 Compression Method    0008 (8) 'Deflated'\n+10064 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10068 CRC                   966E868C (2523825804)\n+1006C Compressed Size       000003E8 (1000)\n+10070 Uncompressed Size     00000ADB (2779)\n+10074 Filename Length       0038 (56)\n+10076 Extra Length          0000 (0)\n+10078 Comment Length        0000 (0)\n+1007A Disk Start            0000 (0)\n+1007C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FF4E Ext File Attributes   81A40000 (2175008768)\n+1007E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FF52 Local Header Offset   00005EDF (24287)\n-0FF56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10082 Local Header Offset   00005F2B (24363)\n+10086 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFF56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10086: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FF8E CENTRAL HEADER #45    02014B50 (33639248)\n-0FF92 Created Zip Spec      14 (20) '2.0'\n-0FF93 Created OS            03 (3) 'Unix'\n-0FF94 Extract Zip Spec      14 (20) '2.0'\n-0FF95 Extract OS            00 (0) 'MS-DOS'\n-0FF96 General Purpose Flag  0800 (2048)\n+100BE CENTRAL HEADER #45    02014B50 (33639248)\n+100C2 Created Zip Spec      14 (20) '2.0'\n+100C3 Created OS            03 (3) 'Unix'\n+100C4 Extract Zip Spec      14 (20) '2.0'\n+100C5 Extract OS            00 (0) 'MS-DOS'\n+100C6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FF98 Compression Method    0008 (8) 'Deflated'\n-0FF9A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FF9E CRC                   93C23403 (2478978051)\n-0FFA2 Compressed Size       0000023B (571)\n-0FFA6 Uncompressed Size     000003DE (990)\n-0FFAA Filename Length       002D (45)\n-0FFAC Extra Length          0000 (0)\n-0FFAE Comment Length        0000 (0)\n-0FFB0 Disk Start            0000 (0)\n-0FFB2 Int File Attributes   0000 (0)\n+100C8 Compression Method    0008 (8) 'Deflated'\n+100CA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+100CE CRC                   93C23403 (2478978051)\n+100D2 Compressed Size       0000023B (571)\n+100D6 Uncompressed Size     000003DE (990)\n+100DA Filename Length       002D (45)\n+100DC Extra Length          0000 (0)\n+100DE Comment Length        0000 (0)\n+100E0 Disk Start            0000 (0)\n+100E2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-0FFB4 Ext File Attributes   81A40000 (2175008768)\n+100E4 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-0FFB8 Local Header Offset   00006312 (25362)\n-0FFBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+100E8 Local Header Offset   00006369 (25449)\n+100EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFFBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x100EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-0FFE9 CENTRAL HEADER #46    02014B50 (33639248)\n-0FFED Created Zip Spec      14 (20) '2.0'\n-0FFEE Created OS            03 (3) 'Unix'\n-0FFEF Extract Zip Spec      14 (20) '2.0'\n-0FFF0 Extract OS            00 (0) 'MS-DOS'\n-0FFF1 General Purpose Flag  0800 (2048)\n+10119 CENTRAL HEADER #46    02014B50 (33639248)\n+1011D Created Zip Spec      14 (20) '2.0'\n+1011E Created OS            03 (3) 'Unix'\n+1011F Extract Zip Spec      14 (20) '2.0'\n+10120 Extract OS            00 (0) 'MS-DOS'\n+10121 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FFF3 Compression Method    0008 (8) 'Deflated'\n-0FFF5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-0FFF9 CRC                   FA05AB13 (4194675475)\n-0FFFD Compressed Size       0000046B (1131)\n-10001 Uncompressed Size     00000B10 (2832)\n-10005 Filename Length       0034 (52)\n-10007 Extra Length          0000 (0)\n-10009 Comment Length        0000 (0)\n-1000B Disk Start            0000 (0)\n-1000D Int File Attributes   0000 (0)\n+10123 Compression Method    0008 (8) 'Deflated'\n+10125 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10129 CRC                   4EEFA113 (1324327187)\n+1012D Compressed Size       00000475 (1141)\n+10131 Uncompressed Size     00000B51 (2897)\n+10135 Filename Length       0034 (52)\n+10137 Extra Length          0000 (0)\n+10139 Comment Length        0000 (0)\n+1013B Disk Start            0000 (0)\n+1013D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1000F Ext File Attributes   81A40000 (2175008768)\n+1013F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10013 Local Header Offset   00006598 (26008)\n-10017 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10143 Local Header Offset   000065EF (26095)\n+10147 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10017: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10147: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1004B CENTRAL HEADER #47    02014B50 (33639248)\n-1004F Created Zip Spec      14 (20) '2.0'\n-10050 Created OS            03 (3) 'Unix'\n-10051 Extract Zip Spec      14 (20) '2.0'\n-10052 Extract OS            00 (0) 'MS-DOS'\n-10053 General Purpose Flag  0800 (2048)\n+1017B CENTRAL HEADER #47    02014B50 (33639248)\n+1017F Created Zip Spec      14 (20) '2.0'\n+10180 Created OS            03 (3) 'Unix'\n+10181 Extract Zip Spec      14 (20) '2.0'\n+10182 Extract OS            00 (0) 'MS-DOS'\n+10183 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10055 Compression Method    0008 (8) 'Deflated'\n-10057 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1005B CRC                   4A88912B (1250464043)\n-1005F Compressed Size       000007CB (1995)\n-10063 Uncompressed Size     00001A65 (6757)\n-10067 Filename Length       0033 (51)\n-10069 Extra Length          0000 (0)\n-1006B Comment Length        0000 (0)\n-1006D Disk Start            0000 (0)\n-1006F Int File Attributes   0000 (0)\n+10185 Compression Method    0008 (8) 'Deflated'\n+10187 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1018B CRC                   9CF5D1EF (2633355759)\n+1018F Compressed Size       000007D6 (2006)\n+10193 Uncompressed Size     00001B08 (6920)\n+10197 Filename Length       0033 (51)\n+10199 Extra Length          0000 (0)\n+1019B Comment Length        0000 (0)\n+1019D Disk Start            0000 (0)\n+1019F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10071 Ext File Attributes   81A40000 (2175008768)\n+101A1 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10075 Local Header Offset   00006A55 (27221)\n-10079 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+101A5 Local Header Offset   00006AB6 (27318)\n+101A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10079: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x101A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-100AC CENTRAL HEADER #48    02014B50 (33639248)\n-100B0 Created Zip Spec      14 (20) '2.0'\n-100B1 Created OS            03 (3) 'Unix'\n-100B2 Extract Zip Spec      14 (20) '2.0'\n-100B3 Extract OS            00 (0) 'MS-DOS'\n-100B4 General Purpose Flag  0800 (2048)\n+101DC CENTRAL HEADER #48    02014B50 (33639248)\n+101E0 Created Zip Spec      14 (20) '2.0'\n+101E1 Created OS            03 (3) 'Unix'\n+101E2 Extract Zip Spec      14 (20) '2.0'\n+101E3 Extract OS            00 (0) 'MS-DOS'\n+101E4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-100B6 Compression Method    0008 (8) 'Deflated'\n-100B8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-100BC CRC                   0FA20D48 (262278472)\n-100C0 Compressed Size       00000343 (835)\n-100C4 Uncompressed Size     000006EF (1775)\n-100C8 Filename Length       0035 (53)\n-100CA Extra Length          0000 (0)\n-100CC Comment Length        0000 (0)\n-100CE Disk Start            0000 (0)\n-100D0 Int File Attributes   0000 (0)\n+101E6 Compression Method    0008 (8) 'Deflated'\n+101E8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+101EC CRC                   60B50DD7 (1622478295)\n+101F0 Compressed Size       0000034C (844)\n+101F4 Uncompressed Size     0000071D (1821)\n+101F8 Filename Length       0035 (53)\n+101FA Extra Length          0000 (0)\n+101FC Comment Length        0000 (0)\n+101FE Disk Start            0000 (0)\n+10200 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-100D2 Ext File Attributes   81A40000 (2175008768)\n+10202 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-100D6 Local Header Offset   00007271 (29297)\n-100DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10206 Local Header Offset   000072DD (29405)\n+1020A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x100DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1020A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1010F CENTRAL HEADER #49    02014B50 (33639248)\n-10113 Created Zip Spec      14 (20) '2.0'\n-10114 Created OS            03 (3) 'Unix'\n-10115 Extract Zip Spec      14 (20) '2.0'\n-10116 Extract OS            00 (0) 'MS-DOS'\n-10117 General Purpose Flag  0800 (2048)\n+1023F CENTRAL HEADER #49    02014B50 (33639248)\n+10243 Created Zip Spec      14 (20) '2.0'\n+10244 Created OS            03 (3) 'Unix'\n+10245 Extract Zip Spec      14 (20) '2.0'\n+10246 Extract OS            00 (0) 'MS-DOS'\n+10247 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10119 Compression Method    0008 (8) 'Deflated'\n-1011B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1011F CRC                   27D9ECF0 (668593392)\n-10123 Compressed Size       00000B77 (2935)\n-10127 Uncompressed Size     00002AD5 (10965)\n-1012B Filename Length       0034 (52)\n-1012D Extra Length          0000 (0)\n-1012F Comment Length        0000 (0)\n-10131 Disk Start            0000 (0)\n-10133 Int File Attributes   0000 (0)\n+10249 Compression Method    0008 (8) 'Deflated'\n+1024B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1024F CRC                   78614F57 (2019643223)\n+10253 Compressed Size       00000B88 (2952)\n+10257 Uncompressed Size     00002BDA (11226)\n+1025B Filename Length       0034 (52)\n+1025D Extra Length          0000 (0)\n+1025F Comment Length        0000 (0)\n+10261 Disk Start            0000 (0)\n+10263 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10135 Ext File Attributes   81A40000 (2175008768)\n+10265 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10139 Local Header Offset   00007607 (30215)\n-1013D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10269 Local Header Offset   0000767C (30332)\n+1026D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1013D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1026D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10171 CENTRAL HEADER #50    02014B50 (33639248)\n-10175 Created Zip Spec      14 (20) '2.0'\n-10176 Created OS            03 (3) 'Unix'\n-10177 Extract Zip Spec      14 (20) '2.0'\n-10178 Extract OS            00 (0) 'MS-DOS'\n-10179 General Purpose Flag  0800 (2048)\n+102A1 CENTRAL HEADER #50    02014B50 (33639248)\n+102A5 Created Zip Spec      14 (20) '2.0'\n+102A6 Created OS            03 (3) 'Unix'\n+102A7 Extract Zip Spec      14 (20) '2.0'\n+102A8 Extract OS            00 (0) 'MS-DOS'\n+102A9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1017B Compression Method    0008 (8) 'Deflated'\n-1017D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10181 CRC                   540DE20D (1410195981)\n-10185 Compressed Size       000006AC (1708)\n-10189 Uncompressed Size     00001A1C (6684)\n-1018D Filename Length       0032 (50)\n-1018F Extra Length          0000 (0)\n-10191 Comment Length        0000 (0)\n-10193 Disk Start            0000 (0)\n-10195 Int File Attributes   0000 (0)\n+102AB Compression Method    0008 (8) 'Deflated'\n+102AD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+102B1 CRC                   17A6F6D0 (396818128)\n+102B5 Compressed Size       000006B7 (1719)\n+102B9 Uncompressed Size     00001AC2 (6850)\n+102BD Filename Length       0032 (50)\n+102BF Extra Length          0000 (0)\n+102C1 Comment Length        0000 (0)\n+102C3 Disk Start            0000 (0)\n+102C5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10197 Ext File Attributes   81A40000 (2175008768)\n+102C7 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1019B Local Header Offset   000081D0 (33232)\n-1019F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+102CB Local Header Offset   00008256 (33366)\n+102CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1019F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x102CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-101D1 CENTRAL HEADER #51    02014B50 (33639248)\n-101D5 Created Zip Spec      14 (20) '2.0'\n-101D6 Created OS            03 (3) 'Unix'\n-101D7 Extract Zip Spec      14 (20) '2.0'\n-101D8 Extract OS            00 (0) 'MS-DOS'\n-101D9 General Purpose Flag  0800 (2048)\n+10301 CENTRAL HEADER #51    02014B50 (33639248)\n+10305 Created Zip Spec      14 (20) '2.0'\n+10306 Created OS            03 (3) 'Unix'\n+10307 Extract Zip Spec      14 (20) '2.0'\n+10308 Extract OS            00 (0) 'MS-DOS'\n+10309 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-101DB Compression Method    0008 (8) 'Deflated'\n-101DD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-101E1 CRC                   256F6EAD (628059821)\n-101E5 Compressed Size       000005BF (1471)\n-101E9 Uncompressed Size     00000F7C (3964)\n-101ED Filename Length       0031 (49)\n-101EF Extra Length          0000 (0)\n-101F1 Comment Length        0000 (0)\n-101F3 Disk Start            0000 (0)\n-101F5 Int File Attributes   0000 (0)\n+1030B Compression Method    0008 (8) 'Deflated'\n+1030D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10311 CRC                   65289261 (1697157729)\n+10315 Compressed Size       000005CC (1484)\n+10319 Uncompressed Size     00000FD7 (4055)\n+1031D Filename Length       0031 (49)\n+1031F Extra Length          0000 (0)\n+10321 Comment Length        0000 (0)\n+10323 Disk Start            0000 (0)\n+10325 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-101F7 Ext File Attributes   81A40000 (2175008768)\n+10327 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-101FB Local Header Offset   000088CC (35020)\n-101FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1032B Local Header Offset   0000895D (35165)\n+1032F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x101FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1032F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10230 CENTRAL HEADER #52    02014B50 (33639248)\n-10234 Created Zip Spec      14 (20) '2.0'\n-10235 Created OS            03 (3) 'Unix'\n-10236 Extract Zip Spec      14 (20) '2.0'\n-10237 Extract OS            00 (0) 'MS-DOS'\n-10238 General Purpose Flag  0800 (2048)\n+10360 CENTRAL HEADER #52    02014B50 (33639248)\n+10364 Created Zip Spec      14 (20) '2.0'\n+10365 Created OS            03 (3) 'Unix'\n+10366 Extract Zip Spec      14 (20) '2.0'\n+10367 Extract OS            00 (0) 'MS-DOS'\n+10368 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1023A Compression Method    0008 (8) 'Deflated'\n-1023C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10240 CRC                   41EC82BB (1106019003)\n-10244 Compressed Size       000004E6 (1254)\n-10248 Uncompressed Size     00000F05 (3845)\n-1024C Filename Length       0032 (50)\n-1024E Extra Length          0000 (0)\n-10250 Comment Length        0000 (0)\n-10252 Disk Start            0000 (0)\n-10254 Int File Attributes   0000 (0)\n+1036A Compression Method    0008 (8) 'Deflated'\n+1036C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10370 CRC                   59C732CA (1506226890)\n+10374 Compressed Size       000004F2 (1266)\n+10378 Uncompressed Size     00000F65 (3941)\n+1037C Filename Length       0032 (50)\n+1037E Extra Length          0000 (0)\n+10380 Comment Length        0000 (0)\n+10382 Disk Start            0000 (0)\n+10384 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10256 Ext File Attributes   81A40000 (2175008768)\n+10386 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1025A Local Header Offset   00008EDA (36570)\n-1025E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1038A Local Header Offset   00008F78 (36728)\n+1038E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1025E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1038E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10290 CENTRAL HEADER #53    02014B50 (33639248)\n-10294 Created Zip Spec      14 (20) '2.0'\n-10295 Created OS            03 (3) 'Unix'\n-10296 Extract Zip Spec      14 (20) '2.0'\n-10297 Extract OS            00 (0) 'MS-DOS'\n-10298 General Purpose Flag  0800 (2048)\n+103C0 CENTRAL HEADER #53    02014B50 (33639248)\n+103C4 Created Zip Spec      14 (20) '2.0'\n+103C5 Created OS            03 (3) 'Unix'\n+103C6 Extract Zip Spec      14 (20) '2.0'\n+103C7 Extract OS            00 (0) 'MS-DOS'\n+103C8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1029A Compression Method    0008 (8) 'Deflated'\n-1029C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-102A0 CRC                   C71A64BF (3340395711)\n-102A4 Compressed Size       0000044C (1100)\n-102A8 Uncompressed Size     00000AD7 (2775)\n-102AC Filename Length       0034 (52)\n-102AE Extra Length          0000 (0)\n-102B0 Comment Length        0000 (0)\n-102B2 Disk Start            0000 (0)\n-102B4 Int File Attributes   0000 (0)\n+103CA Compression Method    0008 (8) 'Deflated'\n+103CC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+103D0 CRC                   62C17732 (1656846130)\n+103D4 Compressed Size       00000456 (1110)\n+103D8 Uncompressed Size     00000B13 (2835)\n+103DC Filename Length       0034 (52)\n+103DE Extra Length          0000 (0)\n+103E0 Comment Length        0000 (0)\n+103E2 Disk Start            0000 (0)\n+103E4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-102B6 Ext File Attributes   81A40000 (2175008768)\n+103E6 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-102BA Local Header Offset   00009410 (37904)\n-102BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+103EA Local Header Offset   000094BA (38074)\n+103EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x102BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x103EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-102F2 CENTRAL HEADER #54    02014B50 (33639248)\n-102F6 Created Zip Spec      14 (20) '2.0'\n-102F7 Created OS            03 (3) 'Unix'\n-102F8 Extract Zip Spec      14 (20) '2.0'\n-102F9 Extract OS            00 (0) 'MS-DOS'\n-102FA General Purpose Flag  0800 (2048)\n+10422 CENTRAL HEADER #54    02014B50 (33639248)\n+10426 Created Zip Spec      14 (20) '2.0'\n+10427 Created OS            03 (3) 'Unix'\n+10428 Extract Zip Spec      14 (20) '2.0'\n+10429 Extract OS            00 (0) 'MS-DOS'\n+1042A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-102FC Compression Method    0008 (8) 'Deflated'\n-102FE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10302 CRC                   ED50455A (3981460826)\n-10306 Compressed Size       0000045A (1114)\n-1030A Uncompressed Size     00000A88 (2696)\n-1030E Filename Length       0036 (54)\n-10310 Extra Length          0000 (0)\n-10312 Comment Length        0000 (0)\n-10314 Disk Start            0000 (0)\n-10316 Int File Attributes   0000 (0)\n+1042C Compression Method    0008 (8) 'Deflated'\n+1042E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10432 CRC                   BD59212E (3176735022)\n+10436 Compressed Size       00000465 (1125)\n+1043A Uncompressed Size     00000AC7 (2759)\n+1043E Filename Length       0036 (54)\n+10440 Extra Length          0000 (0)\n+10442 Comment Length        0000 (0)\n+10444 Disk Start            0000 (0)\n+10446 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10318 Ext File Attributes   81A40000 (2175008768)\n+10448 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1031C Local Header Offset   000098AE (39086)\n-10320 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1044C Local Header Offset   00009962 (39266)\n+10450 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10320: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10450: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10356 CENTRAL HEADER #55    02014B50 (33639248)\n-1035A Created Zip Spec      14 (20) '2.0'\n-1035B Created OS            03 (3) 'Unix'\n-1035C Extract Zip Spec      14 (20) '2.0'\n-1035D Extract OS            00 (0) 'MS-DOS'\n-1035E General Purpose Flag  0800 (2048)\n+10486 CENTRAL HEADER #55    02014B50 (33639248)\n+1048A Created Zip Spec      14 (20) '2.0'\n+1048B Created OS            03 (3) 'Unix'\n+1048C Extract Zip Spec      14 (20) '2.0'\n+1048D Extract OS            00 (0) 'MS-DOS'\n+1048E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10360 Compression Method    0008 (8) 'Deflated'\n-10362 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10366 CRC                   BA485F30 (3125305136)\n-1036A Compressed Size       00000573 (1395)\n-1036E Uncompressed Size     00000FBB (4027)\n-10372 Filename Length       0033 (51)\n-10374 Extra Length          0000 (0)\n-10376 Comment Length        0000 (0)\n-10378 Disk Start            0000 (0)\n-1037A Int File Attributes   0000 (0)\n+10490 Compression Method    0008 (8) 'Deflated'\n+10492 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10496 CRC                   6E324421 (1848788001)\n+1049A Compressed Size       0000057D (1405)\n+1049E Uncompressed Size     00001018 (4120)\n+104A2 Filename Length       0033 (51)\n+104A4 Extra Length          0000 (0)\n+104A6 Comment Length        0000 (0)\n+104A8 Disk Start            0000 (0)\n+104AA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1037C Ext File Attributes   81A40000 (2175008768)\n+104AC Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10380 Local Header Offset   00009D5C (40284)\n-10384 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+104B0 Local Header Offset   00009E1B (40475)\n+104B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10384: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x104B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-103B7 CENTRAL HEADER #56    02014B50 (33639248)\n-103BB Created Zip Spec      14 (20) '2.0'\n-103BC Created OS            03 (3) 'Unix'\n-103BD Extract Zip Spec      14 (20) '2.0'\n-103BE Extract OS            00 (0) 'MS-DOS'\n-103BF General Purpose Flag  0800 (2048)\n+104E7 CENTRAL HEADER #56    02014B50 (33639248)\n+104EB Created Zip Spec      14 (20) '2.0'\n+104EC Created OS            03 (3) 'Unix'\n+104ED Extract Zip Spec      14 (20) '2.0'\n+104EE Extract OS            00 (0) 'MS-DOS'\n+104EF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-103C1 Compression Method    0008 (8) 'Deflated'\n-103C3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-103C7 CRC                   72812E46 (1921068614)\n-103CB Compressed Size       0000059C (1436)\n-103CF Uncompressed Size     000010D3 (4307)\n-103D3 Filename Length       0035 (53)\n-103D5 Extra Length          0000 (0)\n-103D7 Comment Length        0000 (0)\n-103D9 Disk Start            0000 (0)\n-103DB Int File Attributes   0000 (0)\n+104F1 Compression Method    0008 (8) 'Deflated'\n+104F3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+104F7 CRC                   5829DD8D (1479138701)\n+104FB Compressed Size       000005A6 (1446)\n+104FF Uncompressed Size     0000114E (4430)\n+10503 Filename Length       0035 (53)\n+10505 Extra Length          0000 (0)\n+10507 Comment Length        0000 (0)\n+10509 Disk Start            0000 (0)\n+1050B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-103DD Ext File Attributes   81A40000 (2175008768)\n+1050D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-103E1 Local Header Offset   0000A320 (41760)\n-103E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10511 Local Header Offset   0000A3E9 (41961)\n+10515 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x103E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10515: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1041A CENTRAL HEADER #57    02014B50 (33639248)\n-1041E Created Zip Spec      14 (20) '2.0'\n-1041F Created OS            03 (3) 'Unix'\n-10420 Extract Zip Spec      14 (20) '2.0'\n-10421 Extract OS            00 (0) 'MS-DOS'\n-10422 General Purpose Flag  0800 (2048)\n+1054A CENTRAL HEADER #57    02014B50 (33639248)\n+1054E Created Zip Spec      14 (20) '2.0'\n+1054F Created OS            03 (3) 'Unix'\n+10550 Extract Zip Spec      14 (20) '2.0'\n+10551 Extract OS            00 (0) 'MS-DOS'\n+10552 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10424 Compression Method    0008 (8) 'Deflated'\n-10426 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1042A CRC                   4C3B1439 (1278940217)\n-1042E Compressed Size       00000263 (611)\n-10432 Uncompressed Size     000004E5 (1253)\n-10436 Filename Length       002A (42)\n-10438 Extra Length          0000 (0)\n-1043A Comment Length        0000 (0)\n-1043C Disk Start            0000 (0)\n-1043E Int File Attributes   0000 (0)\n+10554 Compression Method    0008 (8) 'Deflated'\n+10556 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1055A CRC                   AF68925C (2942866012)\n+1055E Compressed Size       0000026A (618)\n+10562 Uncompressed Size     000004FE (1278)\n+10566 Filename Length       002A (42)\n+10568 Extra Length          0000 (0)\n+1056A Comment Length        0000 (0)\n+1056C Disk Start            0000 (0)\n+1056E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10440 Ext File Attributes   81A40000 (2175008768)\n+10570 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10444 Local Header Offset   0000A90F (43279)\n-10448 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10574 Local Header Offset   0000A9E2 (43490)\n+10578 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10448: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10578: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10472 CENTRAL HEADER #58    02014B50 (33639248)\n-10476 Created Zip Spec      14 (20) '2.0'\n-10477 Created OS            03 (3) 'Unix'\n-10478 Extract Zip Spec      14 (20) '2.0'\n-10479 Extract OS            00 (0) 'MS-DOS'\n-1047A General Purpose Flag  0800 (2048)\n+105A2 CENTRAL HEADER #58    02014B50 (33639248)\n+105A6 Created Zip Spec      14 (20) '2.0'\n+105A7 Created OS            03 (3) 'Unix'\n+105A8 Extract Zip Spec      14 (20) '2.0'\n+105A9 Extract OS            00 (0) 'MS-DOS'\n+105AA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1047C Compression Method    0008 (8) 'Deflated'\n-1047E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10482 CRC                   0C035F96 (201547670)\n-10486 Compressed Size       000005F9 (1529)\n-1048A Uncompressed Size     000011CA (4554)\n-1048E Filename Length       0027 (39)\n-10490 Extra Length          0000 (0)\n-10492 Comment Length        0000 (0)\n-10494 Disk Start            0000 (0)\n-10496 Int File Attributes   0000 (0)\n+105AC Compression Method    0008 (8) 'Deflated'\n+105AE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+105B2 CRC                   97DFDDD6 (2548030934)\n+105B6 Compressed Size       00000604 (1540)\n+105BA Uncompressed Size     00001266 (4710)\n+105BE Filename Length       0027 (39)\n+105C0 Extra Length          0000 (0)\n+105C2 Comment Length        0000 (0)\n+105C4 Disk Start            0000 (0)\n+105C6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10498 Ext File Attributes   81A40000 (2175008768)\n+105C8 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1049C Local Header Offset   0000ABBA (43962)\n-104A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+105CC Local Header Offset   0000AC94 (44180)\n+105D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x104A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x105D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-104C7 CENTRAL HEADER #59    02014B50 (33639248)\n-104CB Created Zip Spec      14 (20) '2.0'\n-104CC Created OS            03 (3) 'Unix'\n-104CD Extract Zip Spec      14 (20) '2.0'\n-104CE Extract OS            00 (0) 'MS-DOS'\n-104CF General Purpose Flag  0800 (2048)\n+105F7 CENTRAL HEADER #59    02014B50 (33639248)\n+105FB Created Zip Spec      14 (20) '2.0'\n+105FC Created OS            03 (3) 'Unix'\n+105FD Extract Zip Spec      14 (20) '2.0'\n+105FE Extract OS            00 (0) 'MS-DOS'\n+105FF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-104D1 Compression Method    0008 (8) 'Deflated'\n-104D3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-104D7 CRC                   5688E99A (1451813274)\n-104DB Compressed Size       000005C2 (1474)\n-104DF Uncompressed Size     00001436 (5174)\n-104E3 Filename Length       003B (59)\n-104E5 Extra Length          0000 (0)\n-104E7 Comment Length        0000 (0)\n-104E9 Disk Start            0000 (0)\n-104EB Int File Attributes   0000 (0)\n+10601 Compression Method    0008 (8) 'Deflated'\n+10603 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10607 CRC                   5688E99A (1451813274)\n+1060B Compressed Size       000005C2 (1474)\n+1060F Uncompressed Size     00001436 (5174)\n+10613 Filename Length       003B (59)\n+10615 Extra Length          0000 (0)\n+10617 Comment Length        0000 (0)\n+10619 Disk Start            0000 (0)\n+1061B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-104ED Ext File Attributes   81A40000 (2175008768)\n+1061D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-104F1 Local Header Offset   0000B1F8 (45560)\n-104F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10621 Local Header Offset   0000B2DD (45789)\n+10625 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x104F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10625: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10530 CENTRAL HEADER #60    02014B50 (33639248)\n-10534 Created Zip Spec      14 (20) '2.0'\n-10535 Created OS            03 (3) 'Unix'\n-10536 Extract Zip Spec      14 (20) '2.0'\n-10537 Extract OS            00 (0) 'MS-DOS'\n-10538 General Purpose Flag  0800 (2048)\n+10660 CENTRAL HEADER #60    02014B50 (33639248)\n+10664 Created Zip Spec      14 (20) '2.0'\n+10665 Created OS            03 (3) 'Unix'\n+10666 Extract Zip Spec      14 (20) '2.0'\n+10667 Extract OS            00 (0) 'MS-DOS'\n+10668 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1053A Compression Method    0008 (8) 'Deflated'\n-1053C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10540 CRC                   DA916F8A (3666964362)\n-10544 Compressed Size       00000376 (886)\n-10548 Uncompressed Size     000007A1 (1953)\n-1054C Filename Length       003F (63)\n-1054E Extra Length          0000 (0)\n-10550 Comment Length        0000 (0)\n-10552 Disk Start            0000 (0)\n-10554 Int File Attributes   0000 (0)\n+1066A Compression Method    0008 (8) 'Deflated'\n+1066C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10670 CRC                   DA916F8A (3666964362)\n+10674 Compressed Size       00000376 (886)\n+10678 Uncompressed Size     000007A1 (1953)\n+1067C Filename Length       003F (63)\n+1067E Extra Length          0000 (0)\n+10680 Comment Length        0000 (0)\n+10682 Disk Start            0000 (0)\n+10684 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10556 Ext File Attributes   81A40000 (2175008768)\n+10686 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1055A Local Header Offset   0000B813 (47123)\n-1055E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1068A Local Header Offset   0000B8F8 (47352)\n+1068E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1055E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1068E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-1059D CENTRAL HEADER #61    02014B50 (33639248)\n-105A1 Created Zip Spec      14 (20) '2.0'\n-105A2 Created OS            03 (3) 'Unix'\n-105A3 Extract Zip Spec      14 (20) '2.0'\n-105A4 Extract OS            00 (0) 'MS-DOS'\n-105A5 General Purpose Flag  0800 (2048)\n+106CD CENTRAL HEADER #61    02014B50 (33639248)\n+106D1 Created Zip Spec      14 (20) '2.0'\n+106D2 Created OS            03 (3) 'Unix'\n+106D3 Extract Zip Spec      14 (20) '2.0'\n+106D4 Extract OS            00 (0) 'MS-DOS'\n+106D5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-105A7 Compression Method    0008 (8) 'Deflated'\n-105A9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-105AD CRC                   1CB52B1D (481635101)\n-105B1 Compressed Size       000005C7 (1479)\n-105B5 Uncompressed Size     0000100F (4111)\n-105B9 Filename Length       003A (58)\n-105BB Extra Length          0000 (0)\n-105BD Comment Length        0000 (0)\n-105BF Disk Start            0000 (0)\n-105C1 Int File Attributes   0000 (0)\n+106D7 Compression Method    0008 (8) 'Deflated'\n+106D9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+106DD CRC                   5C0FF18B (1544548747)\n+106E1 Compressed Size       000005D2 (1490)\n+106E5 Uncompressed Size     0000107E (4222)\n+106E9 Filename Length       003A (58)\n+106EB Extra Length          0000 (0)\n+106ED Comment Length        0000 (0)\n+106EF Disk Start            0000 (0)\n+106F1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-105C3 Ext File Attributes   81A40000 (2175008768)\n+106F3 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-105C7 Local Header Offset   0000BBE6 (48102)\n-105CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+106F7 Local Header Offset   0000BCCB (48331)\n+106FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x105CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x106FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10605 CENTRAL HEADER #62    02014B50 (33639248)\n-10609 Created Zip Spec      14 (20) '2.0'\n-1060A Created OS            03 (3) 'Unix'\n-1060B Extract Zip Spec      14 (20) '2.0'\n-1060C Extract OS            00 (0) 'MS-DOS'\n-1060D General Purpose Flag  0800 (2048)\n+10735 CENTRAL HEADER #62    02014B50 (33639248)\n+10739 Created Zip Spec      14 (20) '2.0'\n+1073A Created OS            03 (3) 'Unix'\n+1073B Extract Zip Spec      14 (20) '2.0'\n+1073C Extract OS            00 (0) 'MS-DOS'\n+1073D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1060F Compression Method    0008 (8) 'Deflated'\n-10611 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10615 CRC                   B7AE5AFA (3081657082)\n-10619 Compressed Size       00000340 (832)\n-1061D Uncompressed Size     000006EA (1770)\n-10621 Filename Length       003F (63)\n-10623 Extra Length          0000 (0)\n-10625 Comment Length        0000 (0)\n-10627 Disk Start            0000 (0)\n-10629 Int File Attributes   0000 (0)\n+1073F Compression Method    0008 (8) 'Deflated'\n+10741 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10745 CRC                   F592DA8D (4120042125)\n+10749 Compressed Size       0000034A (842)\n+1074D Uncompressed Size     00000713 (1811)\n+10751 Filename Length       003F (63)\n+10753 Extra Length          0000 (0)\n+10755 Comment Length        0000 (0)\n+10757 Disk Start            0000 (0)\n+10759 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1062B Ext File Attributes   81A40000 (2175008768)\n+1075B Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1062F Local Header Offset   0000C205 (49669)\n-10633 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1075F Local Header Offset   0000C2F5 (49909)\n+10763 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10633: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10763: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10672 CENTRAL HEADER #63    02014B50 (33639248)\n-10676 Created Zip Spec      14 (20) '2.0'\n-10677 Created OS            03 (3) 'Unix'\n-10678 Extract Zip Spec      14 (20) '2.0'\n-10679 Extract OS            00 (0) 'MS-DOS'\n-1067A General Purpose Flag  0800 (2048)\n+107A2 CENTRAL HEADER #63    02014B50 (33639248)\n+107A6 Created Zip Spec      14 (20) '2.0'\n+107A7 Created OS            03 (3) 'Unix'\n+107A8 Extract Zip Spec      14 (20) '2.0'\n+107A9 Extract OS            00 (0) 'MS-DOS'\n+107AA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1067C Compression Method    0008 (8) 'Deflated'\n-1067E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10682 CRC                   D392C9E8 (3549612520)\n-10686 Compressed Size       00000468 (1128)\n-1068A Uncompressed Size     00000C81 (3201)\n-1068E Filename Length       003D (61)\n-10690 Extra Length          0000 (0)\n-10692 Comment Length        0000 (0)\n-10694 Disk Start            0000 (0)\n-10696 Int File Attributes   0000 (0)\n+107AC Compression Method    0008 (8) 'Deflated'\n+107AE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+107B2 CRC                   D705EF34 (3607490356)\n+107B6 Compressed Size       00000476 (1142)\n+107BA Uncompressed Size     00000CCA (3274)\n+107BE Filename Length       003D (61)\n+107C0 Extra Length          0000 (0)\n+107C2 Comment Length        0000 (0)\n+107C4 Disk Start            0000 (0)\n+107C6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10698 Ext File Attributes   81A40000 (2175008768)\n+107C8 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1069C Local Header Offset   0000C5A2 (50594)\n-106A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+107CC Local Header Offset   0000C69C (50844)\n+107D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x106A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x107D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-106DD CENTRAL HEADER #64    02014B50 (33639248)\n-106E1 Created Zip Spec      14 (20) '2.0'\n-106E2 Created OS            03 (3) 'Unix'\n-106E3 Extract Zip Spec      14 (20) '2.0'\n-106E4 Extract OS            00 (0) 'MS-DOS'\n-106E5 General Purpose Flag  0800 (2048)\n+1080D CENTRAL HEADER #64    02014B50 (33639248)\n+10811 Created Zip Spec      14 (20) '2.0'\n+10812 Created OS            03 (3) 'Unix'\n+10813 Extract Zip Spec      14 (20) '2.0'\n+10814 Extract OS            00 (0) 'MS-DOS'\n+10815 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-106E7 Compression Method    0008 (8) 'Deflated'\n-106E9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-106ED CRC                   2AA01116 (715133206)\n-106F1 Compressed Size       0000021D (541)\n-106F5 Uncompressed Size     000003D7 (983)\n-106F9 Filename Length       002B (43)\n-106FB Extra Length          0000 (0)\n-106FD Comment Length        0000 (0)\n-106FF Disk Start            0000 (0)\n-10701 Int File Attributes   0000 (0)\n+10817 Compression Method    0008 (8) 'Deflated'\n+10819 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1081D CRC                   2AA01116 (715133206)\n+10821 Compressed Size       0000021D (541)\n+10825 Uncompressed Size     000003D7 (983)\n+10829 Filename Length       002B (43)\n+1082B Extra Length          0000 (0)\n+1082D Comment Length        0000 (0)\n+1082F Disk Start            0000 (0)\n+10831 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10703 Ext File Attributes   81A40000 (2175008768)\n+10833 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10707 Local Header Offset   0000CA65 (51813)\n-1070B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10837 Local Header Offset   0000CB6D (52077)\n+1083B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1070B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1083B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10736 CENTRAL HEADER #65    02014B50 (33639248)\n-1073A Created Zip Spec      14 (20) '2.0'\n-1073B Created OS            03 (3) 'Unix'\n-1073C Extract Zip Spec      14 (20) '2.0'\n-1073D Extract OS            00 (0) 'MS-DOS'\n-1073E General Purpose Flag  0800 (2048)\n+10866 CENTRAL HEADER #65    02014B50 (33639248)\n+1086A Created Zip Spec      14 (20) '2.0'\n+1086B Created OS            03 (3) 'Unix'\n+1086C Extract Zip Spec      14 (20) '2.0'\n+1086D Extract OS            00 (0) 'MS-DOS'\n+1086E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10740 Compression Method    0008 (8) 'Deflated'\n-10742 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10746 CRC                   70DD7BE1 (1893563361)\n-1074A Compressed Size       000003F2 (1010)\n-1074E Uncompressed Size     00000AAE (2734)\n-10752 Filename Length       0024 (36)\n-10754 Extra Length          0000 (0)\n-10756 Comment Length        0000 (0)\n-10758 Disk Start            0000 (0)\n-1075A Int File Attributes   0000 (0)\n+10870 Compression Method    0008 (8) 'Deflated'\n+10872 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10876 CRC                   70DD7BE1 (1893563361)\n+1087A Compressed Size       000003F2 (1010)\n+1087E Uncompressed Size     00000AAE (2734)\n+10882 Filename Length       0024 (36)\n+10884 Extra Length          0000 (0)\n+10886 Comment Length        0000 (0)\n+10888 Disk Start            0000 (0)\n+1088A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1075C Ext File Attributes   81A40000 (2175008768)\n+1088C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10760 Local Header Offset   0000CCCB (52427)\n-10764 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10890 Local Header Offset   0000CDD3 (52691)\n+10894 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10764: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10894: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10788 CENTRAL HEADER #66    02014B50 (33639248)\n-1078C Created Zip Spec      14 (20) '2.0'\n-1078D Created OS            03 (3) 'Unix'\n-1078E Extract Zip Spec      14 (20) '2.0'\n-1078F Extract OS            00 (0) 'MS-DOS'\n-10790 General Purpose Flag  0800 (2048)\n+108B8 CENTRAL HEADER #66    02014B50 (33639248)\n+108BC Created Zip Spec      14 (20) '2.0'\n+108BD Created OS            03 (3) 'Unix'\n+108BE Extract Zip Spec      14 (20) '2.0'\n+108BF Extract OS            00 (0) 'MS-DOS'\n+108C0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10792 Compression Method    0008 (8) 'Deflated'\n-10794 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10798 CRC                   725BA0A7 (1918607527)\n-1079C Compressed Size       000003A6 (934)\n-107A0 Uncompressed Size     000008DD (2269)\n-107A4 Filename Length       0028 (40)\n-107A6 Extra Length          0000 (0)\n-107A8 Comment Length        0000 (0)\n-107AA Disk Start            0000 (0)\n-107AC Int File Attributes   0000 (0)\n+108C2 Compression Method    0008 (8) 'Deflated'\n+108C4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+108C8 CRC                   725BA0A7 (1918607527)\n+108CC Compressed Size       000003A6 (934)\n+108D0 Uncompressed Size     000008DD (2269)\n+108D4 Filename Length       0028 (40)\n+108D6 Extra Length          0000 (0)\n+108D8 Comment Length        0000 (0)\n+108DA Disk Start            0000 (0)\n+108DC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-107AE Ext File Attributes   81A40000 (2175008768)\n+108DE Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-107B2 Local Header Offset   0000D0FF (53503)\n-107B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+108E2 Local Header Offset   0000D207 (53767)\n+108E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x107B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x108E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-107DE CENTRAL HEADER #67    02014B50 (33639248)\n-107E2 Created Zip Spec      14 (20) '2.0'\n-107E3 Created OS            03 (3) 'Unix'\n-107E4 Extract Zip Spec      14 (20) '2.0'\n-107E5 Extract OS            00 (0) 'MS-DOS'\n-107E6 General Purpose Flag  0800 (2048)\n+1090E CENTRAL HEADER #67    02014B50 (33639248)\n+10912 Created Zip Spec      14 (20) '2.0'\n+10913 Created OS            03 (3) 'Unix'\n+10914 Extract Zip Spec      14 (20) '2.0'\n+10915 Extract OS            00 (0) 'MS-DOS'\n+10916 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-107E8 Compression Method    0008 (8) 'Deflated'\n-107EA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-107EE CRC                   353D3BE5 (893205477)\n-107F2 Compressed Size       00000D61 (3425)\n-107F6 Uncompressed Size     00003D01 (15617)\n-107FA Filename Length       0027 (39)\n-107FC Extra Length          0000 (0)\n-107FE Comment Length        0000 (0)\n-10800 Disk Start            0000 (0)\n-10802 Int File Attributes   0000 (0)\n+10918 Compression Method    0008 (8) 'Deflated'\n+1091A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1091E CRC                   7076ABE9 (1886825449)\n+10922 Compressed Size       00000D79 (3449)\n+10926 Uncompressed Size     00003F37 (16183)\n+1092A Filename Length       0027 (39)\n+1092C Extra Length          0000 (0)\n+1092E Comment Length        0000 (0)\n+10930 Disk Start            0000 (0)\n+10932 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10804 Ext File Attributes   81A40000 (2175008768)\n+10934 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10808 Local Header Offset   0000D4EB (54507)\n-1080C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10938 Local Header Offset   0000D5F3 (54771)\n+1093C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1080C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1093C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10833 CENTRAL HEADER #68    02014B50 (33639248)\n-10837 Created Zip Spec      14 (20) '2.0'\n-10838 Created OS            03 (3) 'Unix'\n-10839 Extract Zip Spec      14 (20) '2.0'\n-1083A Extract OS            00 (0) 'MS-DOS'\n-1083B General Purpose Flag  0800 (2048)\n+10963 CENTRAL HEADER #68    02014B50 (33639248)\n+10967 Created Zip Spec      14 (20) '2.0'\n+10968 Created OS            03 (3) 'Unix'\n+10969 Extract Zip Spec      14 (20) '2.0'\n+1096A Extract OS            00 (0) 'MS-DOS'\n+1096B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1083D Compression Method    0008 (8) 'Deflated'\n-1083F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10843 CRC                   1DFA3CFF (502938879)\n-10847 Compressed Size       000007F3 (2035)\n-1084B Uncompressed Size     00001CCE (7374)\n-1084F Filename Length       0026 (38)\n-10851 Extra Length          0000 (0)\n-10853 Comment Length        0000 (0)\n-10855 Disk Start            0000 (0)\n-10857 Int File Attributes   0000 (0)\n+1096D Compression Method    0008 (8) 'Deflated'\n+1096F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10973 CRC                   E7722336 (3883017014)\n+10977 Compressed Size       00000803 (2051)\n+1097B Uncompressed Size     00001DD8 (7640)\n+1097F Filename Length       0026 (38)\n+10981 Extra Length          0000 (0)\n+10983 Comment Length        0000 (0)\n+10985 Disk Start            0000 (0)\n+10987 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10859 Ext File Attributes   81A40000 (2175008768)\n+10989 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1085D Local Header Offset   0000E291 (58001)\n-10861 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1098D Local Header Offset   0000E3B1 (58289)\n+10991 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10861: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10991: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10887 CENTRAL HEADER #69    02014B50 (33639248)\n-1088B Created Zip Spec      14 (20) '2.0'\n-1088C Created OS            03 (3) 'Unix'\n-1088D Extract Zip Spec      14 (20) '2.0'\n-1088E Extract OS            00 (0) 'MS-DOS'\n-1088F General Purpose Flag  0800 (2048)\n+109B7 CENTRAL HEADER #69    02014B50 (33639248)\n+109BB Created Zip Spec      14 (20) '2.0'\n+109BC Created OS            03 (3) 'Unix'\n+109BD Extract Zip Spec      14 (20) '2.0'\n+109BE Extract OS            00 (0) 'MS-DOS'\n+109BF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10891 Compression Method    0008 (8) 'Deflated'\n-10893 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10897 CRC                   FCA06F71 (4238372721)\n-1089B Compressed Size       0000007A (122)\n-1089F Uncompressed Size     00000185 (389)\n-108A3 Filename Length       0040 (64)\n-108A5 Extra Length          0000 (0)\n-108A7 Comment Length        0000 (0)\n-108A9 Disk Start            0000 (0)\n-108AB Int File Attributes   0000 (0)\n+109C1 Compression Method    0008 (8) 'Deflated'\n+109C3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+109C7 CRC                   A18B762D (2710271533)\n+109CB Compressed Size       00000080 (128)\n+109CF Uncompressed Size     0000018D (397)\n+109D3 Filename Length       0040 (64)\n+109D5 Extra Length          0000 (0)\n+109D7 Comment Length        0000 (0)\n+109D9 Disk Start            0000 (0)\n+109DB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-108AD Ext File Attributes   81A40000 (2175008768)\n+109DD Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-108B1 Local Header Offset   0000EAC8 (60104)\n-108B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+109E1 Local Header Offset   0000EBF8 (60408)\n+109E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x108B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x109E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-108F5 CENTRAL HEADER #70    02014B50 (33639248)\n-108F9 Created Zip Spec      14 (20) '2.0'\n-108FA Created OS            03 (3) 'Unix'\n-108FB Extract Zip Spec      14 (20) '2.0'\n-108FC Extract OS            00 (0) 'MS-DOS'\n-108FD General Purpose Flag  0800 (2048)\n+10A25 CENTRAL HEADER #70    02014B50 (33639248)\n+10A29 Created Zip Spec      14 (20) '2.0'\n+10A2A Created OS            03 (3) 'Unix'\n+10A2B Extract Zip Spec      14 (20) '2.0'\n+10A2C Extract OS            00 (0) 'MS-DOS'\n+10A2D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-108FF Compression Method    0008 (8) 'Deflated'\n-10901 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10905 CRC                   16B87389 (381186953)\n-10909 Compressed Size       00000084 (132)\n-1090D Uncompressed Size     000001DC (476)\n-10911 Filename Length       0046 (70)\n-10913 Extra Length          0000 (0)\n-10915 Comment Length        0000 (0)\n-10917 Disk Start            0000 (0)\n-10919 Int File Attributes   0000 (0)\n+10A2F Compression Method    0008 (8) 'Deflated'\n+10A31 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10A35 CRC                   60DE3136 (1625174326)\n+10A39 Compressed Size       00000085 (133)\n+10A3D Uncompressed Size     000001E4 (484)\n+10A41 Filename Length       0046 (70)\n+10A43 Extra Length          0000 (0)\n+10A45 Comment Length        0000 (0)\n+10A47 Disk Start            0000 (0)\n+10A49 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1091B Ext File Attributes   81A40000 (2175008768)\n+10A4B Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-1091F Local Header Offset   0000EBA0 (60320)\n-10923 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10A4F Local Header Offset   0000ECD6 (60630)\n+10A53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10923: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10A53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10969 CENTRAL HEADER #71    02014B50 (33639248)\n-1096D Created Zip Spec      14 (20) '2.0'\n-1096E Created OS            03 (3) 'Unix'\n-1096F Extract Zip Spec      14 (20) '2.0'\n-10970 Extract OS            00 (0) 'MS-DOS'\n-10971 General Purpose Flag  0800 (2048)\n+10A99 CENTRAL HEADER #71    02014B50 (33639248)\n+10A9D Created Zip Spec      14 (20) '2.0'\n+10A9E Created OS            03 (3) 'Unix'\n+10A9F Extract Zip Spec      14 (20) '2.0'\n+10AA0 Extract OS            00 (0) 'MS-DOS'\n+10AA1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10973 Compression Method    0008 (8) 'Deflated'\n-10975 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10979 CRC                   66A9E2AF (1722409647)\n-1097D Compressed Size       00000030 (48)\n-10981 Uncompressed Size     00000034 (52)\n-10985 Filename Length       0035 (53)\n-10987 Extra Length          0000 (0)\n-10989 Comment Length        0000 (0)\n-1098B Disk Start            0000 (0)\n-1098D Int File Attributes   0000 (0)\n+10AA3 Compression Method    0008 (8) 'Deflated'\n+10AA5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10AA9 CRC                   66A9E2AF (1722409647)\n+10AAD Compressed Size       00000030 (48)\n+10AB1 Uncompressed Size     00000034 (52)\n+10AB5 Filename Length       0035 (53)\n+10AB7 Extra Length          0000 (0)\n+10AB9 Comment Length        0000 (0)\n+10ABB Disk Start            0000 (0)\n+10ABD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-1098F Ext File Attributes   81A40000 (2175008768)\n+10ABF Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10993 Local Header Offset   0000EC88 (60552)\n-10997 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10AC3 Local Header Offset   0000EDBF (60863)\n+10AC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10997: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10AC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-109CC CENTRAL HEADER #72    02014B50 (33639248)\n-109D0 Created Zip Spec      14 (20) '2.0'\n-109D1 Created OS            03 (3) 'Unix'\n-109D2 Extract Zip Spec      14 (20) '2.0'\n-109D3 Extract OS            00 (0) 'MS-DOS'\n-109D4 General Purpose Flag  0800 (2048)\n+10AFC CENTRAL HEADER #72    02014B50 (33639248)\n+10B00 Created Zip Spec      14 (20) '2.0'\n+10B01 Created OS            03 (3) 'Unix'\n+10B02 Extract Zip Spec      14 (20) '2.0'\n+10B03 Extract OS            00 (0) 'MS-DOS'\n+10B04 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-109D6 Compression Method    0008 (8) 'Deflated'\n-109D8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-109DC CRC                   17F3C42C (401851436)\n-109E0 Compressed Size       0000039E (926)\n-109E4 Uncompressed Size     00000B8A (2954)\n-109E8 Filename Length       0031 (49)\n-109EA Extra Length          0000 (0)\n-109EC Comment Length        0000 (0)\n-109EE Disk Start            0000 (0)\n-109F0 Int File Attributes   0000 (0)\n+10B06 Compression Method    0008 (8) 'Deflated'\n+10B08 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10B0C CRC                   CC527EDE (3427958494)\n+10B10 Compressed Size       00000397 (919)\n+10B14 Uncompressed Size     00000B3D (2877)\n+10B18 Filename Length       0031 (49)\n+10B1A Extra Length          0000 (0)\n+10B1C Comment Length        0000 (0)\n+10B1E Disk Start            0000 (0)\n+10B20 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-109F2 Ext File Attributes   81A40000 (2175008768)\n+10B22 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-109F6 Local Header Offset   0000ED0B (60683)\n-109FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10B26 Local Header Offset   0000EE42 (60994)\n+10B2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x109FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10B2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10A2B CENTRAL HEADER #73    02014B50 (33639248)\n-10A2F Created Zip Spec      14 (20) '2.0'\n-10A30 Created OS            03 (3) 'Unix'\n-10A31 Extract Zip Spec      14 (20) '2.0'\n-10A32 Extract OS            00 (0) 'MS-DOS'\n-10A33 General Purpose Flag  0800 (2048)\n+10B5B CENTRAL HEADER #73    02014B50 (33639248)\n+10B5F Created Zip Spec      14 (20) '2.0'\n+10B60 Created OS            03 (3) 'Unix'\n+10B61 Extract Zip Spec      14 (20) '2.0'\n+10B62 Extract OS            00 (0) 'MS-DOS'\n+10B63 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10A35 Compression Method    0008 (8) 'Deflated'\n-10A37 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-10A3B CRC                   9B978690 (2610398864)\n-10A3F Compressed Size       0000003D (61)\n-10A43 Uncompressed Size     00000040 (64)\n-10A47 Filename Length       0038 (56)\n-10A49 Extra Length          0000 (0)\n-10A4B Comment Length        0000 (0)\n-10A4D Disk Start            0000 (0)\n-10A4F Int File Attributes   0000 (0)\n+10B65 Compression Method    0008 (8) 'Deflated'\n+10B67 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+10B6B CRC                   9B978690 (2610398864)\n+10B6F Compressed Size       0000003D (61)\n+10B73 Uncompressed Size     00000040 (64)\n+10B77 Filename Length       0038 (56)\n+10B79 Extra Length          0000 (0)\n+10B7B Comment Length        0000 (0)\n+10B7D Disk Start            0000 (0)\n+10B7F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-10A51 Ext File Attributes   81A40000 (2175008768)\n+10B81 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-10A55 Local Header Offset   0000F0F8 (61688)\n-10A59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+10B85 Local Header Offset   0000F228 (61992)\n+10B89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x10A59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10B89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-10A91 END CENTRAL HEADER    06054B50 (101010256)\n-10A95 Number of this disk   0000 (0)\n-10A97 Central Dir Disk no   0000 (0)\n-10A99 Entries in this disk  0049 (73)\n-10A9B Total Entries         0049 (73)\n-10A9D Size of Central Dir   00001906 (6406)\n-10AA1 Offset to Central Dir 0000F18B (61835)\n-10AA5 Comment Length        0000 (0)\n+10BC1 END CENTRAL HEADER    06054B50 (101010256)\n+10BC5 Number of this disk   0000 (0)\n+10BC7 Central Dir Disk no   0000 (0)\n+10BC9 Entries in this disk  0049 (73)\n+10BCB Total Entries         0049 (73)\n+10BCD Size of Central Dir   00001906 (6406)\n+10BD1 Offset to Central Dir 0000F2BB (62139)\n+10BD5 Comment Length        0000 (0)\n #\n # Error Count: 21\n # Warning Count: 167\n #\n # Done\n"}, {"source1": "org/apache/dubbo/qos/command/impl/Ls.java", "source2": "org/apache/dubbo/qos/command/impl/Ls.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,88 +1,88 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.command.impl;\n-\n-import org.apache.dubbo.qos.command.BaseCommand;\n-import org.apache.dubbo.qos.command.CommandContext;\n-import org.apache.dubbo.qos.command.annotation.Cmd;\n-import org.apache.dubbo.qos.command.util.ServiceCheckUtils;\n-import org.apache.dubbo.qos.textui.TTable;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.ConsumerModel;\n-import org.apache.dubbo.rpc.model.ProviderModel;\n-\n-import java.util.Collection;\n-\n-@Cmd(name = \"ls\", summary = \"ls service\", example = {\n-        \"ls\"\n-})\n-public class Ls implements BaseCommand {\n-    @Override\n-    public String execute(CommandContext commandContext, String[] args) {\n-        StringBuilder result = new StringBuilder();\n-        result.append(listProvider());\n-        result.append(listConsumer());\n-\n-        return result.toString();\n-    }\n-\n-    public String listProvider() {\n-        StringBuilder stringBuilder = new StringBuilder();\n-        stringBuilder.append(\"As Provider side:\" + System.lineSeparator());\n-        Collection<ProviderModel> providerModelList = ApplicationModel.allProviderModels();\n-\n-        TTable tTable = new TTable(new TTable.ColumnDefine[]{\n-                new TTable.ColumnDefine(TTable.Align.MIDDLE),\n-                new TTable.ColumnDefine(TTable.Align.MIDDLE)\n-        });\n-\n-        //Header\n-        tTable.addRow(\"Provider Service Name\", \"PUB\");\n-\n-        //Content\n-        for (ProviderModel providerModel : providerModelList) {\n-            tTable.addRow(providerModel.getServiceKey(), ServiceCheckUtils.isRegistered(providerModel) ? \"Y\" : \"N\");\n-        }\n-        stringBuilder.append(tTable.rendering());\n-\n-        return stringBuilder.toString();\n-    }\n-\n-    public String listConsumer() {\n-        StringBuilder stringBuilder = new StringBuilder();\n-        stringBuilder.append(\"As Consumer side:\" + System.lineSeparator());\n-        Collection<ConsumerModel> consumerModelList = ApplicationModel.allConsumerModels();\n-\n-        TTable tTable = new TTable(new TTable.ColumnDefine[]{\n-                new TTable.ColumnDefine(TTable.Align.MIDDLE),\n-                new TTable.ColumnDefine(TTable.Align.MIDDLE)\n-        });\n-\n-        //Header\n-        tTable.addRow(\"Consumer Service Name\", \"NUM\");\n-\n-        //Content\n-        //TODO to calculate consumerAddressNum\n-        for (ConsumerModel consumerModel : consumerModelList) {\n-            tTable.addRow(consumerModel.getServiceKey(), ServiceCheckUtils.getConsumerAddressNum(consumerModel));\n-        }\n-\n-        stringBuilder.append(tTable.rendering());\n-\n-        return stringBuilder.toString();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.command.impl;\r\n+\r\n+import org.apache.dubbo.qos.command.BaseCommand;\r\n+import org.apache.dubbo.qos.command.CommandContext;\r\n+import org.apache.dubbo.qos.command.annotation.Cmd;\r\n+import org.apache.dubbo.qos.command.util.ServiceCheckUtils;\r\n+import org.apache.dubbo.qos.textui.TTable;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.ConsumerModel;\r\n+import org.apache.dubbo.rpc.model.ProviderModel;\r\n+\r\n+import java.util.Collection;\r\n+\r\n+@Cmd(name = \"ls\", summary = \"ls service\", example = {\r\n+        \"ls\"\r\n+})\r\n+public class Ls implements BaseCommand {\r\n+    @Override\r\n+    public String execute(CommandContext commandContext, String[] args) {\r\n+        StringBuilder result = new StringBuilder();\r\n+        result.append(listProvider());\r\n+        result.append(listConsumer());\r\n+\r\n+        return result.toString();\r\n+    }\r\n+\r\n+    public String listProvider() {\r\n+        StringBuilder stringBuilder = new StringBuilder();\r\n+        stringBuilder.append(\"As Provider side:\" + System.lineSeparator());\r\n+        Collection<ProviderModel> providerModelList = ApplicationModel.allProviderModels();\r\n+\r\n+        TTable tTable = new TTable(new TTable.ColumnDefine[]{\r\n+                new TTable.ColumnDefine(TTable.Align.MIDDLE),\r\n+                new TTable.ColumnDefine(TTable.Align.MIDDLE)\r\n+        });\r\n+\r\n+        //Header\r\n+        tTable.addRow(\"Provider Service Name\", \"PUB\");\r\n+\r\n+        //Content\r\n+        for (ProviderModel providerModel : providerModelList) {\r\n+            tTable.addRow(providerModel.getServiceKey(), ServiceCheckUtils.isRegistered(providerModel) ? \"Y\" : \"N\");\r\n+        }\r\n+        stringBuilder.append(tTable.rendering());\r\n+\r\n+        return stringBuilder.toString();\r\n+    }\r\n+\r\n+    public String listConsumer() {\r\n+        StringBuilder stringBuilder = new StringBuilder();\r\n+        stringBuilder.append(\"As Consumer side:\" + System.lineSeparator());\r\n+        Collection<ConsumerModel> consumerModelList = ApplicationModel.allConsumerModels();\r\n+\r\n+        TTable tTable = new TTable(new TTable.ColumnDefine[]{\r\n+                new TTable.ColumnDefine(TTable.Align.MIDDLE),\r\n+                new TTable.ColumnDefine(TTable.Align.MIDDLE)\r\n+        });\r\n+\r\n+        //Header\r\n+        tTable.addRow(\"Consumer Service Name\", \"NUM\");\r\n+\r\n+        //Content\r\n+        //TODO to calculate consumerAddressNum\r\n+        for (ConsumerModel consumerModel : consumerModelList) {\r\n+            tTable.addRow(consumerModel.getServiceKey(), ServiceCheckUtils.getConsumerAddressNum(consumerModel));\r\n+        }\r\n+\r\n+        stringBuilder.append(tTable.rendering());\r\n+\r\n+        return stringBuilder.toString();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/command/impl/Offline.java", "source2": "org/apache/dubbo/qos/command/impl/Offline.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,80 +1,80 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.command.impl;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.qos.command.BaseCommand;\n-import org.apache.dubbo.qos.command.CommandContext;\n-import org.apache.dubbo.qos.command.annotation.Cmd;\n-import org.apache.dubbo.registry.Registry;\n-import org.apache.dubbo.registry.RegistryFactory;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.ProviderModel;\n-import org.apache.dubbo.rpc.model.ServiceRepository;\n-\n-import java.util.Collection;\n-import java.util.List;\n-\n-@Cmd(name = \"offline\", summary = \"offline dubbo\", example = {\n-        \"offline dubbo\",\n-        \"offline xx.xx.xxx.service\"\n-})\n-public class Offline implements BaseCommand {\n-    private Logger logger = LoggerFactory.getLogger(Offline.class);\n-    private static RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();\n-    private static ServiceRepository serviceRepository = ApplicationModel.getServiceRepository();\n-\n-    @Override\n-    public String execute(CommandContext commandContext, String[] args) {\n-        logger.info(\"receive offline command\");\n-        String servicePattern = \".*\";\n-        if (args != null && args.length > 0) {\n-            servicePattern = args[0];\n-        }\n-\n-        boolean hasService = offline(servicePattern);\n-\n-        if (hasService) {\n-            return \"OK\";\n-        } else {\n-            return \"service not found\";\n-        }\n-    }\n-\n-    public static boolean offline(String servicePattern) {\n-        boolean hasService = false;\n-\n-        Collection<ProviderModel> providerModelList = serviceRepository.getExportedServices();\n-        for (ProviderModel providerModel : providerModelList) {\n-            if (providerModel.getServiceMetadata().getDisplayServiceKey().matches(servicePattern)) {\n-                hasService = true;\n-                List<ProviderModel.RegisterStatedURL> statedUrls = providerModel.getStatedUrl();\n-                for (ProviderModel.RegisterStatedURL statedURL : statedUrls) {\n-                    if (statedURL.isRegistered()) {\n-                        Registry registry = registryFactory.getRegistry(statedURL.getRegistryUrl());\n-                        registry.unregister(statedURL.getProviderUrl());\n-                        statedURL.setRegistered(false);\n-                    }\n-                }\n-            }\n-        }\n-\n-        return hasService;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.command.impl;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.qos.command.BaseCommand;\r\n+import org.apache.dubbo.qos.command.CommandContext;\r\n+import org.apache.dubbo.qos.command.annotation.Cmd;\r\n+import org.apache.dubbo.registry.Registry;\r\n+import org.apache.dubbo.registry.RegistryFactory;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.ProviderModel;\r\n+import org.apache.dubbo.rpc.model.ServiceRepository;\r\n+\r\n+import java.util.Collection;\r\n+import java.util.List;\r\n+\r\n+@Cmd(name = \"offline\", summary = \"offline dubbo\", example = {\r\n+        \"offline dubbo\",\r\n+        \"offline xx.xx.xxx.service\"\r\n+})\r\n+public class Offline implements BaseCommand {\r\n+    private Logger logger = LoggerFactory.getLogger(Offline.class);\r\n+    private static RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();\r\n+    private static ServiceRepository serviceRepository = ApplicationModel.getServiceRepository();\r\n+\r\n+    @Override\r\n+    public String execute(CommandContext commandContext, String[] args) {\r\n+        logger.info(\"receive offline command\");\r\n+        String servicePattern = \".*\";\r\n+        if (args != null && args.length > 0) {\r\n+            servicePattern = args[0];\r\n+        }\r\n+\r\n+        boolean hasService = offline(servicePattern);\r\n+\r\n+        if (hasService) {\r\n+            return \"OK\";\r\n+        } else {\r\n+            return \"service not found\";\r\n+        }\r\n+    }\r\n+\r\n+    public static boolean offline(String servicePattern) {\r\n+        boolean hasService = false;\r\n+\r\n+        Collection<ProviderModel> providerModelList = serviceRepository.getExportedServices();\r\n+        for (ProviderModel providerModel : providerModelList) {\r\n+            if (providerModel.getServiceMetadata().getDisplayServiceKey().matches(servicePattern)) {\r\n+                hasService = true;\r\n+                List<ProviderModel.RegisterStatedURL> statedUrls = providerModel.getStatedUrl();\r\n+                for (ProviderModel.RegisterStatedURL statedURL : statedUrls) {\r\n+                    if (statedURL.isRegistered()) {\r\n+                        Registry registry = registryFactory.getRegistry(statedURL.getRegistryUrl());\r\n+                        registry.unregister(statedURL.getProviderUrl());\r\n+                        statedURL.setRegistered(false);\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return hasService;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/command/impl/Online.java", "source2": "org/apache/dubbo/qos/command/impl/Online.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,80 +1,80 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.command.impl;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.ArrayUtils;\n-import org.apache.dubbo.qos.command.BaseCommand;\n-import org.apache.dubbo.qos.command.CommandContext;\n-import org.apache.dubbo.qos.command.annotation.Cmd;\n-import org.apache.dubbo.registry.Registry;\n-import org.apache.dubbo.registry.RegistryFactory;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.ProviderModel;\n-import org.apache.dubbo.rpc.model.ServiceRepository;\n-\n-import java.util.Collection;\n-import java.util.List;\n-\n-@Cmd(name = \"online\", summary = \"online dubbo\", example = {\n-        \"online dubbo\",\n-        \"online xx.xx.xxx.service\"\n-})\n-public class Online implements BaseCommand {\n-    private static final Logger logger = LoggerFactory.getLogger(Online.class);\n-    private static RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();\n-    private static ServiceRepository serviceRepository = ApplicationModel.getServiceRepository();\n-\n-    @Override\n-    public String execute(CommandContext commandContext, String[] args) {\n-        logger.info(\"receive online command\");\n-        String servicePattern = \".*\";\n-        if (ArrayUtils.isNotEmpty(args)) {\n-            servicePattern = \"\" + args[0];\n-        }\n-\n-        boolean hasService = online(servicePattern);\n-        if (hasService) {\n-            return \"OK\";\n-        } else {\n-            return \"service not found\";\n-        }\n-    }\n-\n-    public static boolean online(String servicePattern) {\n-        boolean hasService = false;\n-\n-        Collection<ProviderModel> providerModelList = serviceRepository.getExportedServices();\n-        for (ProviderModel providerModel : providerModelList) {\n-            if (providerModel.getServiceMetadata().getDisplayServiceKey().matches(servicePattern)) {\n-                hasService = true;\n-                List<ProviderModel.RegisterStatedURL> statedUrls = providerModel.getStatedUrl();\n-                for (ProviderModel.RegisterStatedURL statedURL : statedUrls) {\n-                    if (!statedURL.isRegistered()) {\n-                        Registry registry = registryFactory.getRegistry(statedURL.getRegistryUrl());\n-                        registry.register(statedURL.getProviderUrl());\n-                        statedURL.setRegistered(true);\n-                    }\n-                }\n-            }\n-        }\n-\n-        return hasService;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.command.impl;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.ArrayUtils;\r\n+import org.apache.dubbo.qos.command.BaseCommand;\r\n+import org.apache.dubbo.qos.command.CommandContext;\r\n+import org.apache.dubbo.qos.command.annotation.Cmd;\r\n+import org.apache.dubbo.registry.Registry;\r\n+import org.apache.dubbo.registry.RegistryFactory;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.ProviderModel;\r\n+import org.apache.dubbo.rpc.model.ServiceRepository;\r\n+\r\n+import java.util.Collection;\r\n+import java.util.List;\r\n+\r\n+@Cmd(name = \"online\", summary = \"online dubbo\", example = {\r\n+        \"online dubbo\",\r\n+        \"online xx.xx.xxx.service\"\r\n+})\r\n+public class Online implements BaseCommand {\r\n+    private static final Logger logger = LoggerFactory.getLogger(Online.class);\r\n+    private static RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();\r\n+    private static ServiceRepository serviceRepository = ApplicationModel.getServiceRepository();\r\n+\r\n+    @Override\r\n+    public String execute(CommandContext commandContext, String[] args) {\r\n+        logger.info(\"receive online command\");\r\n+        String servicePattern = \".*\";\r\n+        if (ArrayUtils.isNotEmpty(args)) {\r\n+            servicePattern = \"\" + args[0];\r\n+        }\r\n+\r\n+        boolean hasService = online(servicePattern);\r\n+        if (hasService) {\r\n+            return \"OK\";\r\n+        } else {\r\n+            return \"service not found\";\r\n+        }\r\n+    }\r\n+\r\n+    public static boolean online(String servicePattern) {\r\n+        boolean hasService = false;\r\n+\r\n+        Collection<ProviderModel> providerModelList = serviceRepository.getExportedServices();\r\n+        for (ProviderModel providerModel : providerModelList) {\r\n+            if (providerModel.getServiceMetadata().getDisplayServiceKey().matches(servicePattern)) {\r\n+                hasService = true;\r\n+                List<ProviderModel.RegisterStatedURL> statedUrls = providerModel.getStatedUrl();\r\n+                for (ProviderModel.RegisterStatedURL statedURL : statedUrls) {\r\n+                    if (!statedURL.isRegistered()) {\r\n+                        Registry registry = registryFactory.getRegistry(statedURL.getRegistryUrl());\r\n+                        registry.register(statedURL.getProviderUrl());\r\n+                        statedURL.setRegistered(true);\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return hasService;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/command/impl/PublishMetadata.java", "source2": "org/apache/dubbo/qos/command/impl/PublishMetadata.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,63 +1,63 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.command.impl;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;\n-import org.apache.dubbo.common.utils.ArrayUtils;\n-import org.apache.dubbo.qos.command.BaseCommand;\n-import org.apache.dubbo.qos.command.CommandContext;\n-import org.apache.dubbo.qos.command.annotation.Cmd;\n-import org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils;\n-\n-import java.util.concurrent.ScheduledFuture;\n-import java.util.concurrent.TimeUnit;\n-\n-@Cmd(name = \"publishMetadata\", summary = \"update service metadata and service instance\", example = {\n-        \"publishMetadata\",\n-        \"publishMetadata 5\"\n-})\n-public class PublishMetadata implements BaseCommand {\n-    private static final Logger logger = LoggerFactory.getLogger(PublishMetadata.class);\n-    private final ExecutorRepository executorRepository = ExtensionLoader.getExtensionLoader(ExecutorRepository.class).getDefaultExtension();\n-    private ScheduledFuture future;\n-\n-    @Override\n-    public String execute(CommandContext commandContext, String[] args) {\n-        logger.info(\"received publishMetadata command.\");\n-\n-        if (ArrayUtils.isEmpty(args)) {\n-            ServiceInstanceMetadataUtils.refreshMetadataAndInstance();\n-            return \"publish metadata succeeded.\";\n-        }\n-\n-        try {\n-            int delay = Integer.parseInt(args[0]);\n-            if (future == null || future.isDone() || future.isCancelled()) {\n-                future = executorRepository.nextScheduledExecutor()\n-                        .scheduleWithFixedDelay(ServiceInstanceMetadataUtils::refreshMetadataAndInstance, 0, delay, TimeUnit.MILLISECONDS);\n-            }\n-        } catch (NumberFormatException e) {\n-            logger.error(\"Wrong delay param\", e);\n-            return \"publishMetadata failed! Wrong delay param!\";\n-        }\n-        return \"publish task submitted, will publish in \" + args[0] + \" seconds.\";\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.command.impl;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.threadpool.manager.ExecutorRepository;\r\n+import org.apache.dubbo.common.utils.ArrayUtils;\r\n+import org.apache.dubbo.qos.command.BaseCommand;\r\n+import org.apache.dubbo.qos.command.CommandContext;\r\n+import org.apache.dubbo.qos.command.annotation.Cmd;\r\n+import org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils;\r\n+\r\n+import java.util.concurrent.ScheduledFuture;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+@Cmd(name = \"publishMetadata\", summary = \"update service metadata and service instance\", example = {\r\n+        \"publishMetadata\",\r\n+        \"publishMetadata 5\"\r\n+})\r\n+public class PublishMetadata implements BaseCommand {\r\n+    private static final Logger logger = LoggerFactory.getLogger(PublishMetadata.class);\r\n+    private final ExecutorRepository executorRepository = ExtensionLoader.getExtensionLoader(ExecutorRepository.class).getDefaultExtension();\r\n+    private ScheduledFuture future;\r\n+\r\n+    @Override\r\n+    public String execute(CommandContext commandContext, String[] args) {\r\n+        logger.info(\"received publishMetadata command.\");\r\n+\r\n+        if (ArrayUtils.isEmpty(args)) {\r\n+            ServiceInstanceMetadataUtils.refreshMetadataAndInstance();\r\n+            return \"publish metadata succeeded.\";\r\n+        }\r\n+\r\n+        try {\r\n+            int delay = Integer.parseInt(args[0]);\r\n+            if (future == null || future.isDone() || future.isCancelled()) {\r\n+                future = executorRepository.nextScheduledExecutor()\r\n+                        .scheduleWithFixedDelay(ServiceInstanceMetadataUtils::refreshMetadataAndInstance, 0, delay, TimeUnit.MILLISECONDS);\r\n+            }\r\n+        } catch (NumberFormatException e) {\r\n+            logger.error(\"Wrong delay param\", e);\r\n+            return \"publishMetadata failed! Wrong delay param!\";\r\n+        }\r\n+        return \"publish task submitted, will publish in \" + args[0] + \" seconds.\";\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/command/impl/Ready.java", "source2": "org/apache/dubbo/qos/command/impl/Ready.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,95 +1,95 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.command.impl;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.bootstrap.DubboBootstrap;\n-import org.apache.dubbo.config.utils.ConfigValidationUtils;\n-import org.apache.dubbo.qos.command.BaseCommand;\n-import org.apache.dubbo.qos.command.CommandContext;\n-import org.apache.dubbo.qos.command.annotation.Cmd;\n-import org.apache.dubbo.qos.textui.TTable;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.ProviderModel;\n-\n-import java.util.HashMap;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.stream.Collectors;\n-\n-@Cmd(name = \"ready\",summary = \"Judge if application or service has started? \")\n-public class Ready implements BaseCommand {\n-\n-    @Override\n-    public String execute(CommandContext commandContext, String[] args) {\n-        String serviceName = args.length > 0 ? args[0] : null;\n-        if (StringUtils.isEmpty(serviceName)) {\n-            // judge application has started\n-            return DubboBootstrap.getInstance().isReady() ? \"true\" : \"false\";\n-        } else {\n-            // judge service has started\n-            Map<String, Boolean> serviceReadyMap = isServiceReady(serviceName);\n-            if (serviceReadyMap == null || serviceReadyMap.size() <= 0) {\n-                return \"can't match service=\" + serviceName;\n-            }\n-            return buildUiText(serviceReadyMap);\n-        }\n-    }\n-\n-    private String buildUiText(Map<String, Boolean> serviceReadyMap) {\n-        TTable tTable = new TTable(new TTable.ColumnDefine[]{\n-                new TTable.ColumnDefine(TTable.Align.MIDDLE),\n-                new TTable.ColumnDefine(TTable.Align.MIDDLE)\n-        });\n-\n-        //Header\n-        tTable.addRow(\"Provider Service Name\", \"STATUS\");\n-        for (Map.Entry<String, Boolean> entry : serviceReadyMap.entrySet()) {\n-            String status = Boolean.TRUE.equals(entry.getValue()) ? \"TRUE\" : \"FALSE\";\n-            tTable.addRow(entry.getKey(),status);\n-        }\n-        return tTable.rendering();\n-    }\n-\n-    /**\n-     * judge service provider is started\n-     * @param serviceName service name,eg: org.apache.dubbo.demo.DemoService\n-     * @return Map[serviceKey,isStarted] eg:[org.apache.dubbo.demo.DemoService,true] or [group1/org.apache.dubbo.demo.DemoService,false]\n-     */\n-    private Map<String,Boolean> isServiceReady(String serviceName) {\n-        Map<String,Boolean> res = new HashMap<>();\n-        for (ProviderModel providerModel : ApplicationModel.allProviderModels()) {\n-            String serviceKey = providerModel.getServiceKey();\n-            String interfaceName = providerModel.getServiceConfig().getInterface();\n-            if (interfaceName.equals(serviceName)) {\n-                List<URL> needRegistryURLs = ConfigValidationUtils.loadRegistries(providerModel.getServiceConfig(), true);\n-                List<URL> registeredRegistryURLs = providerModel.getStatedUrl().stream()\n-                        .filter(x -> Boolean.TRUE.equals(x.isRegistered()))\n-                        .map(ProviderModel.RegisterStatedURL::getRegistryUrl)\n-                        .collect(Collectors.toList());\n-                if (needRegistryURLs.size() == registeredRegistryURLs.size()) {\n-                    res.put(serviceKey,true);\n-                } else {\n-                    res.put(serviceKey,false);\n-                }\n-            }\n-        }\n-        return res;\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.command.impl;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.bootstrap.DubboBootstrap;\r\n+import org.apache.dubbo.config.utils.ConfigValidationUtils;\r\n+import org.apache.dubbo.qos.command.BaseCommand;\r\n+import org.apache.dubbo.qos.command.CommandContext;\r\n+import org.apache.dubbo.qos.command.annotation.Cmd;\r\n+import org.apache.dubbo.qos.textui.TTable;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.ProviderModel;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.stream.Collectors;\r\n+\r\n+@Cmd(name = \"ready\",summary = \"Judge if application or service has started? \")\r\n+public class Ready implements BaseCommand {\r\n+\r\n+    @Override\r\n+    public String execute(CommandContext commandContext, String[] args) {\r\n+        String serviceName = args.length > 0 ? args[0] : null;\r\n+        if (StringUtils.isEmpty(serviceName)) {\r\n+            // judge application has started\r\n+            return DubboBootstrap.getInstance().isReady() ? \"true\" : \"false\";\r\n+        } else {\r\n+            // judge service has started\r\n+            Map<String, Boolean> serviceReadyMap = isServiceReady(serviceName);\r\n+            if (serviceReadyMap == null || serviceReadyMap.size() <= 0) {\r\n+                return \"can't match service=\" + serviceName;\r\n+            }\r\n+            return buildUiText(serviceReadyMap);\r\n+        }\r\n+    }\r\n+\r\n+    private String buildUiText(Map<String, Boolean> serviceReadyMap) {\r\n+        TTable tTable = new TTable(new TTable.ColumnDefine[]{\r\n+                new TTable.ColumnDefine(TTable.Align.MIDDLE),\r\n+                new TTable.ColumnDefine(TTable.Align.MIDDLE)\r\n+        });\r\n+\r\n+        //Header\r\n+        tTable.addRow(\"Provider Service Name\", \"STATUS\");\r\n+        for (Map.Entry<String, Boolean> entry : serviceReadyMap.entrySet()) {\r\n+            String status = Boolean.TRUE.equals(entry.getValue()) ? \"TRUE\" : \"FALSE\";\r\n+            tTable.addRow(entry.getKey(),status);\r\n+        }\r\n+        return tTable.rendering();\r\n+    }\r\n+\r\n+    /**\r\n+     * judge service provider is started\r\n+     * @param serviceName service name,eg: org.apache.dubbo.demo.DemoService\r\n+     * @return Map[serviceKey,isStarted] eg:[org.apache.dubbo.demo.DemoService,true] or [group1/org.apache.dubbo.demo.DemoService,false]\r\n+     */\r\n+    private Map<String,Boolean> isServiceReady(String serviceName) {\r\n+        Map<String,Boolean> res = new HashMap<>();\r\n+        for (ProviderModel providerModel : ApplicationModel.allProviderModels()) {\r\n+            String serviceKey = providerModel.getServiceKey();\r\n+            String interfaceName = providerModel.getServiceConfig().getInterface();\r\n+            if (interfaceName.equals(serviceName)) {\r\n+                List<URL> needRegistryURLs = ConfigValidationUtils.loadRegistries(providerModel.getServiceConfig(), true);\r\n+                List<URL> registeredRegistryURLs = providerModel.getStatedUrl().stream()\r\n+                        .filter(x -> Boolean.TRUE.equals(x.isRegistered()))\r\n+                        .map(ProviderModel.RegisterStatedURL::getRegistryUrl)\r\n+                        .collect(Collectors.toList());\r\n+                if (needRegistryURLs.size() == registeredRegistryURLs.size()) {\r\n+                    res.put(serviceKey,true);\r\n+                } else {\r\n+                    res.put(serviceKey,false);\r\n+                }\r\n+            }\r\n+        }\r\n+        return res;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/command/impl/Version.java", "source2": "org/apache/dubbo/qos/command/impl/Version.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,37 +1,37 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.command.impl;\n-\n-import org.apache.dubbo.qos.command.BaseCommand;\n-import org.apache.dubbo.qos.command.CommandContext;\n-import org.apache.dubbo.qos.command.annotation.Cmd;\n-\n-@Cmd(name = \"version\", summary = \"version command(show dubbo version)\", example = {\n-        \"version\"\n-})\n-public class Version implements BaseCommand {\n-\n-    @Override\n-    public String execute(CommandContext commandContext, String[] args) {\n-        StringBuilder versionDescBuilder = new StringBuilder();\n-        versionDescBuilder.append(\"dubbo version \\\"\");\n-        versionDescBuilder.append(org.apache.dubbo.common.Version.getVersion());\n-        versionDescBuilder.append(\"\\\"\");\n-        return versionDescBuilder.toString();\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.command.impl;\r\n+\r\n+import org.apache.dubbo.qos.command.BaseCommand;\r\n+import org.apache.dubbo.qos.command.CommandContext;\r\n+import org.apache.dubbo.qos.command.annotation.Cmd;\r\n+\r\n+@Cmd(name = \"version\", summary = \"version command(show dubbo version)\", example = {\r\n+        \"version\"\r\n+})\r\n+public class Version implements BaseCommand {\r\n+\r\n+    @Override\r\n+    public String execute(CommandContext commandContext, String[] args) {\r\n+        StringBuilder versionDescBuilder = new StringBuilder();\r\n+        versionDescBuilder.append(\"dubbo version \\\"\");\r\n+        versionDescBuilder.append(org.apache.dubbo.common.Version.getVersion());\r\n+        versionDescBuilder.append(\"\\\"\");\r\n+        return versionDescBuilder.toString();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/command/util/CommandHelper.java", "source2": "org/apache/dubbo/qos/command/util/CommandHelper.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,64 +1,64 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.command.util;\n-\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.qos.command.BaseCommand;\n-\n-import java.util.ArrayList;\n-import java.util.List;\n-import java.util.Set;\n-\n-public class CommandHelper {\n-\n-    private CommandHelper() {\n-    }\n-\n-    public static boolean hasCommand(String commandName) {\n-\n-        BaseCommand command = null;\n-        try {\n-            command = ExtensionLoader.getExtensionLoader(BaseCommand.class).getExtension(commandName);\n-        } catch (Throwable throwable) {\n-            return false;\n-        }\n-\n-        return command != null;\n-\n-    }\n-\n-    public static List<Class<?>> getAllCommandClass() {\n-        final Set<String> commandList = ExtensionLoader.getExtensionLoader(BaseCommand.class).getSupportedExtensions();\n-        final List<Class<?>> classes = new ArrayList<Class<?>>();\n-\n-        for (String commandName : commandList) {\n-            BaseCommand command = ExtensionLoader.getExtensionLoader(BaseCommand.class).getExtension(commandName);\n-            classes.add(command.getClass());\n-        }\n-\n-        return classes;\n-    }\n-\n-\n-    public static Class<?> getCommandClass(String commandName) {\n-        if (hasCommand(commandName)) {\n-            return ExtensionLoader.getExtensionLoader(BaseCommand.class).getExtension(commandName).getClass();\n-        } else {\n-            return null;\n-        }\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.command.util;\r\n+\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.qos.command.BaseCommand;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+\r\n+public class CommandHelper {\r\n+\r\n+    private CommandHelper() {\r\n+    }\r\n+\r\n+    public static boolean hasCommand(String commandName) {\r\n+\r\n+        BaseCommand command = null;\r\n+        try {\r\n+            command = ExtensionLoader.getExtensionLoader(BaseCommand.class).getExtension(commandName);\r\n+        } catch (Throwable throwable) {\r\n+            return false;\r\n+        }\r\n+\r\n+        return command != null;\r\n+\r\n+    }\r\n+\r\n+    public static List<Class<?>> getAllCommandClass() {\r\n+        final Set<String> commandList = ExtensionLoader.getExtensionLoader(BaseCommand.class).getSupportedExtensions();\r\n+        final List<Class<?>> classes = new ArrayList<Class<?>>();\r\n+\r\n+        for (String commandName : commandList) {\r\n+            BaseCommand command = ExtensionLoader.getExtensionLoader(BaseCommand.class).getExtension(commandName);\r\n+            classes.add(command.getClass());\r\n+        }\r\n+\r\n+        return classes;\r\n+    }\r\n+\r\n+\r\n+    public static Class<?> getCommandClass(String commandName) {\r\n+        if (hasCommand(commandName)) {\r\n+            return ExtensionLoader.getExtensionLoader(BaseCommand.class).getExtension(commandName).getClass();\r\n+        } else {\r\n+            return null;\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/command/util/ServiceCheckUtils.java", "source2": "org/apache/dubbo/qos/command/util/ServiceCheckUtils.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,62 +1,62 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.command.util;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.registry.Registry;\n-import org.apache.dubbo.registry.support.AbstractRegistry;\n-import org.apache.dubbo.registry.support.AbstractRegistryFactory;\n-import org.apache.dubbo.rpc.model.ConsumerModel;\n-import org.apache.dubbo.rpc.model.ProviderModel;\n-\n-import java.util.Collection;\n-import java.util.List;\n-import java.util.Map;\n-\n-public class ServiceCheckUtils {\n-\n-    public static boolean isRegistered(ProviderModel providerModel) {\n-        // TODO, only check the status of one registry and no protocol now.\n-        Collection<Registry> registries = AbstractRegistryFactory.getRegistries();\n-        if (CollectionUtils.isNotEmpty(registries)) {\n-            AbstractRegistry abstractRegistry = (AbstractRegistry) registries.iterator().next();\n-            if (abstractRegistry.getRegistered().stream().anyMatch(url -> url.getServiceKey().equals(providerModel.getServiceKey()))) {\n-                return true;\n-            }\n-        }\n-        return false;\n-    }\n-\n-    public static int getConsumerAddressNum(ConsumerModel consumerModel) {\n-        // TODO, only check one registry by default.\n-        int num = 0;\n-\n-        Collection<Registry> registries = AbstractRegistryFactory.getRegistries();\n-        if (CollectionUtils.isNotEmpty(registries)) {\n-            AbstractRegistry abstractRegistry = (AbstractRegistry) registries.iterator().next();\n-            for (Map.Entry<URL, Map<String, List<URL>>> entry : abstractRegistry.getNotified().entrySet()) {\n-                if (entry.getKey().getServiceKey().equals(consumerModel.getServiceKey())) {\n-                    if (CollectionUtils.isNotEmptyMap(entry.getValue())) {\n-                        num = entry.getValue().size();\n-                    }\n-                }\n-            }\n-        }\n-        return num;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.command.util;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.registry.Registry;\r\n+import org.apache.dubbo.registry.support.AbstractRegistry;\r\n+import org.apache.dubbo.registry.support.AbstractRegistryFactory;\r\n+import org.apache.dubbo.rpc.model.ConsumerModel;\r\n+import org.apache.dubbo.rpc.model.ProviderModel;\r\n+\r\n+import java.util.Collection;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+\r\n+public class ServiceCheckUtils {\r\n+\r\n+    public static boolean isRegistered(ProviderModel providerModel) {\r\n+        // TODO, only check the status of one registry and no protocol now.\r\n+        Collection<Registry> registries = AbstractRegistryFactory.getRegistries();\r\n+        if (CollectionUtils.isNotEmpty(registries)) {\r\n+            AbstractRegistry abstractRegistry = (AbstractRegistry) registries.iterator().next();\r\n+            if (abstractRegistry.getRegistered().stream().anyMatch(url -> url.getServiceKey().equals(providerModel.getServiceKey()))) {\r\n+                return true;\r\n+            }\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    public static int getConsumerAddressNum(ConsumerModel consumerModel) {\r\n+        // TODO, only check one registry by default.\r\n+        int num = 0;\r\n+\r\n+        Collection<Registry> registries = AbstractRegistryFactory.getRegistries();\r\n+        if (CollectionUtils.isNotEmpty(registries)) {\r\n+            AbstractRegistry abstractRegistry = (AbstractRegistry) registries.iterator().next();\r\n+            for (Map.Entry<URL, Map<String, List<URL>>> entry : abstractRegistry.getNotified().entrySet()) {\r\n+                if (entry.getKey().getServiceKey().equals(consumerModel.getServiceKey())) {\r\n+                    if (CollectionUtils.isNotEmptyMap(entry.getValue())) {\r\n+                        num = entry.getValue().size();\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+        return num;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/legacy/ChangeTelnetHandler.java", "source2": "org/apache/dubbo/qos/legacy/ChangeTelnetHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,65 +1,65 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.legacy;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.telnet.TelnetHandler;\n-import org.apache.dubbo.remoting.telnet.support.Help;\n-import org.apache.dubbo.rpc.Exporter;\n-import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol;\n-\n-/**\n- * ChangeServiceTelnetHandler\n- */\n-@Activate\n-@Help(parameter = \"[service]\", summary = \"Change default service.\", detail = \"Change default service.\")\n-public class ChangeTelnetHandler implements TelnetHandler {\n-\n-    public static final String SERVICE_KEY = \"telnet.service\";\n-\n-    @Override\n-    public String telnet(Channel channel, String message) {\n-        if (message == null || message.length() == 0) {\n-            return \"Please input service name, eg: \\r\\ncd XxxService\\r\\ncd com.xxx.XxxService\";\n-        }\n-        StringBuilder buf = new StringBuilder();\n-        if (\"/\".equals(message) || \"..\".equals(message)) {\n-            String service = (String) channel.getAttribute(SERVICE_KEY);\n-            channel.removeAttribute(SERVICE_KEY);\n-            buf.append(\"Cancelled default service \").append(service).append(\".\");\n-        } else {\n-            boolean found = false;\n-            for (Exporter<?> exporter : DubboProtocol.getDubboProtocol().getExporters()) {\n-                if (message.equals(exporter.getInvoker().getInterface().getSimpleName())\n-                        || message.equals(exporter.getInvoker().getInterface().getName())\n-                        || message.equals(exporter.getInvoker().getUrl().getPath())) {\n-                    found = true;\n-                    break;\n-                }\n-            }\n-            if (found) {\n-                channel.setAttribute(SERVICE_KEY, message);\n-                buf.append(\"Used the \").append(message).append(\" as default.\\r\\nYou can cancel default service by command: cd /\");\n-            } else {\n-                buf.append(\"No such service \").append(message);\n-            }\n-        }\n-        return buf.toString();\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.legacy;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.telnet.TelnetHandler;\r\n+import org.apache.dubbo.remoting.telnet.support.Help;\r\n+import org.apache.dubbo.rpc.Exporter;\r\n+import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol;\r\n+\r\n+/**\r\n+ * ChangeServiceTelnetHandler\r\n+ */\r\n+@Activate\r\n+@Help(parameter = \"[service]\", summary = \"Change default service.\", detail = \"Change default service.\")\r\n+public class ChangeTelnetHandler implements TelnetHandler {\r\n+\r\n+    public static final String SERVICE_KEY = \"telnet.service\";\r\n+\r\n+    @Override\r\n+    public String telnet(Channel channel, String message) {\r\n+        if (message == null || message.length() == 0) {\r\n+            return \"Please input service name, eg: \\r\\ncd XxxService\\r\\ncd com.xxx.XxxService\";\r\n+        }\r\n+        StringBuilder buf = new StringBuilder();\r\n+        if (\"/\".equals(message) || \"..\".equals(message)) {\r\n+            String service = (String) channel.getAttribute(SERVICE_KEY);\r\n+            channel.removeAttribute(SERVICE_KEY);\r\n+            buf.append(\"Cancelled default service \").append(service).append(\".\");\r\n+        } else {\r\n+            boolean found = false;\r\n+            for (Exporter<?> exporter : DubboProtocol.getDubboProtocol().getExporters()) {\r\n+                if (message.equals(exporter.getInvoker().getInterface().getSimpleName())\r\n+                        || message.equals(exporter.getInvoker().getInterface().getName())\r\n+                        || message.equals(exporter.getInvoker().getUrl().getPath())) {\r\n+                    found = true;\r\n+                    break;\r\n+                }\r\n+            }\r\n+            if (found) {\r\n+                channel.setAttribute(SERVICE_KEY, message);\r\n+                buf.append(\"Used the \").append(message).append(\" as default.\\r\\nYou can cancel default service by command: cd /\");\r\n+            } else {\r\n+                buf.append(\"No such service \").append(message);\r\n+            }\r\n+        }\r\n+        return buf.toString();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/legacy/CountTelnetHandler.java", "source2": "org/apache/dubbo/qos/legacy/CountTelnetHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,163 +1,163 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.legacy;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.RemotingException;\n-import org.apache.dubbo.remoting.telnet.TelnetHandler;\n-import org.apache.dubbo.remoting.telnet.support.Help;\n-import org.apache.dubbo.remoting.telnet.support.TelnetUtils;\n-import org.apache.dubbo.rpc.Exporter;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.RpcStatus;\n-import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol;\n-\n-import java.lang.reflect.Method;\n-import java.util.ArrayList;\n-import java.util.List;\n-\n-/**\n- * CountTelnetHandler\n- */\n-@Activate\n-@Help(parameter = \"[service] [method] [times]\", summary = \"Count the service.\", detail = \"Count the service.\")\n-public class CountTelnetHandler implements TelnetHandler {\n-\n-    @Override\n-    public String telnet(final Channel channel, String message) {\n-        String service = (String) channel.getAttribute(ChangeTelnetHandler.SERVICE_KEY);\n-        if ((service == null || service.length() == 0)\n-                && (message == null || message.length() == 0)) {\n-            return \"Please input service name, eg: \\r\\ncount XxxService\\r\\ncount XxxService xxxMethod\\r\\ncount XxxService xxxMethod 10\\r\\nor \\\"cd XxxService\\\" firstly.\";\n-        }\n-        StringBuilder buf = new StringBuilder();\n-        if (service != null && service.length() > 0) {\n-            buf.append(\"Use default service \").append(service).append(\".\\r\\n\");\n-        }\n-        String[] parts = message.split(\"\\\\s+\");\n-        String method;\n-        String times;\n-        if (service == null || service.length() == 0) {\n-            service = parts.length > 0 ? parts[0] : null;\n-            method = parts.length > 1 ? parts[1] : null;\n-        } else {\n-            method = parts.length > 0 ? parts[0] : null;\n-        }\n-        if (StringUtils.isInteger(method)) {\n-            times = method;\n-            method = null;\n-        } else {\n-            times = parts.length > 2 ? parts[2] : \"1\";\n-        }\n-        if (!StringUtils.isInteger(times)) {\n-            return \"Illegal times \" + times + \", must be integer.\";\n-        }\n-        final int t = Integer.parseInt(times);\n-        Invoker<?> invoker = null;\n-        for (Exporter<?> exporter : DubboProtocol.getDubboProtocol().getExporters()) {\n-            if (service.equals(exporter.getInvoker().getInterface().getSimpleName())\n-                    || service.equals(exporter.getInvoker().getInterface().getName())\n-                    || service.equals(exporter.getInvoker().getUrl().getPath())) {\n-                invoker = exporter.getInvoker();\n-                break;\n-            }\n-        }\n-        if (invoker != null) {\n-            if (t > 0) {\n-                final String mtd = method;\n-                final Invoker<?> inv = invoker;\n-                final String prompt = channel.getUrl().getParameter(\"prompt\", \"telnet\");\n-                Thread thread = new Thread(new Runnable() {\n-                    @Override\n-                    public void run() {\n-                        for (int i = 0; i < t; i++) {\n-                            String result = count(inv, mtd);\n-                            try {\n-                                channel.send(\"\\r\\n\" + result);\n-                            } catch (RemotingException e1) {\n-                                return;\n-                            }\n-                            if (i < t - 1) {\n-                                try {\n-                                    Thread.sleep(1000);\n-                                } catch (InterruptedException e) {\n-                                }\n-                            }\n-                        }\n-                        try {\n-                            channel.send(\"\\r\\n\" + prompt + \"> \");\n-                        } catch (RemotingException e1) {\n-                            return;\n-                        }\n-                    }\n-                }, \"TelnetCount\");\n-                thread.setDaemon(true);\n-                thread.start();\n-            }\n-        } else {\n-            buf.append(\"No such service \").append(service);\n-        }\n-        return buf.toString();\n-    }\n-\n-    private String count(Invoker<?> invoker, String method) {\n-        URL url = invoker.getUrl();\n-        List<List<String>> table = new ArrayList<List<String>>();\n-        List<String> header = new ArrayList<String>();\n-        header.add(\"method\");\n-        header.add(\"total\");\n-        header.add(\"failed\");\n-        header.add(\"active\");\n-        header.add(\"average\");\n-        header.add(\"max\");\n-        if (method == null || method.length() == 0) {\n-            for (Method m : invoker.getInterface().getMethods()) {\n-                RpcStatus count = RpcStatus.getStatus(url, m.getName());\n-                table.add(createRow(m.getName(),count));\n-            }\n-        } else {\n-            boolean found = false;\n-            for (Method m : invoker.getInterface().getMethods()) {\n-                if (m.getName().equals(method)) {\n-                    found = true;\n-                    break;\n-                }\n-            }\n-            if (found) {\n-                RpcStatus count = RpcStatus.getStatus(url, method);\n-                table.add(createRow(method,count));\n-            } else {\n-                return \"No such method \" + method + \" in class \" + invoker.getInterface().getName();\n-            }\n-        }\n-        return TelnetUtils.toTable(header, table);\n-    }\n-\n-    private List<String> createRow(String methodName,RpcStatus count) {\n-        List<String> row = new ArrayList<String>();\n-        row.add(methodName);\n-        row.add(String.valueOf(count.getTotal()));\n-        row.add(String.valueOf(count.getFailed()));\n-        row.add(String.valueOf(count.getActive()));\n-        row.add(count.getSucceededAverageElapsed() + \"ms\");\n-        row.add(count.getSucceededMaxElapsed() + \"ms\");\n-        return row;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.legacy;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.RemotingException;\r\n+import org.apache.dubbo.remoting.telnet.TelnetHandler;\r\n+import org.apache.dubbo.remoting.telnet.support.Help;\r\n+import org.apache.dubbo.remoting.telnet.support.TelnetUtils;\r\n+import org.apache.dubbo.rpc.Exporter;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.RpcStatus;\r\n+import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * CountTelnetHandler\r\n+ */\r\n+@Activate\r\n+@Help(parameter = \"[service] [method] [times]\", summary = \"Count the service.\", detail = \"Count the service.\")\r\n+public class CountTelnetHandler implements TelnetHandler {\r\n+\r\n+    @Override\r\n+    public String telnet(final Channel channel, String message) {\r\n+        String service = (String) channel.getAttribute(ChangeTelnetHandler.SERVICE_KEY);\r\n+        if ((service == null || service.length() == 0)\r\n+                && (message == null || message.length() == 0)) {\r\n+            return \"Please input service name, eg: \\r\\ncount XxxService\\r\\ncount XxxService xxxMethod\\r\\ncount XxxService xxxMethod 10\\r\\nor \\\"cd XxxService\\\" firstly.\";\r\n+        }\r\n+        StringBuilder buf = new StringBuilder();\r\n+        if (service != null && service.length() > 0) {\r\n+            buf.append(\"Use default service \").append(service).append(\".\\r\\n\");\r\n+        }\r\n+        String[] parts = message.split(\"\\\\s+\");\r\n+        String method;\r\n+        String times;\r\n+        if (service == null || service.length() == 0) {\r\n+            service = parts.length > 0 ? parts[0] : null;\r\n+            method = parts.length > 1 ? parts[1] : null;\r\n+        } else {\r\n+            method = parts.length > 0 ? parts[0] : null;\r\n+        }\r\n+        if (StringUtils.isInteger(method)) {\r\n+            times = method;\r\n+            method = null;\r\n+        } else {\r\n+            times = parts.length > 2 ? parts[2] : \"1\";\r\n+        }\r\n+        if (!StringUtils.isInteger(times)) {\r\n+            return \"Illegal times \" + times + \", must be integer.\";\r\n+        }\r\n+        final int t = Integer.parseInt(times);\r\n+        Invoker<?> invoker = null;\r\n+        for (Exporter<?> exporter : DubboProtocol.getDubboProtocol().getExporters()) {\r\n+            if (service.equals(exporter.getInvoker().getInterface().getSimpleName())\r\n+                    || service.equals(exporter.getInvoker().getInterface().getName())\r\n+                    || service.equals(exporter.getInvoker().getUrl().getPath())) {\r\n+                invoker = exporter.getInvoker();\r\n+                break;\r\n+            }\r\n+        }\r\n+        if (invoker != null) {\r\n+            if (t > 0) {\r\n+                final String mtd = method;\r\n+                final Invoker<?> inv = invoker;\r\n+                final String prompt = channel.getUrl().getParameter(\"prompt\", \"telnet\");\r\n+                Thread thread = new Thread(new Runnable() {\r\n+                    @Override\r\n+                    public void run() {\r\n+                        for (int i = 0; i < t; i++) {\r\n+                            String result = count(inv, mtd);\r\n+                            try {\r\n+                                channel.send(\"\\r\\n\" + result);\r\n+                            } catch (RemotingException e1) {\r\n+                                return;\r\n+                            }\r\n+                            if (i < t - 1) {\r\n+                                try {\r\n+                                    Thread.sleep(1000);\r\n+                                } catch (InterruptedException e) {\r\n+                                }\r\n+                            }\r\n+                        }\r\n+                        try {\r\n+                            channel.send(\"\\r\\n\" + prompt + \"> \");\r\n+                        } catch (RemotingException e1) {\r\n+                            return;\r\n+                        }\r\n+                    }\r\n+                }, \"TelnetCount\");\r\n+                thread.setDaemon(true);\r\n+                thread.start();\r\n+            }\r\n+        } else {\r\n+            buf.append(\"No such service \").append(service);\r\n+        }\r\n+        return buf.toString();\r\n+    }\r\n+\r\n+    private String count(Invoker<?> invoker, String method) {\r\n+        URL url = invoker.getUrl();\r\n+        List<List<String>> table = new ArrayList<List<String>>();\r\n+        List<String> header = new ArrayList<String>();\r\n+        header.add(\"method\");\r\n+        header.add(\"total\");\r\n+        header.add(\"failed\");\r\n+        header.add(\"active\");\r\n+        header.add(\"average\");\r\n+        header.add(\"max\");\r\n+        if (method == null || method.length() == 0) {\r\n+            for (Method m : invoker.getInterface().getMethods()) {\r\n+                RpcStatus count = RpcStatus.getStatus(url, m.getName());\r\n+                table.add(createRow(m.getName(),count));\r\n+            }\r\n+        } else {\r\n+            boolean found = false;\r\n+            for (Method m : invoker.getInterface().getMethods()) {\r\n+                if (m.getName().equals(method)) {\r\n+                    found = true;\r\n+                    break;\r\n+                }\r\n+            }\r\n+            if (found) {\r\n+                RpcStatus count = RpcStatus.getStatus(url, method);\r\n+                table.add(createRow(method,count));\r\n+            } else {\r\n+                return \"No such method \" + method + \" in class \" + invoker.getInterface().getName();\r\n+            }\r\n+        }\r\n+        return TelnetUtils.toTable(header, table);\r\n+    }\r\n+\r\n+    private List<String> createRow(String methodName,RpcStatus count) {\r\n+        List<String> row = new ArrayList<String>();\r\n+        row.add(methodName);\r\n+        row.add(String.valueOf(count.getTotal()));\r\n+        row.add(String.valueOf(count.getFailed()));\r\n+        row.add(String.valueOf(count.getActive()));\r\n+        row.add(count.getSucceededAverageElapsed() + \"ms\");\r\n+        row.add(count.getSucceededMaxElapsed() + \"ms\");\r\n+        return row;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/legacy/CurrentTelnetHandler.java", "source2": "org/apache/dubbo/qos/legacy/CurrentTelnetHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,46 +1,46 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.legacy;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.telnet.TelnetHandler;\n-import org.apache.dubbo.remoting.telnet.support.Help;\n-\n-/**\n- * CurrentServiceTelnetHandler\n- */\n-@Activate\n-@Help(parameter = \"\", summary = \"Print working default service.\", detail = \"Print working default service.\")\n-public class CurrentTelnetHandler implements TelnetHandler {\n-\n-    @Override\n-    public String telnet(Channel channel, String message) {\n-        if (message.length() > 0) {\n-            return \"Unsupported parameter \" + message + \" for pwd.\";\n-        }\n-        String service = (String) channel.getAttribute(ChangeTelnetHandler.SERVICE_KEY);\n-        StringBuilder buf = new StringBuilder();\n-        if (service == null || service.length() == 0) {\n-            buf.append(\"/\");\n-        } else {\n-            buf.append(service);\n-        }\n-        return buf.toString();\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.legacy;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.telnet.TelnetHandler;\r\n+import org.apache.dubbo.remoting.telnet.support.Help;\r\n+\r\n+/**\r\n+ * CurrentServiceTelnetHandler\r\n+ */\r\n+@Activate\r\n+@Help(parameter = \"\", summary = \"Print working default service.\", detail = \"Print working default service.\")\r\n+public class CurrentTelnetHandler implements TelnetHandler {\r\n+\r\n+    @Override\r\n+    public String telnet(Channel channel, String message) {\r\n+        if (message.length() > 0) {\r\n+            return \"Unsupported parameter \" + message + \" for pwd.\";\r\n+        }\r\n+        String service = (String) channel.getAttribute(ChangeTelnetHandler.SERVICE_KEY);\r\n+        StringBuilder buf = new StringBuilder();\r\n+        if (service == null || service.length() == 0) {\r\n+            buf.append(\"/\");\r\n+        } else {\r\n+            buf.append(service);\r\n+        }\r\n+        return buf.toString();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/legacy/InvokeTelnetHandler.java", "source2": "org/apache/dubbo/qos/legacy/InvokeTelnetHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,261 +1,261 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.legacy;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.telnet.TelnetHandler;\n-import org.apache.dubbo.remoting.telnet.support.Help;\n-import org.apache.dubbo.rpc.AppResponse;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.MethodDescriptor;\n-import org.apache.dubbo.rpc.model.ProviderModel;\n-\n-import com.alibaba.fastjson.JSON;\n-\n-import java.lang.reflect.Method;\n-import java.util.ArrayList;\n-import java.util.Collection;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-\n-import static org.apache.dubbo.common.utils.PojoUtils.realize;\n-\n-/**\n- * InvokeTelnetHandler\n- */\n-@Activate\n-@Help(parameter = \"[service.]method(args) \", summary = \"Invoke the service method.\",\n-        detail = \"Invoke the service method.\")\n-public class InvokeTelnetHandler implements TelnetHandler {\n-\n-    public static final String INVOKE_MESSAGE_KEY = \"telnet.invoke.method.message\";\n-    public static final String INVOKE_METHOD_LIST_KEY = \"telnet.invoke.method.list\";\n-    public static final String INVOKE_METHOD_PROVIDER_KEY = \"telnet.invoke.method.provider\";\n-\n-    @Override\n-    @SuppressWarnings(\"unchecked\")\n-    public String telnet(Channel channel, String message) {\n-        if (StringUtils.isEmpty(message)) {\n-            return \"Please input method name, eg: \\r\\ninvoke xxxMethod(1234, \\\"abcd\\\", {\\\"prop\\\" : \\\"value\\\"})\\r\\n\" +\n-                    \"invoke XxxService.xxxMethod(1234, \\\"abcd\\\", {\\\"prop\\\" : \\\"value\\\"})\\r\\n\" +\n-                    \"invoke com.xxx.XxxService.xxxMethod(1234, \\\"abcd\\\", {\\\"prop\\\" : \\\"value\\\"})\";\n-        }\n-\n-        String service = (String) channel.getAttribute(ChangeTelnetHandler.SERVICE_KEY);\n-\n-        int i = message.indexOf(\"(\");\n-\n-        if (i < 0 || !message.endsWith(\")\")) {\n-            return \"Invalid parameters, format: service.method(args)\";\n-        }\n-\n-        String method = message.substring(0, i).trim();\n-        String args = message.substring(i + 1, message.length() - 1).trim();\n-        i = method.lastIndexOf(\".\");\n-        if (i >= 0) {\n-            service = method.substring(0, i).trim();\n-            method = method.substring(i + 1).trim();\n-        }\n-\n-        List<Object> list;\n-        try {\n-            list = JSON.parseArray(\"[\" + args + \"]\", Object.class);\n-        } catch (Throwable t) {\n-            return \"Invalid json argument, cause: \" + t.getMessage();\n-        }\n-        StringBuilder buf = new StringBuilder();\n-        Method invokeMethod = null;\n-        ProviderModel selectedProvider = null;\n-        if (isInvokedSelectCommand(channel)) {\n-            selectedProvider = (ProviderModel) channel.getAttribute(INVOKE_METHOD_PROVIDER_KEY);\n-            invokeMethod = (Method) channel.getAttribute(SelectTelnetHandler.SELECT_METHOD_KEY);\n-        } else {\n-            for (ProviderModel provider : ApplicationModel.allProviderModels()) {\n-                if (isServiceMatch(service, provider)) {\n-                    selectedProvider = provider;\n-                    List<Method> methodList = findSameSignatureMethod(provider.getAllMethods(), method, list);\n-                    if (CollectionUtils.isNotEmpty(methodList)) {\n-                        if (methodList.size() == 1) {\n-                            invokeMethod = methodList.get(0);\n-                        } else {\n-                            List<Method> matchMethods = findMatchMethods(methodList, list);\n-                            if (CollectionUtils.isNotEmpty(matchMethods)) {\n-                                if (matchMethods.size() == 1) {\n-                                    invokeMethod = matchMethods.get(0);\n-                                } else { //exist overridden method\n-                                    channel.setAttribute(INVOKE_METHOD_PROVIDER_KEY, provider);\n-                                    channel.setAttribute(INVOKE_METHOD_LIST_KEY, matchMethods);\n-                                    channel.setAttribute(INVOKE_MESSAGE_KEY, message);\n-                                    printSelectMessage(buf, matchMethods);\n-                                    return buf.toString();\n-                                }\n-                            }\n-                        }\n-                    }\n-                    break;\n-                }\n-            }\n-        }\n-\n-\n-        if (!StringUtils.isEmpty(service)) {\n-            buf.append(\"Use default service \").append(service).append(\".\");\n-        }\n-        if (selectedProvider != null) {\n-            if (invokeMethod != null) {\n-                try {\n-                    Object[] array = realize(list.toArray(), invokeMethod.getParameterTypes(),\n-                            invokeMethod.getGenericParameterTypes());\n-                    long start = System.currentTimeMillis();\n-                    AppResponse result = new AppResponse();\n-                    try {\n-                        Object o = invokeMethod.invoke(selectedProvider.getServiceInstance(), array);\n-                        result.setValue(o);\n-                    } catch (Throwable t) {\n-                        result.setException(t);\n-                    }\n-                    long end = System.currentTimeMillis();\n-                    buf.append(\"\\r\\nresult: \");\n-                    buf.append(JSON.toJSONString(result.recreate()));\n-                    buf.append(\"\\r\\nelapsed: \");\n-                    buf.append(end - start);\n-                    buf.append(\" ms.\");\n-                } catch (Throwable t) {\n-                    return \"Failed to invoke method \" + invokeMethod.getName() + \", cause: \" + StringUtils.toString(t);\n-                }\n-            } else {\n-                buf.append(\"\\r\\nNo such method \").append(method).append(\" in service \").append(service);\n-            }\n-        } else {\n-            buf.append(\"\\r\\nNo such service \").append(service);\n-        }\n-        return buf.toString();\n-    }\n-\n-\n-    private boolean isServiceMatch(String service, ProviderModel provider) {\n-        return provider.getServiceKey().equalsIgnoreCase(service)\n-                || provider.getServiceInterfaceClass().getSimpleName().equalsIgnoreCase(service)\n-                || provider.getServiceInterfaceClass().getName().equalsIgnoreCase(service)\n-                || StringUtils.isEmpty(service);\n-    }\n-\n-    private List<Method> findSameSignatureMethod(Set<MethodDescriptor> methods, String lookupMethodName, List<Object> args) {\n-        List<Method> sameSignatureMethods = new ArrayList<>();\n-        for (MethodDescriptor model : methods) {\n-            Method method = model.getMethod();\n-            if (method.getName().equals(lookupMethodName) && method.getParameterTypes().length == args.size()) {\n-                sameSignatureMethods.add(method);\n-            }\n-        }\n-        return sameSignatureMethods;\n-    }\n-\n-    private List<Method> findMatchMethods(List<Method> methods, List<Object> args) {\n-        List<Method> matchMethod = new ArrayList<>();\n-        for (Method method : methods) {\n-            if (isMatch(method, args)) {\n-                matchMethod.add(method);\n-            }\n-        }\n-        return matchMethod;\n-    }\n-\n-    private static boolean isMatch(Method method, List<Object> args) {\n-        Class<?>[] types = method.getParameterTypes();\n-        if (types.length != args.size()) {\n-            return false;\n-        }\n-        for (int i = 0; i < types.length; i++) {\n-            Class<?> type = types[i];\n-            Object arg = args.get(i);\n-\n-            if (arg == null) {\n-                if (type.isPrimitive()) {\n-                    return false;\n-                }\n-\n-                // if the type is not primitive, we choose to believe what the invoker want is a null value\n-                continue;\n-            }\n-\n-            if (ReflectUtils.isPrimitive(arg.getClass())) {\n-                // allow string arg to enum type, @see PojoUtils.realize0()\n-                if (arg instanceof String && type.isEnum()) {\n-                    continue;\n-                }\n-\n-                if (!ReflectUtils.isPrimitive(type)) {\n-                    return false;\n-                }\n-\n-                if (!ReflectUtils.isCompatible(type, arg)) {\n-                    return false;\n-                }\n-            } else if (arg instanceof Map) {\n-                String name = (String) ((Map<?, ?>) arg).get(\"class\");\n-                if (StringUtils.isNotEmpty(name)) {\n-                    Class<?> cls = ReflectUtils.forName(name);\n-                    if (!type.isAssignableFrom(cls)) {\n-                        return false;\n-                    }\n-                } else {\n-                    return true;\n-                }\n-            } else if (arg instanceof Collection) {\n-                if (!type.isArray() && !type.isAssignableFrom(arg.getClass())) {\n-                    return false;\n-                }\n-            } else {\n-                if (!type.isAssignableFrom(arg.getClass())) {\n-                    return false;\n-                }\n-            }\n-        }\n-        return true;\n-    }\n-\n-    private void printSelectMessage(StringBuilder buf, List<Method> methods) {\n-        buf.append(\"Methods:\\r\\n\");\n-        for (int i = 0; i < methods.size(); i++) {\n-            Method method = methods.get(i);\n-            buf.append(i + 1).append(\". \").append(method.getName()).append(\"(\");\n-            Class<?>[] parameterTypes = method.getParameterTypes();\n-            for (int n = 0; n < parameterTypes.length; n++) {\n-                buf.append(parameterTypes[n].getSimpleName());\n-                if (n != parameterTypes.length - 1) {\n-                    buf.append(\",\");\n-                }\n-            }\n-            buf.append(\")\\r\\n\");\n-        }\n-        buf.append(\"Please use the select command to select the method you want to invoke. eg: select 1\");\n-    }\n-\n-    private boolean isInvokedSelectCommand(Channel channel) {\n-        if (channel.hasAttribute(SelectTelnetHandler.SELECT_KEY)) {\n-            channel.removeAttribute(SelectTelnetHandler.SELECT_KEY);\n-            return true;\n-        }\n-        return false;\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.legacy;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.telnet.TelnetHandler;\r\n+import org.apache.dubbo.remoting.telnet.support.Help;\r\n+import org.apache.dubbo.rpc.AppResponse;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.MethodDescriptor;\r\n+import org.apache.dubbo.rpc.model.ProviderModel;\r\n+\r\n+import com.alibaba.fastjson.JSON;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.util.ArrayList;\r\n+import java.util.Collection;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+\r\n+import static org.apache.dubbo.common.utils.PojoUtils.realize;\r\n+\r\n+/**\r\n+ * InvokeTelnetHandler\r\n+ */\r\n+@Activate\r\n+@Help(parameter = \"[service.]method(args) \", summary = \"Invoke the service method.\",\r\n+        detail = \"Invoke the service method.\")\r\n+public class InvokeTelnetHandler implements TelnetHandler {\r\n+\r\n+    public static final String INVOKE_MESSAGE_KEY = \"telnet.invoke.method.message\";\r\n+    public static final String INVOKE_METHOD_LIST_KEY = \"telnet.invoke.method.list\";\r\n+    public static final String INVOKE_METHOD_PROVIDER_KEY = \"telnet.invoke.method.provider\";\r\n+\r\n+    @Override\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public String telnet(Channel channel, String message) {\r\n+        if (StringUtils.isEmpty(message)) {\r\n+            return \"Please input method name, eg: \\r\\ninvoke xxxMethod(1234, \\\"abcd\\\", {\\\"prop\\\" : \\\"value\\\"})\\r\\n\" +\r\n+                    \"invoke XxxService.xxxMethod(1234, \\\"abcd\\\", {\\\"prop\\\" : \\\"value\\\"})\\r\\n\" +\r\n+                    \"invoke com.xxx.XxxService.xxxMethod(1234, \\\"abcd\\\", {\\\"prop\\\" : \\\"value\\\"})\";\r\n+        }\r\n+\r\n+        String service = (String) channel.getAttribute(ChangeTelnetHandler.SERVICE_KEY);\r\n+\r\n+        int i = message.indexOf(\"(\");\r\n+\r\n+        if (i < 0 || !message.endsWith(\")\")) {\r\n+            return \"Invalid parameters, format: service.method(args)\";\r\n+        }\r\n+\r\n+        String method = message.substring(0, i).trim();\r\n+        String args = message.substring(i + 1, message.length() - 1).trim();\r\n+        i = method.lastIndexOf(\".\");\r\n+        if (i >= 0) {\r\n+            service = method.substring(0, i).trim();\r\n+            method = method.substring(i + 1).trim();\r\n+        }\r\n+\r\n+        List<Object> list;\r\n+        try {\r\n+            list = JSON.parseArray(\"[\" + args + \"]\", Object.class);\r\n+        } catch (Throwable t) {\r\n+            return \"Invalid json argument, cause: \" + t.getMessage();\r\n+        }\r\n+        StringBuilder buf = new StringBuilder();\r\n+        Method invokeMethod = null;\r\n+        ProviderModel selectedProvider = null;\r\n+        if (isInvokedSelectCommand(channel)) {\r\n+            selectedProvider = (ProviderModel) channel.getAttribute(INVOKE_METHOD_PROVIDER_KEY);\r\n+            invokeMethod = (Method) channel.getAttribute(SelectTelnetHandler.SELECT_METHOD_KEY);\r\n+        } else {\r\n+            for (ProviderModel provider : ApplicationModel.allProviderModels()) {\r\n+                if (isServiceMatch(service, provider)) {\r\n+                    selectedProvider = provider;\r\n+                    List<Method> methodList = findSameSignatureMethod(provider.getAllMethods(), method, list);\r\n+                    if (CollectionUtils.isNotEmpty(methodList)) {\r\n+                        if (methodList.size() == 1) {\r\n+                            invokeMethod = methodList.get(0);\r\n+                        } else {\r\n+                            List<Method> matchMethods = findMatchMethods(methodList, list);\r\n+                            if (CollectionUtils.isNotEmpty(matchMethods)) {\r\n+                                if (matchMethods.size() == 1) {\r\n+                                    invokeMethod = matchMethods.get(0);\r\n+                                } else { //exist overridden method\r\n+                                    channel.setAttribute(INVOKE_METHOD_PROVIDER_KEY, provider);\r\n+                                    channel.setAttribute(INVOKE_METHOD_LIST_KEY, matchMethods);\r\n+                                    channel.setAttribute(INVOKE_MESSAGE_KEY, message);\r\n+                                    printSelectMessage(buf, matchMethods);\r\n+                                    return buf.toString();\r\n+                                }\r\n+                            }\r\n+                        }\r\n+                    }\r\n+                    break;\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+\r\n+        if (!StringUtils.isEmpty(service)) {\r\n+            buf.append(\"Use default service \").append(service).append(\".\");\r\n+        }\r\n+        if (selectedProvider != null) {\r\n+            if (invokeMethod != null) {\r\n+                try {\r\n+                    Object[] array = realize(list.toArray(), invokeMethod.getParameterTypes(),\r\n+                            invokeMethod.getGenericParameterTypes());\r\n+                    long start = System.currentTimeMillis();\r\n+                    AppResponse result = new AppResponse();\r\n+                    try {\r\n+                        Object o = invokeMethod.invoke(selectedProvider.getServiceInstance(), array);\r\n+                        result.setValue(o);\r\n+                    } catch (Throwable t) {\r\n+                        result.setException(t);\r\n+                    }\r\n+                    long end = System.currentTimeMillis();\r\n+                    buf.append(\"\\r\\nresult: \");\r\n+                    buf.append(JSON.toJSONString(result.recreate()));\r\n+                    buf.append(\"\\r\\nelapsed: \");\r\n+                    buf.append(end - start);\r\n+                    buf.append(\" ms.\");\r\n+                } catch (Throwable t) {\r\n+                    return \"Failed to invoke method \" + invokeMethod.getName() + \", cause: \" + StringUtils.toString(t);\r\n+                }\r\n+            } else {\r\n+                buf.append(\"\\r\\nNo such method \").append(method).append(\" in service \").append(service);\r\n+            }\r\n+        } else {\r\n+            buf.append(\"\\r\\nNo such service \").append(service);\r\n+        }\r\n+        return buf.toString();\r\n+    }\r\n+\r\n+\r\n+    private boolean isServiceMatch(String service, ProviderModel provider) {\r\n+        return provider.getServiceKey().equalsIgnoreCase(service)\r\n+                || provider.getServiceInterfaceClass().getSimpleName().equalsIgnoreCase(service)\r\n+                || provider.getServiceInterfaceClass().getName().equalsIgnoreCase(service)\r\n+                || StringUtils.isEmpty(service);\r\n+    }\r\n+\r\n+    private List<Method> findSameSignatureMethod(Set<MethodDescriptor> methods, String lookupMethodName, List<Object> args) {\r\n+        List<Method> sameSignatureMethods = new ArrayList<>();\r\n+        for (MethodDescriptor model : methods) {\r\n+            Method method = model.getMethod();\r\n+            if (method.getName().equals(lookupMethodName) && method.getParameterTypes().length == args.size()) {\r\n+                sameSignatureMethods.add(method);\r\n+            }\r\n+        }\r\n+        return sameSignatureMethods;\r\n+    }\r\n+\r\n+    private List<Method> findMatchMethods(List<Method> methods, List<Object> args) {\r\n+        List<Method> matchMethod = new ArrayList<>();\r\n+        for (Method method : methods) {\r\n+            if (isMatch(method, args)) {\r\n+                matchMethod.add(method);\r\n+            }\r\n+        }\r\n+        return matchMethod;\r\n+    }\r\n+\r\n+    private static boolean isMatch(Method method, List<Object> args) {\r\n+        Class<?>[] types = method.getParameterTypes();\r\n+        if (types.length != args.size()) {\r\n+            return false;\r\n+        }\r\n+        for (int i = 0; i < types.length; i++) {\r\n+            Class<?> type = types[i];\r\n+            Object arg = args.get(i);\r\n+\r\n+            if (arg == null) {\r\n+                if (type.isPrimitive()) {\r\n+                    return false;\r\n+                }\r\n+\r\n+                // if the type is not primitive, we choose to believe what the invoker want is a null value\r\n+                continue;\r\n+            }\r\n+\r\n+            if (ReflectUtils.isPrimitive(arg.getClass())) {\r\n+                // allow string arg to enum type, @see PojoUtils.realize0()\r\n+                if (arg instanceof String && type.isEnum()) {\r\n+                    continue;\r\n+                }\r\n+\r\n+                if (!ReflectUtils.isPrimitive(type)) {\r\n+                    return false;\r\n+                }\r\n+\r\n+                if (!ReflectUtils.isCompatible(type, arg)) {\r\n+                    return false;\r\n+                }\r\n+            } else if (arg instanceof Map) {\r\n+                String name = (String) ((Map<?, ?>) arg).get(\"class\");\r\n+                if (StringUtils.isNotEmpty(name)) {\r\n+                    Class<?> cls = ReflectUtils.forName(name);\r\n+                    if (!type.isAssignableFrom(cls)) {\r\n+                        return false;\r\n+                    }\r\n+                } else {\r\n+                    return true;\r\n+                }\r\n+            } else if (arg instanceof Collection) {\r\n+                if (!type.isArray() && !type.isAssignableFrom(arg.getClass())) {\r\n+                    return false;\r\n+                }\r\n+            } else {\r\n+                if (!type.isAssignableFrom(arg.getClass())) {\r\n+                    return false;\r\n+                }\r\n+            }\r\n+        }\r\n+        return true;\r\n+    }\r\n+\r\n+    private void printSelectMessage(StringBuilder buf, List<Method> methods) {\r\n+        buf.append(\"Methods:\\r\\n\");\r\n+        for (int i = 0; i < methods.size(); i++) {\r\n+            Method method = methods.get(i);\r\n+            buf.append(i + 1).append(\". \").append(method.getName()).append(\"(\");\r\n+            Class<?>[] parameterTypes = method.getParameterTypes();\r\n+            for (int n = 0; n < parameterTypes.length; n++) {\r\n+                buf.append(parameterTypes[n].getSimpleName());\r\n+                if (n != parameterTypes.length - 1) {\r\n+                    buf.append(\",\");\r\n+                }\r\n+            }\r\n+            buf.append(\")\\r\\n\");\r\n+        }\r\n+        buf.append(\"Please use the select command to select the method you want to invoke. eg: select 1\");\r\n+    }\r\n+\r\n+    private boolean isInvokedSelectCommand(Channel channel) {\r\n+        if (channel.hasAttribute(SelectTelnetHandler.SELECT_KEY)) {\r\n+            channel.removeAttribute(SelectTelnetHandler.SELECT_KEY);\r\n+            return true;\r\n+        }\r\n+        return false;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/legacy/ListTelnetHandler.java", "source2": "org/apache/dubbo/qos/legacy/ListTelnetHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,166 +1,166 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.legacy;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.utils.ReflectUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.qos.command.util.ServiceCheckUtils;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.telnet.TelnetHandler;\n-import org.apache.dubbo.remoting.telnet.support.Help;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.model.ConsumerModel;\n-import org.apache.dubbo.rpc.model.MethodDescriptor;\n-import org.apache.dubbo.rpc.model.ProviderModel;\n-import org.apache.dubbo.rpc.model.ServiceRepository;\n-\n-import java.lang.reflect.Method;\n-import java.util.List;\n-\n-/**\n- * ListTelnetHandler handler list services and its methods details.\n- */\n-@Activate\n-@Help(parameter = \"[-l] [service]\", summary = \"List services and methods.\", detail = \"List services and methods.\")\n-public class ListTelnetHandler implements TelnetHandler {\n-\n-    private ServiceRepository serviceRepository = ApplicationModel.getServiceRepository();\n-\n-    @Override\n-    public String telnet(Channel channel, String message) {\n-        StringBuilder buf = new StringBuilder();\n-        String service = null;\n-        boolean detail = false;\n-        if (message.length() > 0) {\n-            String[] parts = message.split(\"\\\\s+\");\n-            for (String part : parts) {\n-                if (\"-l\".equals(part)) {\n-                    detail = true;\n-                } else {\n-                    if (!StringUtils.isEmpty(service)) {\n-                        return \"Invalid parameter \" + part;\n-                    }\n-                    service = part;\n-                }\n-            }\n-        } else {\n-            service = (String) channel.getAttribute(ChangeTelnetHandler.SERVICE_KEY);\n-            if (StringUtils.isNotEmpty(service)) {\n-                buf.append(\"Use default service \").append(service).append(\".\\r\\n\");\n-            }\n-        }\n-\n-        if (StringUtils.isEmpty(service)) {\n-            printAllServices(buf, detail);\n-        } else {\n-            printSpecifiedService(service, buf, detail);\n-\n-            if (buf.length() == 0) {\n-                buf.append(\"No such service: \").append(service);\n-            }\n-        }\n-        return buf.toString();\n-    }\n-\n-    private void printAllServices(StringBuilder buf, boolean detail) {\n-        printAllProvidedServices(buf, detail);\n-        printAllReferredServices(buf, detail);\n-    }\n-\n-    private void printAllProvidedServices(StringBuilder buf, boolean detail) {\n-        List<ProviderModel> providerModels = serviceRepository.getExportedServices();\n-        if (!providerModels.isEmpty()) {\n-            buf.append(\"PROVIDER:\\r\\n\");\n-        }\n-\n-        for (ProviderModel provider : providerModels) {\n-            buf.append(provider.getServiceKey());\n-            if (detail) {\n-                buf.append(\" -> \");\n-                buf.append(\" published: \");\n-                buf.append(ServiceCheckUtils.isRegistered(provider) ? \"Y\" : \"N\");\n-            }\n-            buf.append(\"\\r\\n\");\n-        }\n-    }\n-\n-    private void printAllReferredServices(StringBuilder buf, boolean detail) {\n-        List<ConsumerModel> consumerModels = serviceRepository.getReferredServices();\n-        if (!consumerModels.isEmpty()) {\n-            buf.append(\"CONSUMER:\\r\\n\");\n-        }\n-\n-        for (ConsumerModel consumer : consumerModels) {\n-            buf.append(consumer.getServiceKey());\n-            if (detail) {\n-                buf.append(\" -> \");\n-                buf.append(\" addresses: \");\n-                buf.append(ServiceCheckUtils.getConsumerAddressNum(consumer));\n-            }\n-            buf.append(\"\\r\\n\");\n-        }\n-    }\n-\n-    private void printSpecifiedService(String service, StringBuilder buf, boolean detail) {\n-        printSpecifiedProvidedService(service, buf, detail);\n-        printSpecifiedReferredService(service, buf, detail);\n-    }\n-\n-    private void printSpecifiedProvidedService(String service, StringBuilder buf, boolean detail) {\n-        for (ProviderModel provider : ApplicationModel.allProviderModels()) {\n-            if (isProviderMatched(service,provider)) {\n-                buf.append(provider.getServiceKey()).append(\" (as provider):\\r\\n\");\n-                for (MethodDescriptor method : provider.getAllMethods()) {\n-                    printMethod(method.getMethod(), buf, detail);\n-                }\n-            }\n-        }\n-    }\n-\n-    private void printSpecifiedReferredService(String service, StringBuilder buf, boolean detail) {\n-        for (ConsumerModel consumer : ApplicationModel.allConsumerModels()) {\n-            if (isConsumerMatcher(service,consumer)) {\n-                buf.append(consumer.getServiceKey()).append(\" (as consumer):\\r\\n\");\n-                for (MethodDescriptor method : consumer.getAllMethods()) {\n-                    printMethod(method.getMethod(), buf, detail);\n-                }\n-            }\n-        }\n-    }\n-\n-    private void printMethod(Method method, StringBuilder buf, boolean detail) {\n-        if (detail) {\n-            buf.append('\\t').append(ReflectUtils.getName(method));\n-        } else {\n-            buf.append('\\t').append(method.getName());\n-        }\n-        buf.append(\"\\r\\n\");\n-    }\n-\n-    private boolean isProviderMatched(String service, ProviderModel provider) {\n-        return service.equalsIgnoreCase(provider.getServiceKey())\n-                || service.equalsIgnoreCase(provider.getServiceInterfaceClass().getName())\n-                || service.equalsIgnoreCase(provider.getServiceInterfaceClass().getSimpleName());\n-    }\n-\n-    private boolean isConsumerMatcher(String service,ConsumerModel consumer) {\n-        return service.equalsIgnoreCase(consumer.getServiceKey())\n-                || service.equalsIgnoreCase(consumer.getServiceInterfaceClass().getName())\n-                || service.equalsIgnoreCase(consumer.getServiceInterfaceClass().getSimpleName());\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.legacy;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.utils.ReflectUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.qos.command.util.ServiceCheckUtils;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.telnet.TelnetHandler;\r\n+import org.apache.dubbo.remoting.telnet.support.Help;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.model.ConsumerModel;\r\n+import org.apache.dubbo.rpc.model.MethodDescriptor;\r\n+import org.apache.dubbo.rpc.model.ProviderModel;\r\n+import org.apache.dubbo.rpc.model.ServiceRepository;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * ListTelnetHandler handler list services and its methods details.\r\n+ */\r\n+@Activate\r\n+@Help(parameter = \"[-l] [service]\", summary = \"List services and methods.\", detail = \"List services and methods.\")\r\n+public class ListTelnetHandler implements TelnetHandler {\r\n+\r\n+    private ServiceRepository serviceRepository = ApplicationModel.getServiceRepository();\r\n+\r\n+    @Override\r\n+    public String telnet(Channel channel, String message) {\r\n+        StringBuilder buf = new StringBuilder();\r\n+        String service = null;\r\n+        boolean detail = false;\r\n+        if (message.length() > 0) {\r\n+            String[] parts = message.split(\"\\\\s+\");\r\n+            for (String part : parts) {\r\n+                if (\"-l\".equals(part)) {\r\n+                    detail = true;\r\n+                } else {\r\n+                    if (!StringUtils.isEmpty(service)) {\r\n+                        return \"Invalid parameter \" + part;\r\n+                    }\r\n+                    service = part;\r\n+                }\r\n+            }\r\n+        } else {\r\n+            service = (String) channel.getAttribute(ChangeTelnetHandler.SERVICE_KEY);\r\n+            if (StringUtils.isNotEmpty(service)) {\r\n+                buf.append(\"Use default service \").append(service).append(\".\\r\\n\");\r\n+            }\r\n+        }\r\n+\r\n+        if (StringUtils.isEmpty(service)) {\r\n+            printAllServices(buf, detail);\r\n+        } else {\r\n+            printSpecifiedService(service, buf, detail);\r\n+\r\n+            if (buf.length() == 0) {\r\n+                buf.append(\"No such service: \").append(service);\r\n+            }\r\n+        }\r\n+        return buf.toString();\r\n+    }\r\n+\r\n+    private void printAllServices(StringBuilder buf, boolean detail) {\r\n+        printAllProvidedServices(buf, detail);\r\n+        printAllReferredServices(buf, detail);\r\n+    }\r\n+\r\n+    private void printAllProvidedServices(StringBuilder buf, boolean detail) {\r\n+        List<ProviderModel> providerModels = serviceRepository.getExportedServices();\r\n+        if (!providerModels.isEmpty()) {\r\n+            buf.append(\"PROVIDER:\\r\\n\");\r\n+        }\r\n+\r\n+        for (ProviderModel provider : providerModels) {\r\n+            buf.append(provider.getServiceKey());\r\n+            if (detail) {\r\n+                buf.append(\" -> \");\r\n+                buf.append(\" published: \");\r\n+                buf.append(ServiceCheckUtils.isRegistered(provider) ? \"Y\" : \"N\");\r\n+            }\r\n+            buf.append(\"\\r\\n\");\r\n+        }\r\n+    }\r\n+\r\n+    private void printAllReferredServices(StringBuilder buf, boolean detail) {\r\n+        List<ConsumerModel> consumerModels = serviceRepository.getReferredServices();\r\n+        if (!consumerModels.isEmpty()) {\r\n+            buf.append(\"CONSUMER:\\r\\n\");\r\n+        }\r\n+\r\n+        for (ConsumerModel consumer : consumerModels) {\r\n+            buf.append(consumer.getServiceKey());\r\n+            if (detail) {\r\n+                buf.append(\" -> \");\r\n+                buf.append(\" addresses: \");\r\n+                buf.append(ServiceCheckUtils.getConsumerAddressNum(consumer));\r\n+            }\r\n+            buf.append(\"\\r\\n\");\r\n+        }\r\n+    }\r\n+\r\n+    private void printSpecifiedService(String service, StringBuilder buf, boolean detail) {\r\n+        printSpecifiedProvidedService(service, buf, detail);\r\n+        printSpecifiedReferredService(service, buf, detail);\r\n+    }\r\n+\r\n+    private void printSpecifiedProvidedService(String service, StringBuilder buf, boolean detail) {\r\n+        for (ProviderModel provider : ApplicationModel.allProviderModels()) {\r\n+            if (isProviderMatched(service,provider)) {\r\n+                buf.append(provider.getServiceKey()).append(\" (as provider):\\r\\n\");\r\n+                for (MethodDescriptor method : provider.getAllMethods()) {\r\n+                    printMethod(method.getMethod(), buf, detail);\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private void printSpecifiedReferredService(String service, StringBuilder buf, boolean detail) {\r\n+        for (ConsumerModel consumer : ApplicationModel.allConsumerModels()) {\r\n+            if (isConsumerMatcher(service,consumer)) {\r\n+                buf.append(consumer.getServiceKey()).append(\" (as consumer):\\r\\n\");\r\n+                for (MethodDescriptor method : consumer.getAllMethods()) {\r\n+                    printMethod(method.getMethod(), buf, detail);\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private void printMethod(Method method, StringBuilder buf, boolean detail) {\r\n+        if (detail) {\r\n+            buf.append('\\t').append(ReflectUtils.getName(method));\r\n+        } else {\r\n+            buf.append('\\t').append(method.getName());\r\n+        }\r\n+        buf.append(\"\\r\\n\");\r\n+    }\r\n+\r\n+    private boolean isProviderMatched(String service, ProviderModel provider) {\r\n+        return service.equalsIgnoreCase(provider.getServiceKey())\r\n+                || service.equalsIgnoreCase(provider.getServiceInterfaceClass().getName())\r\n+                || service.equalsIgnoreCase(provider.getServiceInterfaceClass().getSimpleName());\r\n+    }\r\n+\r\n+    private boolean isConsumerMatcher(String service,ConsumerModel consumer) {\r\n+        return service.equalsIgnoreCase(consumer.getServiceKey())\r\n+                || service.equalsIgnoreCase(consumer.getServiceInterfaceClass().getName())\r\n+                || service.equalsIgnoreCase(consumer.getServiceInterfaceClass().getSimpleName());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/legacy/LogTelnetHandler.java", "source2": "org/apache/dubbo/qos/legacy/LogTelnetHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,91 +1,91 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.legacy;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.logger.Level;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.telnet.TelnetHandler;\n-import org.apache.dubbo.remoting.telnet.support.Help;\n-\n-import java.io.File;\n-import java.io.FileInputStream;\n-import java.nio.ByteBuffer;\n-import java.nio.channels.FileChannel;\n-import java.text.SimpleDateFormat;\n-import java.util.Date;\n-\n-/**\n- * LogTelnetHandler\n- */\n-@Activate\n-@Help(parameter = \"level\", summary = \"Change log level or show log \", detail = \"Change log level or show log\")\n-public class LogTelnetHandler implements TelnetHandler {\n-\n-    public static final String SERVICE_KEY = \"telnet.log\";\n-\n-    @Override\n-    public String telnet(Channel channel, String message) {\n-        long size;\n-        File file = LoggerFactory.getFile();\n-        StringBuilder buf = new StringBuilder();\n-        if (message == null || message.trim().length() == 0) {\n-            buf.append(\"EXAMPLE: log error / log 100\");\n-        } else {\n-            String[] str = message.split(\" \");\n-            if (!StringUtils.isInteger(str[0])) {\n-                LoggerFactory.setLevel(Level.valueOf(message.toUpperCase()));\n-            } else {\n-                int showLogLength = Integer.parseInt(str[0]);\n-\n-                if (file != null && file.exists()) {\n-                    try(FileInputStream fis = new FileInputStream(file)) {\n-                        FileChannel filechannel = fis.getChannel();\n-                        size = filechannel.size();\n-                        ByteBuffer bb;\n-                        if (size <= showLogLength) {\n-                            bb = ByteBuffer.allocate((int) size);\n-                            filechannel.read(bb, 0);\n-                        } else {\n-                            int pos = (int) (size - showLogLength);\n-                            bb = ByteBuffer.allocate(showLogLength);\n-                            filechannel.read(bb, pos);\n-                        }\n-                        bb.flip();\n-                        String content = new String(bb.array()).replace(\"<\", \"&lt;\")\n-                                .replace(\">\", \"&gt;\").replace(\"\\n\", \"<br/><br/>\");\n-                        buf.append(\"\\r\\ncontent:\").append(content);\n-\n-                        buf.append(\"\\r\\nmodified:\").append(new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\")\n-                                .format(new Date(file.lastModified())));\n-                        buf.append(\"\\r\\nsize:\").append(size).append(\"\\r\\n\");\n-                    } catch (Exception e) {\n-                        buf.append(e.getMessage());\n-                    }\n-                } else {\n-                    buf.append(\"\\r\\nMESSAGE: log file not exists or log appender is console .\");\n-                }\n-            }\n-        }\n-        buf.append(\"\\r\\nCURRENT LOG LEVEL:\").append(LoggerFactory.getLevel()).append(\"\\r\\nCURRENT LOG APPENDER:\")\n-                .append(file == null ? \"console\" : file.getAbsolutePath());\n-        return buf.toString();\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.legacy;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.logger.Level;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.telnet.TelnetHandler;\r\n+import org.apache.dubbo.remoting.telnet.support.Help;\r\n+\r\n+import java.io.File;\r\n+import java.io.FileInputStream;\r\n+import java.nio.ByteBuffer;\r\n+import java.nio.channels.FileChannel;\r\n+import java.text.SimpleDateFormat;\r\n+import java.util.Date;\r\n+\r\n+/**\r\n+ * LogTelnetHandler\r\n+ */\r\n+@Activate\r\n+@Help(parameter = \"level\", summary = \"Change log level or show log \", detail = \"Change log level or show log\")\r\n+public class LogTelnetHandler implements TelnetHandler {\r\n+\r\n+    public static final String SERVICE_KEY = \"telnet.log\";\r\n+\r\n+    @Override\r\n+    public String telnet(Channel channel, String message) {\r\n+        long size;\r\n+        File file = LoggerFactory.getFile();\r\n+        StringBuilder buf = new StringBuilder();\r\n+        if (message == null || message.trim().length() == 0) {\r\n+            buf.append(\"EXAMPLE: log error / log 100\");\r\n+        } else {\r\n+            String[] str = message.split(\" \");\r\n+            if (!StringUtils.isInteger(str[0])) {\r\n+                LoggerFactory.setLevel(Level.valueOf(message.toUpperCase()));\r\n+            } else {\r\n+                int showLogLength = Integer.parseInt(str[0]);\r\n+\r\n+                if (file != null && file.exists()) {\r\n+                    try(FileInputStream fis = new FileInputStream(file)) {\r\n+                        FileChannel filechannel = fis.getChannel();\r\n+                        size = filechannel.size();\r\n+                        ByteBuffer bb;\r\n+                        if (size <= showLogLength) {\r\n+                            bb = ByteBuffer.allocate((int) size);\r\n+                            filechannel.read(bb, 0);\r\n+                        } else {\r\n+                            int pos = (int) (size - showLogLength);\r\n+                            bb = ByteBuffer.allocate(showLogLength);\r\n+                            filechannel.read(bb, pos);\r\n+                        }\r\n+                        bb.flip();\r\n+                        String content = new String(bb.array()).replace(\"<\", \"&lt;\")\r\n+                                .replace(\">\", \"&gt;\").replace(\"\\n\", \"<br/><br/>\");\r\n+                        buf.append(\"\\r\\ncontent:\").append(content);\r\n+\r\n+                        buf.append(\"\\r\\nmodified:\").append(new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\")\r\n+                                .format(new Date(file.lastModified())));\r\n+                        buf.append(\"\\r\\nsize:\").append(size).append(\"\\r\\n\");\r\n+                    } catch (Exception e) {\r\n+                        buf.append(e.getMessage());\r\n+                    }\r\n+                } else {\r\n+                    buf.append(\"\\r\\nMESSAGE: log file not exists or log appender is console .\");\r\n+                }\r\n+            }\r\n+        }\r\n+        buf.append(\"\\r\\nCURRENT LOG LEVEL:\").append(LoggerFactory.getLevel()).append(\"\\r\\nCURRENT LOG APPENDER:\")\r\n+                .append(file == null ? \"console\" : file.getAbsolutePath());\r\n+        return buf.toString();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/legacy/PortTelnetHandler.java", "source2": "org/apache/dubbo/qos/legacy/PortTelnetHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,96 +1,96 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.legacy;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.exchange.ExchangeChannel;\n-import org.apache.dubbo.remoting.exchange.ExchangeServer;\n-import org.apache.dubbo.remoting.telnet.TelnetHandler;\n-import org.apache.dubbo.remoting.telnet.support.Help;\n-import org.apache.dubbo.rpc.ProtocolServer;\n-import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol;\n-\n-import java.util.Collection;\n-\n-/**\n- * ServerTelnetHandler\n- */\n-@Activate\n-@Help(parameter = \"[-l] [port]\", summary = \"Print server ports and connections.\", detail = \"Print server ports and connections.\")\n-public class PortTelnetHandler implements TelnetHandler {\n-\n-    @Override\n-    public String telnet(Channel channel, String message) {\n-        StringBuilder buf = new StringBuilder();\n-        String port = null;\n-        boolean detail = false;\n-        if (message.length() > 0) {\n-            String[] parts = message.split(\"\\\\s+\");\n-            for (String part : parts) {\n-                if (\"-l\".equals(part)) {\n-                    detail = true;\n-                } else {\n-                    if (!StringUtils.isInteger(part)) {\n-                        return \"Illegal port \" + part + \", must be integer.\";\n-                    }\n-                    port = part;\n-                }\n-            }\n-        }\n-        if (port == null || port.length() == 0) {\n-            for (ProtocolServer server : DubboProtocol.getDubboProtocol().getServers()) {\n-                if (buf.length() > 0) {\n-                    buf.append(\"\\r\\n\");\n-                }\n-                if (detail) {\n-                    buf.append(server.getUrl().getProtocol()).append(\"://\").append(server.getUrl().getAddress());\n-                } else {\n-                    buf.append(server.getUrl().getPort());\n-                }\n-            }\n-        } else {\n-            int p = Integer.parseInt(port);\n-            ProtocolServer protocolServer = null;\n-            for (ProtocolServer s : DubboProtocol.getDubboProtocol().getServers()) {\n-                if (p == s.getUrl().getPort()) {\n-                    protocolServer = s;\n-                    break;\n-                }\n-            }\n-            if (protocolServer != null) {\n-                ExchangeServer server = (ExchangeServer) protocolServer.getRemotingServer();\n-                Collection<ExchangeChannel> channels = server.getExchangeChannels();\n-                for (ExchangeChannel c : channels) {\n-                    if (buf.length() > 0) {\n-                        buf.append(\"\\r\\n\");\n-                    }\n-                    if (detail) {\n-                        buf.append(c.getRemoteAddress()).append(\" -> \").append(c.getLocalAddress());\n-                    } else {\n-                        buf.append(c.getRemoteAddress());\n-                    }\n-                }\n-            } else {\n-                buf.append(\"No such port \").append(port);\n-            }\n-        }\n-        return buf.toString();\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.legacy;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.exchange.ExchangeChannel;\r\n+import org.apache.dubbo.remoting.exchange.ExchangeServer;\r\n+import org.apache.dubbo.remoting.telnet.TelnetHandler;\r\n+import org.apache.dubbo.remoting.telnet.support.Help;\r\n+import org.apache.dubbo.rpc.ProtocolServer;\r\n+import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol;\r\n+\r\n+import java.util.Collection;\r\n+\r\n+/**\r\n+ * ServerTelnetHandler\r\n+ */\r\n+@Activate\r\n+@Help(parameter = \"[-l] [port]\", summary = \"Print server ports and connections.\", detail = \"Print server ports and connections.\")\r\n+public class PortTelnetHandler implements TelnetHandler {\r\n+\r\n+    @Override\r\n+    public String telnet(Channel channel, String message) {\r\n+        StringBuilder buf = new StringBuilder();\r\n+        String port = null;\r\n+        boolean detail = false;\r\n+        if (message.length() > 0) {\r\n+            String[] parts = message.split(\"\\\\s+\");\r\n+            for (String part : parts) {\r\n+                if (\"-l\".equals(part)) {\r\n+                    detail = true;\r\n+                } else {\r\n+                    if (!StringUtils.isInteger(part)) {\r\n+                        return \"Illegal port \" + part + \", must be integer.\";\r\n+                    }\r\n+                    port = part;\r\n+                }\r\n+            }\r\n+        }\r\n+        if (port == null || port.length() == 0) {\r\n+            for (ProtocolServer server : DubboProtocol.getDubboProtocol().getServers()) {\r\n+                if (buf.length() > 0) {\r\n+                    buf.append(\"\\r\\n\");\r\n+                }\r\n+                if (detail) {\r\n+                    buf.append(server.getUrl().getProtocol()).append(\"://\").append(server.getUrl().getAddress());\r\n+                } else {\r\n+                    buf.append(server.getUrl().getPort());\r\n+                }\r\n+            }\r\n+        } else {\r\n+            int p = Integer.parseInt(port);\r\n+            ProtocolServer protocolServer = null;\r\n+            for (ProtocolServer s : DubboProtocol.getDubboProtocol().getServers()) {\r\n+                if (p == s.getUrl().getPort()) {\r\n+                    protocolServer = s;\r\n+                    break;\r\n+                }\r\n+            }\r\n+            if (protocolServer != null) {\r\n+                ExchangeServer server = (ExchangeServer) protocolServer.getRemotingServer();\r\n+                Collection<ExchangeChannel> channels = server.getExchangeChannels();\r\n+                for (ExchangeChannel c : channels) {\r\n+                    if (buf.length() > 0) {\r\n+                        buf.append(\"\\r\\n\");\r\n+                    }\r\n+                    if (detail) {\r\n+                        buf.append(c.getRemoteAddress()).append(\" -> \").append(c.getLocalAddress());\r\n+                    } else {\r\n+                        buf.append(c.getRemoteAddress());\r\n+                    }\r\n+                }\r\n+            } else {\r\n+                buf.append(\"No such port \").append(port);\r\n+            }\r\n+        }\r\n+        return buf.toString();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/legacy/SelectTelnetHandler.java", "source2": "org/apache/dubbo/qos/legacy/SelectTelnetHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,60 +1,60 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.legacy;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.utils.CollectionUtils;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.telnet.TelnetHandler;\n-import org.apache.dubbo.remoting.telnet.support.Help;\n-\n-import java.lang.reflect.Method;\n-import java.util.List;\n-\n-/**\n- * SelectTelnetHandler\n- */\n-@Activate\n-@Help(parameter = \"[index]\", summary = \"Select the index of the method you want to invoke.\",\n-        detail = \"Select the index of the method you want to invoke.\")\n-public class SelectTelnetHandler implements TelnetHandler {\n-    public static final String SELECT_METHOD_KEY = \"telnet.select.method\";\n-    public static final String SELECT_KEY = \"telnet.select\";\n-\n-    private InvokeTelnetHandler invokeTelnetHandler = new InvokeTelnetHandler();\n-\n-    @Override\n-    @SuppressWarnings(\"unchecked\")\n-    public String telnet(Channel channel, String message) {\n-        if (message == null || message.length() == 0) {\n-            return \"Please input the index of the method you want to invoke, eg: \\r\\n select 1\";\n-        }\n-        List<Method> methodList = (List<Method>) channel.getAttribute(InvokeTelnetHandler.INVOKE_METHOD_LIST_KEY);\n-        if (CollectionUtils.isEmpty(methodList)) {\n-            return \"Please use the invoke command first.\";\n-        }\n-        if (!StringUtils.isInteger(message) || Integer.parseInt(message) < 1 || Integer.parseInt(message) > methodList.size()) {\n-            return \"Illegal index ,please input select 1~\" + methodList.size();\n-        }\n-        Method method = methodList.get(Integer.parseInt(message) - 1);\n-        channel.setAttribute(SELECT_METHOD_KEY, method);\n-        channel.setAttribute(SELECT_KEY, Boolean.TRUE);\n-        String invokeMessage = (String) channel.getAttribute(InvokeTelnetHandler.INVOKE_MESSAGE_KEY);\n-        return invokeTelnetHandler.telnet(channel, invokeMessage);\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.legacy;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.utils.CollectionUtils;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.telnet.TelnetHandler;\r\n+import org.apache.dubbo.remoting.telnet.support.Help;\r\n+\r\n+import java.lang.reflect.Method;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * SelectTelnetHandler\r\n+ */\r\n+@Activate\r\n+@Help(parameter = \"[index]\", summary = \"Select the index of the method you want to invoke.\",\r\n+        detail = \"Select the index of the method you want to invoke.\")\r\n+public class SelectTelnetHandler implements TelnetHandler {\r\n+    public static final String SELECT_METHOD_KEY = \"telnet.select.method\";\r\n+    public static final String SELECT_KEY = \"telnet.select\";\r\n+\r\n+    private InvokeTelnetHandler invokeTelnetHandler = new InvokeTelnetHandler();\r\n+\r\n+    @Override\r\n+    @SuppressWarnings(\"unchecked\")\r\n+    public String telnet(Channel channel, String message) {\r\n+        if (message == null || message.length() == 0) {\r\n+            return \"Please input the index of the method you want to invoke, eg: \\r\\n select 1\";\r\n+        }\r\n+        List<Method> methodList = (List<Method>) channel.getAttribute(InvokeTelnetHandler.INVOKE_METHOD_LIST_KEY);\r\n+        if (CollectionUtils.isEmpty(methodList)) {\r\n+            return \"Please use the invoke command first.\";\r\n+        }\r\n+        if (!StringUtils.isInteger(message) || Integer.parseInt(message) < 1 || Integer.parseInt(message) > methodList.size()) {\r\n+            return \"Illegal index ,please input select 1~\" + methodList.size();\r\n+        }\r\n+        Method method = methodList.get(Integer.parseInt(message) - 1);\r\n+        channel.setAttribute(SELECT_METHOD_KEY, method);\r\n+        channel.setAttribute(SELECT_KEY, Boolean.TRUE);\r\n+        String invokeMessage = (String) channel.getAttribute(InvokeTelnetHandler.INVOKE_MESSAGE_KEY);\r\n+        return invokeTelnetHandler.telnet(channel, invokeMessage);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/legacy/ShutdownTelnetHandler.java", "source2": "org/apache/dubbo/qos/legacy/ShutdownTelnetHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,63 +1,63 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.legacy;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.config.DubboShutdownHook;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.RemotingException;\n-import org.apache.dubbo.remoting.telnet.TelnetHandler;\n-import org.apache.dubbo.remoting.telnet.support.Help;\n-\n-/**\n- * ShutdownTelnetHandler\n- */\n-@Activate\n-@Help(parameter = \"[-t <milliseconds>]\", summary = \"Shutdown Dubbo Application.\", detail = \"Shutdown Dubbo Application.\")\n-public class ShutdownTelnetHandler implements TelnetHandler {\n-    @Override\n-    public String telnet(Channel channel, String message) throws RemotingException {\n-\n-        int sleepMilliseconds = 0;\n-        if (StringUtils.isNotEmpty(message)) {\n-            String[] parameters = message.split(\"\\\\s+\");\n-            if (parameters.length == 2 && \"-t\".equals(parameters[0]) && StringUtils.isInteger(parameters[1])) {\n-                sleepMilliseconds = Integer.parseInt(parameters[1]);\n-            } else {\n-                return \"Invalid parameter,please input like shutdown -t 10000\";\n-            }\n-        }\n-        long start = System.currentTimeMillis();\n-        if (sleepMilliseconds > 0) {\n-            try {\n-                Thread.sleep(sleepMilliseconds);\n-            } catch (InterruptedException e) {\n-                return \"Failed to invoke shutdown command, cause: \" + e.getMessage();\n-            }\n-        }\n-        StringBuilder buf = new StringBuilder();\n-        DubboShutdownHook.getDubboShutdownHook().unregister();\n-        DubboShutdownHook.getDubboShutdownHook().doDestroy();\n-        long end = System.currentTimeMillis();\n-        buf.append(\"Application has shutdown successfully\");\n-        buf.append(\"\\r\\nelapsed: \");\n-        buf.append(end - start);\n-        buf.append(\" ms.\");\n-        return buf.toString();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.legacy;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.config.DubboShutdownHook;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.RemotingException;\r\n+import org.apache.dubbo.remoting.telnet.TelnetHandler;\r\n+import org.apache.dubbo.remoting.telnet.support.Help;\r\n+\r\n+/**\r\n+ * ShutdownTelnetHandler\r\n+ */\r\n+@Activate\r\n+@Help(parameter = \"[-t <milliseconds>]\", summary = \"Shutdown Dubbo Application.\", detail = \"Shutdown Dubbo Application.\")\r\n+public class ShutdownTelnetHandler implements TelnetHandler {\r\n+    @Override\r\n+    public String telnet(Channel channel, String message) throws RemotingException {\r\n+\r\n+        int sleepMilliseconds = 0;\r\n+        if (StringUtils.isNotEmpty(message)) {\r\n+            String[] parameters = message.split(\"\\\\s+\");\r\n+            if (parameters.length == 2 && \"-t\".equals(parameters[0]) && StringUtils.isInteger(parameters[1])) {\r\n+                sleepMilliseconds = Integer.parseInt(parameters[1]);\r\n+            } else {\r\n+                return \"Invalid parameter,please input like shutdown -t 10000\";\r\n+            }\r\n+        }\r\n+        long start = System.currentTimeMillis();\r\n+        if (sleepMilliseconds > 0) {\r\n+            try {\r\n+                Thread.sleep(sleepMilliseconds);\r\n+            } catch (InterruptedException e) {\r\n+                return \"Failed to invoke shutdown command, cause: \" + e.getMessage();\r\n+            }\r\n+        }\r\n+        StringBuilder buf = new StringBuilder();\r\n+        DubboShutdownHook.getDubboShutdownHook().unregister();\r\n+        DubboShutdownHook.getDubboShutdownHook().doDestroy();\r\n+        long end = System.currentTimeMillis();\r\n+        buf.append(\"Application has shutdown successfully\");\r\n+        buf.append(\"\\r\\nelapsed: \");\r\n+        buf.append(end - start);\r\n+        buf.append(\" ms.\");\r\n+        return buf.toString();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/legacy/TraceTelnetHandler.java", "source2": "org/apache/dubbo/qos/legacy/TraceTelnetHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,93 +1,93 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.legacy;\n-\n-import org.apache.dubbo.common.extension.Activate;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.remoting.Channel;\n-import org.apache.dubbo.remoting.telnet.TelnetHandler;\n-import org.apache.dubbo.remoting.telnet.support.Help;\n-import org.apache.dubbo.rpc.Exporter;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol;\n-import org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter;\n-\n-import java.lang.reflect.Method;\n-\n-/**\n- * TraceTelnetHandler\n- */\n-@Activate\n-@Help(parameter = \"[service] [method] [times]\", summary = \"Trace the service.\", detail = \"Trace the service.\")\n-public class TraceTelnetHandler implements TelnetHandler {\n-\n-    @Override\n-    public String telnet(Channel channel, String message) {\n-        String service = (String) channel.getAttribute(ChangeTelnetHandler.SERVICE_KEY);\n-        if ((service == null || service.length() == 0)\n-                && (message == null || message.length() == 0)) {\n-            return \"Please input service name, eg: \\r\\ntrace XxxService\\r\\ntrace XxxService xxxMethod\\r\\ntrace XxxService xxxMethod 10\\r\\nor \\\"cd XxxService\\\" firstly.\";\n-        }\n-        String[] parts = message.split(\"\\\\s+\");\n-        String method;\n-        String times;\n-        // message like : XxxService , XxxService 10 , XxxService xxxMethod , XxxService xxxMethod 10\n-        if (StringUtils.isEmpty(service)) {\n-            service = parts.length > 0 ? parts[0] : null;\n-            method = parts.length > 1 ? parts[1] : null;\n-            times = parts.length > 2 ? parts[2] : \"1\";\n-        } else {  //message like : xxxMethod, xxxMethod 10\n-            method = parts.length > 0 ? parts[0] : null;\n-            times = parts.length > 1 ? parts[1] : \"1\";\n-        }\n-        if (StringUtils.isInteger(method)) {\n-            times = method;\n-            method = null;\n-        }\n-        if (!StringUtils.isInteger(times)) {\n-            return \"Illegal times \" + times + \", must be integer.\";\n-        }\n-        Invoker<?> invoker = null;\n-        for (Exporter<?> exporter : DubboProtocol.getDubboProtocol().getExporters()) {\n-            if (service.equals(exporter.getInvoker().getInterface().getSimpleName())\n-                    || service.equals(exporter.getInvoker().getInterface().getName())\n-                    || service.equals(exporter.getInvoker().getUrl().getPath())) {\n-                invoker = exporter.getInvoker();\n-                break;\n-            }\n-        }\n-        if (invoker != null) {\n-            if (method != null && method.length() > 0) {\n-                boolean found = false;\n-                for (Method m : invoker.getInterface().getMethods()) {\n-                    if (m.getName().equals(method)) {\n-                        found = true;\n-                        break;\n-                    }\n-                }\n-                if (!found) {\n-                    return \"No such method \" + method + \" in class \" + invoker.getInterface().getName();\n-                }\n-            }\n-            TraceFilter.addTracer(invoker.getInterface(), method, channel, Integer.parseInt(times));\n-        } else {\n-            return \"No such service \" + service;\n-        }\n-        return null;\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.legacy;\r\n+\r\n+import org.apache.dubbo.common.extension.Activate;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.remoting.Channel;\r\n+import org.apache.dubbo.remoting.telnet.TelnetHandler;\r\n+import org.apache.dubbo.remoting.telnet.support.Help;\r\n+import org.apache.dubbo.rpc.Exporter;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol;\r\n+import org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter;\r\n+\r\n+import java.lang.reflect.Method;\r\n+\r\n+/**\r\n+ * TraceTelnetHandler\r\n+ */\r\n+@Activate\r\n+@Help(parameter = \"[service] [method] [times]\", summary = \"Trace the service.\", detail = \"Trace the service.\")\r\n+public class TraceTelnetHandler implements TelnetHandler {\r\n+\r\n+    @Override\r\n+    public String telnet(Channel channel, String message) {\r\n+        String service = (String) channel.getAttribute(ChangeTelnetHandler.SERVICE_KEY);\r\n+        if ((service == null || service.length() == 0)\r\n+                && (message == null || message.length() == 0)) {\r\n+            return \"Please input service name, eg: \\r\\ntrace XxxService\\r\\ntrace XxxService xxxMethod\\r\\ntrace XxxService xxxMethod 10\\r\\nor \\\"cd XxxService\\\" firstly.\";\r\n+        }\r\n+        String[] parts = message.split(\"\\\\s+\");\r\n+        String method;\r\n+        String times;\r\n+        // message like : XxxService , XxxService 10 , XxxService xxxMethod , XxxService xxxMethod 10\r\n+        if (StringUtils.isEmpty(service)) {\r\n+            service = parts.length > 0 ? parts[0] : null;\r\n+            method = parts.length > 1 ? parts[1] : null;\r\n+            times = parts.length > 2 ? parts[2] : \"1\";\r\n+        } else {  //message like : xxxMethod, xxxMethod 10\r\n+            method = parts.length > 0 ? parts[0] : null;\r\n+            times = parts.length > 1 ? parts[1] : \"1\";\r\n+        }\r\n+        if (StringUtils.isInteger(method)) {\r\n+            times = method;\r\n+            method = null;\r\n+        }\r\n+        if (!StringUtils.isInteger(times)) {\r\n+            return \"Illegal times \" + times + \", must be integer.\";\r\n+        }\r\n+        Invoker<?> invoker = null;\r\n+        for (Exporter<?> exporter : DubboProtocol.getDubboProtocol().getExporters()) {\r\n+            if (service.equals(exporter.getInvoker().getInterface().getSimpleName())\r\n+                    || service.equals(exporter.getInvoker().getInterface().getName())\r\n+                    || service.equals(exporter.getInvoker().getUrl().getPath())) {\r\n+                invoker = exporter.getInvoker();\r\n+                break;\r\n+            }\r\n+        }\r\n+        if (invoker != null) {\r\n+            if (method != null && method.length() > 0) {\r\n+                boolean found = false;\r\n+                for (Method m : invoker.getInterface().getMethods()) {\r\n+                    if (m.getName().equals(method)) {\r\n+                        found = true;\r\n+                        break;\r\n+                    }\r\n+                }\r\n+                if (!found) {\r\n+                    return \"No such method \" + method + \" in class \" + invoker.getInterface().getName();\r\n+                }\r\n+            }\r\n+            TraceFilter.addTracer(invoker.getInterface(), method, channel, Integer.parseInt(times));\r\n+        } else {\r\n+            return \"No such service \" + service;\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/protocol/QosProtocolWrapper.java", "source2": "org/apache/dubbo/qos/protocol/QosProtocolWrapper.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,123 +1,123 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.protocol;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.UrlUtils;\n-import org.apache.dubbo.qos.common.QosConstants;\n-import org.apache.dubbo.qos.server.Server;\n-import org.apache.dubbo.rpc.Exporter;\n-import org.apache.dubbo.rpc.Invoker;\n-import org.apache.dubbo.rpc.Protocol;\n-import org.apache.dubbo.rpc.ProtocolServer;\n-import org.apache.dubbo.rpc.RpcException;\n-\n-import java.util.List;\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-import static org.apache.dubbo.common.constants.QosConstants.ACCEPT_FOREIGN_IP;\n-import static org.apache.dubbo.common.constants.QosConstants.QOS_ENABLE;\n-import static org.apache.dubbo.common.constants.QosConstants.QOS_HOST;\n-import static org.apache.dubbo.common.constants.QosConstants.QOS_PORT;\n-\n-\n-public class QosProtocolWrapper implements Protocol {\n-\n-    private final Logger logger = LoggerFactory.getLogger(QosProtocolWrapper.class);\n-\n-    private static AtomicBoolean hasStarted = new AtomicBoolean(false);\n-\n-    private Protocol protocol;\n-\n-    public QosProtocolWrapper(Protocol protocol) {\n-        if (protocol == null) {\n-            throw new IllegalArgumentException(\"protocol == null\");\n-        }\n-        this.protocol = protocol;\n-    }\n-\n-    @Override\n-    public int getDefaultPort() {\n-        return protocol.getDefaultPort();\n-    }\n-\n-    @Override\n-    public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException {\n-        if (UrlUtils.isRegistry(invoker.getUrl())) {\n-            startQosServer(invoker.getUrl());\n-            return protocol.export(invoker);\n-        }\n-        return protocol.export(invoker);\n-    }\n-\n-    @Override\n-    public <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException {\n-        if (UrlUtils.isRegistry(url)) {\n-            startQosServer(url);\n-            return protocol.refer(type, url);\n-        }\n-        return protocol.refer(type, url);\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        protocol.destroy();\n-        stopServer();\n-    }\n-\n-    @Override\n-    public List<ProtocolServer> getServers() {\n-        return protocol.getServers();\n-    }\n-\n-    private void startQosServer(URL url) {\n-        try {\n-            if (!hasStarted.compareAndSet(false, true)) {\n-                return;\n-            }\n-\n-            boolean qosEnable = url.getParameter(QOS_ENABLE, true);\n-            if (!qosEnable) {\n-                logger.info(\"qos won't be started because it is disabled. \" +\n-                        \"Please check dubbo.application.qos.enable is configured either in system property, \" +\n-                        \"dubbo.properties or XML/spring-boot configuration.\");\n-                return;\n-            }\n-\n-            String host = url.getParameter(QOS_HOST);\n-            int port = url.getParameter(QOS_PORT, QosConstants.DEFAULT_PORT);\n-            boolean acceptForeignIp = Boolean.parseBoolean(url.getParameter(ACCEPT_FOREIGN_IP, \"false\"));\n-            Server server = Server.getInstance();\n-            server.setHost(host);\n-            server.setPort(port);\n-            server.setAcceptForeignIp(acceptForeignIp);\n-            server.start();\n-\n-        } catch (Throwable throwable) {\n-            logger.warn(\"Fail to start qos server: \", throwable);\n-        }\n-    }\n-\n-    /*package*/ void stopServer() {\n-        if (hasStarted.compareAndSet(true, false)) {\n-            Server server = Server.getInstance();\n-            server.stop();\n-        }\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.protocol;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.UrlUtils;\r\n+import org.apache.dubbo.qos.common.QosConstants;\r\n+import org.apache.dubbo.qos.server.Server;\r\n+import org.apache.dubbo.rpc.Exporter;\r\n+import org.apache.dubbo.rpc.Invoker;\r\n+import org.apache.dubbo.rpc.Protocol;\r\n+import org.apache.dubbo.rpc.ProtocolServer;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+\r\n+import java.util.List;\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+import static org.apache.dubbo.common.constants.QosConstants.ACCEPT_FOREIGN_IP;\r\n+import static org.apache.dubbo.common.constants.QosConstants.QOS_ENABLE;\r\n+import static org.apache.dubbo.common.constants.QosConstants.QOS_HOST;\r\n+import static org.apache.dubbo.common.constants.QosConstants.QOS_PORT;\r\n+\r\n+\r\n+public class QosProtocolWrapper implements Protocol {\r\n+\r\n+    private final Logger logger = LoggerFactory.getLogger(QosProtocolWrapper.class);\r\n+\r\n+    private static AtomicBoolean hasStarted = new AtomicBoolean(false);\r\n+\r\n+    private Protocol protocol;\r\n+\r\n+    public QosProtocolWrapper(Protocol protocol) {\r\n+        if (protocol == null) {\r\n+            throw new IllegalArgumentException(\"protocol == null\");\r\n+        }\r\n+        this.protocol = protocol;\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getDefaultPort() {\r\n+        return protocol.getDefaultPort();\r\n+    }\r\n+\r\n+    @Override\r\n+    public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException {\r\n+        if (UrlUtils.isRegistry(invoker.getUrl())) {\r\n+            startQosServer(invoker.getUrl());\r\n+            return protocol.export(invoker);\r\n+        }\r\n+        return protocol.export(invoker);\r\n+    }\r\n+\r\n+    @Override\r\n+    public <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException {\r\n+        if (UrlUtils.isRegistry(url)) {\r\n+            startQosServer(url);\r\n+            return protocol.refer(type, url);\r\n+        }\r\n+        return protocol.refer(type, url);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        protocol.destroy();\r\n+        stopServer();\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<ProtocolServer> getServers() {\r\n+        return protocol.getServers();\r\n+    }\r\n+\r\n+    private void startQosServer(URL url) {\r\n+        try {\r\n+            if (!hasStarted.compareAndSet(false, true)) {\r\n+                return;\r\n+            }\r\n+\r\n+            boolean qosEnable = url.getParameter(QOS_ENABLE, true);\r\n+            if (!qosEnable) {\r\n+                logger.info(\"qos won't be started because it is disabled. \" +\r\n+                        \"Please check dubbo.application.qos.enable is configured either in system property, \" +\r\n+                        \"dubbo.properties or XML/spring-boot configuration.\");\r\n+                return;\r\n+            }\r\n+\r\n+            String host = url.getParameter(QOS_HOST);\r\n+            int port = url.getParameter(QOS_PORT, QosConstants.DEFAULT_PORT);\r\n+            boolean acceptForeignIp = Boolean.parseBoolean(url.getParameter(ACCEPT_FOREIGN_IP, \"false\"));\r\n+            Server server = Server.getInstance();\r\n+            server.setHost(host);\r\n+            server.setPort(port);\r\n+            server.setAcceptForeignIp(acceptForeignIp);\r\n+            server.start();\r\n+\r\n+        } catch (Throwable throwable) {\r\n+            logger.warn(\"Fail to start qos server: \", throwable);\r\n+        }\r\n+    }\r\n+\r\n+    /*package*/ void stopServer() {\r\n+        if (hasStarted.compareAndSet(true, false)) {\r\n+            Server server = Server.getInstance();\r\n+            server.stop();\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/server/DubboLogo.java", "source2": "org/apache/dubbo/qos/server/DubboLogo.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,25 +1,25 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.server;\n-\n-public class DubboLogo {\n-    public static final String DUBBO =\n-                    \"   ___   __  __ ___   ___   ____     \" + System.lineSeparator() +\n-                    \"  / _ \\\\ / / / // _ ) / _ ) / __ \\\\  \" + System.lineSeparator() +\n-                    \" / // // /_/ // _  |/ _  |/ /_/ /    \" + System.lineSeparator() +\n-                    \"/____/ \\\\____//____//____/ \\\\____/   \" + System.lineSeparator();\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.server;\r\n+\r\n+public class DubboLogo {\r\n+    public static final String DUBBO =\r\n+                    \"   ___   __  __ ___   ___   ____     \" + System.lineSeparator() +\r\n+                    \"  / _ \\\\ / / / // _ ) / _ ) / __ \\\\  \" + System.lineSeparator() +\r\n+                    \" / // // /_/ // _  |/ _  |/ /_/ /    \" + System.lineSeparator() +\r\n+                    \"/____/ \\\\____//____//____/ \\\\____/   \" + System.lineSeparator();\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/server/Server.java", "source2": "org/apache/dubbo/qos/server/Server.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,156 +1,156 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.server;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.qos.server.handler.QosProcessHandler;\n-\n-import io.netty.bootstrap.ServerBootstrap;\n-import io.netty.channel.Channel;\n-import io.netty.channel.ChannelInitializer;\n-import io.netty.channel.ChannelOption;\n-import io.netty.channel.EventLoopGroup;\n-import io.netty.channel.nio.NioEventLoopGroup;\n-import io.netty.channel.socket.nio.NioServerSocketChannel;\n-import io.netty.util.concurrent.DefaultThreadFactory;\n-\n-import java.util.concurrent.atomic.AtomicBoolean;\n-\n-/**\n- * A server serves for both telnet access and http access\n- * <ul>\n- * <li>static initialize server</li>\n- * <li>start server and bind port</li>\n- * <li>close server</li>\n- * </ul>\n- */\n-public class Server {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(Server.class);\n-    private static final Server INSTANCE = new Server();\n-\n-    public static final Server getInstance() {\n-        return INSTANCE;\n-    }\n-\n-    private String host;\n-\n-    private int port;\n-\n-    private boolean acceptForeignIp = true;\n-\n-    private EventLoopGroup boss;\n-\n-    private EventLoopGroup worker;\n-\n-    private Server() {\n-        this.welcome = DubboLogo.DUBBO;\n-    }\n-\n-    private String welcome;\n-\n-    private AtomicBoolean started = new AtomicBoolean();\n-\n-    /**\n-     * welcome message\n-     */\n-    public void setWelcome(String welcome) {\n-        this.welcome = welcome;\n-    }\n-\n-    public int getPort() {\n-        return port;\n-    }\n-\n-    /**\n-     * start server, bind port\n-     */\n-    public void start() throws Throwable {\n-        if (!started.compareAndSet(false, true)) {\n-            return;\n-        }\n-        boss = new NioEventLoopGroup(1, new DefaultThreadFactory(\"qos-boss\", true));\n-        worker = new NioEventLoopGroup(0, new DefaultThreadFactory(\"qos-worker\", true));\n-        ServerBootstrap serverBootstrap = new ServerBootstrap();\n-        serverBootstrap.group(boss, worker);\n-        serverBootstrap.channel(NioServerSocketChannel.class);\n-        serverBootstrap.option(ChannelOption.SO_REUSEADDR, true);\n-        serverBootstrap.childOption(ChannelOption.TCP_NODELAY, true);\n-        serverBootstrap.childHandler(new ChannelInitializer<Channel>() {\n-\n-            @Override\n-            protected void initChannel(Channel ch) throws Exception {\n-                ch.pipeline().addLast(new QosProcessHandler(welcome, acceptForeignIp));\n-            }\n-        });\n-        try {\n-            if (StringUtils.isBlank(host)) {\n-                serverBootstrap.bind(port).sync();\n-            } else {\n-                serverBootstrap.bind(host, port).sync();\n-            }\n-\n-            logger.info(\"qos-server bind localhost:\" + port);\n-        } catch (Throwable throwable) {\n-            logger.error(\"qos-server can not bind localhost:\" + port, throwable);\n-            throw throwable;\n-        }\n-    }\n-\n-    /**\n-     * close server\n-     */\n-    public void stop() {\n-        logger.info(\"qos-server stopped.\");\n-        if (boss != null) {\n-            boss.shutdownGracefully();\n-        }\n-        if (worker != null) {\n-            worker.shutdownGracefully();\n-        }\n-    }\n-\n-    public String getHost() {\n-        return host;\n-    }\n-\n-    public void setHost(String host) {\n-        this.host = host;\n-    }\n-\n-    public void setPort(int port) {\n-        this.port = port;\n-    }\n-\n-    public boolean isAcceptForeignIp() {\n-        return acceptForeignIp;\n-    }\n-\n-    public void setAcceptForeignIp(boolean acceptForeignIp) {\n-        this.acceptForeignIp = acceptForeignIp;\n-    }\n-\n-    public String getWelcome() {\n-        return welcome;\n-    }\n-\n-    public boolean isStarted() {\n-        return started.get();\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.server;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.qos.server.handler.QosProcessHandler;\r\n+\r\n+import io.netty.bootstrap.ServerBootstrap;\r\n+import io.netty.channel.Channel;\r\n+import io.netty.channel.ChannelInitializer;\r\n+import io.netty.channel.ChannelOption;\r\n+import io.netty.channel.EventLoopGroup;\r\n+import io.netty.channel.nio.NioEventLoopGroup;\r\n+import io.netty.channel.socket.nio.NioServerSocketChannel;\r\n+import io.netty.util.concurrent.DefaultThreadFactory;\r\n+\r\n+import java.util.concurrent.atomic.AtomicBoolean;\r\n+\r\n+/**\r\n+ * A server serves for both telnet access and http access\r\n+ * <ul>\r\n+ * <li>static initialize server</li>\r\n+ * <li>start server and bind port</li>\r\n+ * <li>close server</li>\r\n+ * </ul>\r\n+ */\r\n+public class Server {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(Server.class);\r\n+    private static final Server INSTANCE = new Server();\r\n+\r\n+    public static final Server getInstance() {\r\n+        return INSTANCE;\r\n+    }\r\n+\r\n+    private String host;\r\n+\r\n+    private int port;\r\n+\r\n+    private boolean acceptForeignIp = true;\r\n+\r\n+    private EventLoopGroup boss;\r\n+\r\n+    private EventLoopGroup worker;\r\n+\r\n+    private Server() {\r\n+        this.welcome = DubboLogo.DUBBO;\r\n+    }\r\n+\r\n+    private String welcome;\r\n+\r\n+    private AtomicBoolean started = new AtomicBoolean();\r\n+\r\n+    /**\r\n+     * welcome message\r\n+     */\r\n+    public void setWelcome(String welcome) {\r\n+        this.welcome = welcome;\r\n+    }\r\n+\r\n+    public int getPort() {\r\n+        return port;\r\n+    }\r\n+\r\n+    /**\r\n+     * start server, bind port\r\n+     */\r\n+    public void start() throws Throwable {\r\n+        if (!started.compareAndSet(false, true)) {\r\n+            return;\r\n+        }\r\n+        boss = new NioEventLoopGroup(1, new DefaultThreadFactory(\"qos-boss\", true));\r\n+        worker = new NioEventLoopGroup(0, new DefaultThreadFactory(\"qos-worker\", true));\r\n+        ServerBootstrap serverBootstrap = new ServerBootstrap();\r\n+        serverBootstrap.group(boss, worker);\r\n+        serverBootstrap.channel(NioServerSocketChannel.class);\r\n+        serverBootstrap.option(ChannelOption.SO_REUSEADDR, true);\r\n+        serverBootstrap.childOption(ChannelOption.TCP_NODELAY, true);\r\n+        serverBootstrap.childHandler(new ChannelInitializer<Channel>() {\r\n+\r\n+            @Override\r\n+            protected void initChannel(Channel ch) throws Exception {\r\n+                ch.pipeline().addLast(new QosProcessHandler(welcome, acceptForeignIp));\r\n+            }\r\n+        });\r\n+        try {\r\n+            if (StringUtils.isBlank(host)) {\r\n+                serverBootstrap.bind(port).sync();\r\n+            } else {\r\n+                serverBootstrap.bind(host, port).sync();\r\n+            }\r\n+\r\n+            logger.info(\"qos-server bind localhost:\" + port);\r\n+        } catch (Throwable throwable) {\r\n+            logger.error(\"qos-server can not bind localhost:\" + port, throwable);\r\n+            throw throwable;\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * close server\r\n+     */\r\n+    public void stop() {\r\n+        logger.info(\"qos-server stopped.\");\r\n+        if (boss != null) {\r\n+            boss.shutdownGracefully();\r\n+        }\r\n+        if (worker != null) {\r\n+            worker.shutdownGracefully();\r\n+        }\r\n+    }\r\n+\r\n+    public String getHost() {\r\n+        return host;\r\n+    }\r\n+\r\n+    public void setHost(String host) {\r\n+        this.host = host;\r\n+    }\r\n+\r\n+    public void setPort(int port) {\r\n+        this.port = port;\r\n+    }\r\n+\r\n+    public boolean isAcceptForeignIp() {\r\n+        return acceptForeignIp;\r\n+    }\r\n+\r\n+    public void setAcceptForeignIp(boolean acceptForeignIp) {\r\n+        this.acceptForeignIp = acceptForeignIp;\r\n+    }\r\n+\r\n+    public String getWelcome() {\r\n+        return welcome;\r\n+    }\r\n+\r\n+    public boolean isStarted() {\r\n+        return started.get();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/server/handler/QosProcessHandler.java", "source2": "org/apache/dubbo/qos/server/handler/QosProcessHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,111 +1,111 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.server.handler;\n-\n-import io.netty.buffer.ByteBuf;\n-import io.netty.buffer.Unpooled;\n-import io.netty.channel.ChannelHandlerContext;\n-import io.netty.channel.ChannelPipeline;\n-import io.netty.handler.codec.ByteToMessageDecoder;\n-import io.netty.handler.codec.LineBasedFrameDecoder;\n-import io.netty.handler.codec.http.HttpObjectAggregator;\n-import io.netty.handler.codec.http.HttpServerCodec;\n-import io.netty.handler.codec.string.StringDecoder;\n-import io.netty.handler.codec.string.StringEncoder;\n-import io.netty.handler.timeout.IdleStateEvent;\n-import io.netty.handler.timeout.IdleStateHandler;\n-import io.netty.util.CharsetUtil;\n-import io.netty.util.concurrent.ScheduledFuture;\n-import org.apache.dubbo.common.utils.ExecutorUtil;\n-\n-import java.util.List;\n-import java.util.concurrent.TimeUnit;\n-\n-public class QosProcessHandler extends ByteToMessageDecoder {\n-\n-    private ScheduledFuture<?> welcomeFuture;\n-\n-    private String welcome;\n-    // true means to accept foreign IP\n-    private boolean acceptForeignIp;\n-\n-    public static final String PROMPT = \"dubbo>\";\n-\n-    public QosProcessHandler(String welcome, boolean acceptForeignIp) {\n-        this.welcome = welcome;\n-        this.acceptForeignIp = acceptForeignIp;\n-    }\n-\n-    @Override\n-    public void channelActive(final ChannelHandlerContext ctx) throws Exception {\n-        welcomeFuture = ctx.executor().schedule(new Runnable() {\n-\n-            @Override\n-            public void run() {\n-                if (welcome != null) {\n-                    ctx.write(Unpooled.wrappedBuffer(welcome.getBytes()));\n-                    ctx.writeAndFlush(Unpooled.wrappedBuffer(PROMPT.getBytes()));\n-                }\n-            }\n-\n-        }, 500, TimeUnit.MILLISECONDS);\n-    }\n-\n-    @Override\n-    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {\n-        if (in.readableBytes() < 1) {\n-            return;\n-        }\n-\n-        // read one byte to guess protocol\n-        final int magic = in.getByte(in.readerIndex());\n-\n-        ChannelPipeline p = ctx.pipeline();\n-        p.addLast(new LocalHostPermitHandler(acceptForeignIp));\n-        if (isHttp(magic)) {\n-            // no welcome output for http protocol\n-            if (welcomeFuture != null && welcomeFuture.isCancellable()) {\n-                welcomeFuture.cancel(false);\n-            }\n-            p.addLast(new HttpServerCodec());\n-            p.addLast(new HttpObjectAggregator(1048576));\n-            p.addLast(new HttpProcessHandler());\n-            p.remove(this);\n-        } else {\n-            p.addLast(new LineBasedFrameDecoder(2048));\n-            p.addLast(new StringDecoder(CharsetUtil.UTF_8));\n-            p.addLast(new StringEncoder(CharsetUtil.UTF_8));\n-            p.addLast(new IdleStateHandler(0, 0, 5 * 60));\n-            p.addLast(new TelnetIdleEventHandler());\n-            p.addLast(new TelnetProcessHandler());\n-            p.remove(this);\n-        }\n-    }\n-\n-    @Override\n-    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {\n-        if (evt instanceof IdleStateEvent) {\n-            ExecutorUtil.cancelScheduledFuture(welcomeFuture);\n-            ctx.close();\n-        }\n-    }\n-\n-    // G for GET, and P for POST\n-    private static boolean isHttp(int magic) {\n-        return magic == 'G' || magic == 'P';\n-    }\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.server.handler;\r\n+\r\n+import io.netty.buffer.ByteBuf;\r\n+import io.netty.buffer.Unpooled;\r\n+import io.netty.channel.ChannelHandlerContext;\r\n+import io.netty.channel.ChannelPipeline;\r\n+import io.netty.handler.codec.ByteToMessageDecoder;\r\n+import io.netty.handler.codec.LineBasedFrameDecoder;\r\n+import io.netty.handler.codec.http.HttpObjectAggregator;\r\n+import io.netty.handler.codec.http.HttpServerCodec;\r\n+import io.netty.handler.codec.string.StringDecoder;\r\n+import io.netty.handler.codec.string.StringEncoder;\r\n+import io.netty.handler.timeout.IdleStateEvent;\r\n+import io.netty.handler.timeout.IdleStateHandler;\r\n+import io.netty.util.CharsetUtil;\r\n+import io.netty.util.concurrent.ScheduledFuture;\r\n+import org.apache.dubbo.common.utils.ExecutorUtil;\r\n+\r\n+import java.util.List;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+public class QosProcessHandler extends ByteToMessageDecoder {\r\n+\r\n+    private ScheduledFuture<?> welcomeFuture;\r\n+\r\n+    private String welcome;\r\n+    // true means to accept foreign IP\r\n+    private boolean acceptForeignIp;\r\n+\r\n+    public static final String PROMPT = \"dubbo>\";\r\n+\r\n+    public QosProcessHandler(String welcome, boolean acceptForeignIp) {\r\n+        this.welcome = welcome;\r\n+        this.acceptForeignIp = acceptForeignIp;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void channelActive(final ChannelHandlerContext ctx) throws Exception {\r\n+        welcomeFuture = ctx.executor().schedule(new Runnable() {\r\n+\r\n+            @Override\r\n+            public void run() {\r\n+                if (welcome != null) {\r\n+                    ctx.write(Unpooled.wrappedBuffer(welcome.getBytes()));\r\n+                    ctx.writeAndFlush(Unpooled.wrappedBuffer(PROMPT.getBytes()));\r\n+                }\r\n+            }\r\n+\r\n+        }, 500, TimeUnit.MILLISECONDS);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {\r\n+        if (in.readableBytes() < 1) {\r\n+            return;\r\n+        }\r\n+\r\n+        // read one byte to guess protocol\r\n+        final int magic = in.getByte(in.readerIndex());\r\n+\r\n+        ChannelPipeline p = ctx.pipeline();\r\n+        p.addLast(new LocalHostPermitHandler(acceptForeignIp));\r\n+        if (isHttp(magic)) {\r\n+            // no welcome output for http protocol\r\n+            if (welcomeFuture != null && welcomeFuture.isCancellable()) {\r\n+                welcomeFuture.cancel(false);\r\n+            }\r\n+            p.addLast(new HttpServerCodec());\r\n+            p.addLast(new HttpObjectAggregator(1048576));\r\n+            p.addLast(new HttpProcessHandler());\r\n+            p.remove(this);\r\n+        } else {\r\n+            p.addLast(new LineBasedFrameDecoder(2048));\r\n+            p.addLast(new StringDecoder(CharsetUtil.UTF_8));\r\n+            p.addLast(new StringEncoder(CharsetUtil.UTF_8));\r\n+            p.addLast(new IdleStateHandler(0, 0, 5 * 60));\r\n+            p.addLast(new TelnetIdleEventHandler());\r\n+            p.addLast(new TelnetProcessHandler());\r\n+            p.remove(this);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {\r\n+        if (evt instanceof IdleStateEvent) {\r\n+            ExecutorUtil.cancelScheduledFuture(welcomeFuture);\r\n+            ctx.close();\r\n+        }\r\n+    }\r\n+\r\n+    // G for GET, and P for POST\r\n+    private static boolean isHttp(int magic) {\r\n+        return magic == 'G' || magic == 'P';\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/server/handler/TelnetIdleEventHandler.java", "source2": "org/apache/dubbo/qos/server/handler/TelnetIdleEventHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,41 +1,41 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.server.handler;\n-\n-import io.netty.channel.Channel;\n-import io.netty.channel.ChannelDuplexHandler;\n-import io.netty.channel.ChannelHandlerContext;\n-import io.netty.handler.timeout.IdleStateEvent;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-\n-public class TelnetIdleEventHandler extends ChannelDuplexHandler {\n-    private static final Logger log = LoggerFactory.getLogger(TelnetIdleEventHandler.class);\n-\n-    @Override\n-    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {\n-        // server will close channel when server don't receive any request from client util timeout.\n-        if (evt instanceof IdleStateEvent) {\n-            Channel channel = ctx.channel();\n-            log.info(\"IdleStateEvent triggered, close channel \" + channel);\n-            channel.close();\n-        } else {\n-            super.userEventTriggered(ctx, evt);\n-        }\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.server.handler;\r\n+\r\n+import io.netty.channel.Channel;\r\n+import io.netty.channel.ChannelDuplexHandler;\r\n+import io.netty.channel.ChannelHandlerContext;\r\n+import io.netty.handler.timeout.IdleStateEvent;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+\r\n+public class TelnetIdleEventHandler extends ChannelDuplexHandler {\r\n+    private static final Logger log = LoggerFactory.getLogger(TelnetIdleEventHandler.class);\r\n+\r\n+    @Override\r\n+    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {\r\n+        // server will close channel when server don't receive any request from client util timeout.\r\n+        if (evt instanceof IdleStateEvent) {\r\n+            Channel channel = ctx.channel();\r\n+            log.info(\"IdleStateEvent triggered, close channel \" + channel);\r\n+            channel.close();\r\n+        } else {\r\n+            super.userEventTriggered(ctx, evt);\r\n+        }\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/server/handler/TelnetProcessHandler.java", "source2": "org/apache/dubbo/qos/server/handler/TelnetProcessHandler.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,73 +1,73 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.server.handler;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.qos.command.CommandContext;\n-import org.apache.dubbo.qos.command.CommandExecutor;\n-import org.apache.dubbo.qos.command.DefaultCommandExecutor;\n-import org.apache.dubbo.qos.command.NoSuchCommandException;\n-import org.apache.dubbo.qos.command.decoder.TelnetCommandDecoder;\n-import org.apache.dubbo.qos.common.QosConstants;\n-\n-import io.netty.channel.ChannelFutureListener;\n-import io.netty.channel.ChannelHandlerContext;\n-import io.netty.channel.SimpleChannelInboundHandler;\n-\n-/**\n- * Telnet process handler\n- */\n-public class TelnetProcessHandler extends SimpleChannelInboundHandler<String> {\n-\n-    private static final Logger log = LoggerFactory.getLogger(TelnetProcessHandler.class);\n-    private static CommandExecutor commandExecutor = new DefaultCommandExecutor();\n-\n-    @Override\n-    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {\n-\n-        if (StringUtils.isBlank(msg)) {\n-            ctx.writeAndFlush(QosProcessHandler.PROMPT);\n-        } else {\n-            CommandContext commandContext = TelnetCommandDecoder.decode(msg);\n-            commandContext.setRemote(ctx.channel());\n-\n-            try {\n-                String result = commandExecutor.execute(commandContext);\n-                if (StringUtils.isEquals(QosConstants.CLOSE, result)) {\n-                    ctx.writeAndFlush(getByeLabel()).addListener(ChannelFutureListener.CLOSE);\n-                } else {\n-                    ctx.writeAndFlush(result + QosConstants.BR_STR + QosProcessHandler.PROMPT);\n-                }\n-            } catch (NoSuchCommandException ex) {\n-                ctx.writeAndFlush(msg + \" :no such command\");\n-                ctx.writeAndFlush(QosConstants.BR_STR + QosProcessHandler.PROMPT);\n-                log.error(\"can not found command \" + commandContext, ex);\n-            } catch (Exception ex) {\n-                ctx.writeAndFlush(msg + \" :fail to execute commandContext by \" + ex.getMessage());\n-                ctx.writeAndFlush(QosConstants.BR_STR + QosProcessHandler.PROMPT);\n-                log.error(\"execute commandContext got exception \" + commandContext, ex);\n-            }\n-        }\n-    }\n-\n-    private String getByeLabel() {\n-        return \"BYE!\\n\";\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.server.handler;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.qos.command.CommandContext;\r\n+import org.apache.dubbo.qos.command.CommandExecutor;\r\n+import org.apache.dubbo.qos.command.DefaultCommandExecutor;\r\n+import org.apache.dubbo.qos.command.NoSuchCommandException;\r\n+import org.apache.dubbo.qos.command.decoder.TelnetCommandDecoder;\r\n+import org.apache.dubbo.qos.common.QosConstants;\r\n+\r\n+import io.netty.channel.ChannelFutureListener;\r\n+import io.netty.channel.ChannelHandlerContext;\r\n+import io.netty.channel.SimpleChannelInboundHandler;\r\n+\r\n+/**\r\n+ * Telnet process handler\r\n+ */\r\n+public class TelnetProcessHandler extends SimpleChannelInboundHandler<String> {\r\n+\r\n+    private static final Logger log = LoggerFactory.getLogger(TelnetProcessHandler.class);\r\n+    private static CommandExecutor commandExecutor = new DefaultCommandExecutor();\r\n+\r\n+    @Override\r\n+    protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {\r\n+\r\n+        if (StringUtils.isBlank(msg)) {\r\n+            ctx.writeAndFlush(QosProcessHandler.PROMPT);\r\n+        } else {\r\n+            CommandContext commandContext = TelnetCommandDecoder.decode(msg);\r\n+            commandContext.setRemote(ctx.channel());\r\n+\r\n+            try {\r\n+                String result = commandExecutor.execute(commandContext);\r\n+                if (StringUtils.isEquals(QosConstants.CLOSE, result)) {\r\n+                    ctx.writeAndFlush(getByeLabel()).addListener(ChannelFutureListener.CLOSE);\r\n+                } else {\r\n+                    ctx.writeAndFlush(result + QosConstants.BR_STR + QosProcessHandler.PROMPT);\r\n+                }\r\n+            } catch (NoSuchCommandException ex) {\r\n+                ctx.writeAndFlush(msg + \" :no such command\");\r\n+                ctx.writeAndFlush(QosConstants.BR_STR + QosProcessHandler.PROMPT);\r\n+                log.error(\"can not found command \" + commandContext, ex);\r\n+            } catch (Exception ex) {\r\n+                ctx.writeAndFlush(msg + \" :fail to execute commandContext by \" + ex.getMessage());\r\n+                ctx.writeAndFlush(QosConstants.BR_STR + QosProcessHandler.PROMPT);\r\n+                log.error(\"execute commandContext got exception \" + commandContext, ex);\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    private String getByeLabel() {\r\n+        return \"BYE!\\n\";\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/textui/TTable.java", "source2": "org/apache/dubbo/qos/textui/TTable.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,566 +1,566 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.textui;\n-\n-import java.io.StringReader;\n-import java.util.ArrayList;\n-import java.util.List;\n-import java.util.Scanner;\n-\n-import static java.lang.Math.abs;\n-import static java.lang.Math.max;\n-import static java.lang.String.format;\n-import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING;\n-import static org.apache.dubbo.common.utils.StringUtils.length;\n-import static org.apache.dubbo.common.utils.StringUtils.repeat;\n-import static org.apache.dubbo.common.utils.StringUtils.replace;\n-\n-/**\n- * Table\n- */\n-public class TTable implements TComponent {\n-\n-    // column definition\n-    private final ColumnDefine[] columnDefineArray;\n-\n-    // border\n-    private final Border border = new Border();\n-\n-    // padding\n-    private int padding;\n-\n-    public TTable(ColumnDefine[] columnDefineArray) {\n-        this.columnDefineArray = null == columnDefineArray\n-                ? new ColumnDefine[0]\n-                : columnDefineArray;\n-    }\n-\n-    public TTable(int columnNum) {\n-        this.columnDefineArray = new ColumnDefine[columnNum];\n-        for (int index = 0; index < this.columnDefineArray.length; index++) {\n-            columnDefineArray[index] = new ColumnDefine();\n-        }\n-    }\n-\n-\n-    @Override\n-    public String rendering() {\n-        final StringBuilder tableSB = new StringBuilder();\n-\n-        // process width cache\n-        final int[] widthCacheArray = new int[getColumnCount()];\n-        for (int index = 0; index < widthCacheArray.length; index++) {\n-            widthCacheArray[index] = abs(columnDefineArray[index].getWidth());\n-        }\n-\n-        final int rowCount = getRowCount();\n-        for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n-\n-            final boolean isFirstRow = rowIndex == 0;\n-            final boolean isLastRow = rowIndex == rowCount - 1;\n-\n-            // print first separation line\n-            if (isFirstRow\n-                    && border.has(Border.BORDER_OUTER_TOP)) {\n-                tableSB.append(drawSeparationLine(widthCacheArray)).append(System.lineSeparator());\n-            }\n-\n-            // print inner separation lines\n-            if (!isFirstRow\n-                    && border.has(Border.BORDER_INNER_H)) {\n-                tableSB.append(drawSeparationLine(widthCacheArray)).append(System.lineSeparator());\n-            }\n-\n-            // draw one line\n-            tableSB.append(drawRow(widthCacheArray, rowIndex));\n-\n-\n-            // print ending separation line\n-            if (isLastRow\n-                    && border.has(Border.BORDER_OUTER_BOTTOM)) {\n-                tableSB.append(drawSeparationLine(widthCacheArray)).append(System.lineSeparator());\n-            }\n-\n-        }\n-\n-\n-        return tableSB.toString();\n-    }\n-\n-\n-    private String drawRow(int[] widthCacheArray, int rowIndex) {\n-\n-        final StringBuilder rowSB = new StringBuilder();\n-        final Scanner[] scannerArray = new Scanner[getColumnCount()];\n-        try {\n-            boolean hasNextLine;\n-            do {\n-\n-                hasNextLine = false;\n-                final StringBuilder segmentSB = new StringBuilder();\n-\n-                for (int colIndex = 0; colIndex < getColumnCount(); colIndex++) {\n-\n-\n-                    final int width = widthCacheArray[colIndex];\n-                    final boolean isFirstColOfRow = colIndex == 0;\n-                    final boolean isLastColOfRow = colIndex == widthCacheArray.length - 1;\n-\n-                    final String borderChar;\n-                    if (isFirstColOfRow\n-                            && border.has(Border.BORDER_OUTER_LEFT)) {\n-                        borderChar = \"|\";\n-                    } else if (!isFirstColOfRow\n-                            && border.has(Border.BORDER_INNER_V)) {\n-                        borderChar = \"|\";\n-                    } else {\n-                        borderChar = EMPTY_STRING;\n-                    }\n-\n-\n-                    if (null == scannerArray[colIndex]) {\n-                        scannerArray[colIndex] = new Scanner(\n-                                new StringReader(wrap(getData(rowIndex, columnDefineArray[colIndex]), width)));\n-                    }\n-                    final Scanner scanner = scannerArray[colIndex];\n-\n-                    final String data;\n-                    if (scanner.hasNextLine()) {\n-                        data = scanner.nextLine();\n-                        hasNextLine = true;\n-                    } else {\n-                        data = EMPTY_STRING;\n-                    }\n-\n-                    if (width > 0) {\n-                        final ColumnDefine columnDefine = columnDefineArray[colIndex];\n-                        final String dataFormat = getDataFormat(columnDefine, width, data);\n-                        final String paddingChar = repeat(\" \", padding);\n-                        segmentSB.append(format(borderChar + paddingChar + dataFormat + paddingChar, data));\n-                    }\n-\n-                    if (isLastColOfRow) {\n-                        if (border.has(Border.BORDER_OUTER_RIGHT)) {\n-                            segmentSB.append(\"|\");\n-                        }\n-                        segmentSB.append(System.lineSeparator());\n-                    }\n-\n-                }\n-\n-                if (hasNextLine) {\n-                    rowSB.append(segmentSB);\n-                }\n-\n-            } while (hasNextLine);\n-\n-            return rowSB.toString();\n-        } finally {\n-            for (Scanner scanner : scannerArray) {\n-                if (null != scanner) {\n-                    scanner.close();\n-                }\n-            }\n-        }\n-\n-    }\n-\n-    private String getData(int rowIndex, ColumnDefine columnDefine) {\n-        return columnDefine.getRowCount() <= rowIndex\n-                ? EMPTY_STRING\n-                : columnDefine.rows.get(rowIndex);\n-    }\n-\n-    private String getDataFormat(ColumnDefine columnDefine, int width, String data) {\n-        switch (columnDefine.align) {\n-            case MIDDLE: {\n-                final int length = length(data);\n-                final int diff = width - length;\n-                final int left = diff / 2;\n-                return repeat(\" \", diff - left) + \"%s\" + repeat(\" \", left);\n-            }\n-            case RIGHT: {\n-                return \"%\" + width + \"s\";\n-            }\n-            case LEFT:\n-            default: {\n-                return \"%-\" + width + \"s\";\n-            }\n-        }\n-    }\n-\n-    /**\n-     * get row count\n-     */\n-    private int getRowCount() {\n-        int rowCount = 0;\n-        for (ColumnDefine columnDefine : columnDefineArray) {\n-            rowCount = max(rowCount, columnDefine.getRowCount());\n-        }\n-        return rowCount;\n-    }\n-\n-    /**\n-     * position to last column\n-     */\n-    private int indexLastCol(final int[] widthCacheArray) {\n-        for (int colIndex = widthCacheArray.length - 1; colIndex >= 0; colIndex--) {\n-            final int width = widthCacheArray[colIndex];\n-            if (width <= 0) {\n-                continue;\n-            }\n-            return colIndex;\n-        }\n-        return 0;\n-    }\n-\n-    /**\n-     * draw separation line\n-     */\n-    private String drawSeparationLine(final int[] widthCacheArray) {\n-        final StringBuilder separationLineSB = new StringBuilder();\n-\n-        final int lastCol = indexLastCol(widthCacheArray);\n-        final int colCount = widthCacheArray.length;\n-        for (int colIndex = 0; colIndex < colCount; colIndex++) {\n-            final int width = widthCacheArray[colIndex];\n-            if (width <= 0) {\n-                continue;\n-            }\n-\n-            final boolean isFirstCol = colIndex == 0;\n-            final boolean isLastCol = colIndex == lastCol;\n-\n-            if (isFirstCol\n-                    && border.has(Border.BORDER_OUTER_LEFT)) {\n-                separationLineSB.append(\"+\");\n-            }\n-\n-            if (!isFirstCol\n-                    && border.has(Border.BORDER_INNER_V)) {\n-                separationLineSB.append(\"+\");\n-            }\n-\n-            separationLineSB.append(repeat(\"-\", width + 2 * padding));\n-\n-            if (isLastCol\n-                    && border.has(Border.BORDER_OUTER_RIGHT)) {\n-                separationLineSB.append(\"+\");\n-            }\n-\n-        }\n-        return separationLineSB.toString();\n-    }\n-\n-    /**\n-     * Add a row\n-     */\n-    public TTable addRow(Object... columnDataArray) {\n-\n-        if (null != columnDataArray) {\n-            for (int index = 0; index < columnDefineArray.length; index++) {\n-                final ColumnDefine columnDefine = columnDefineArray[index];\n-                if (index < columnDataArray.length\n-                        && null != columnDataArray[index]) {\n-                    columnDefine.rows.add(replaceTab(columnDataArray[index].toString()));\n-                } else {\n-                    columnDefine.rows.add(EMPTY_STRING);\n-                }\n-            }\n-        }\n-\n-        return this;\n-    }\n-\n-\n-    /**\n-     * alignment\n-     */\n-    public enum Align {\n-\n-        /**\n-         * left-alignment\n-         */\n-        LEFT,\n-\n-        /**\n-         * right-alignment\n-         */\n-        RIGHT,\n-\n-        /**\n-         * middle-alignment\n-         */\n-        MIDDLE\n-    }\n-\n-    /**\n-     * column definition\n-     */\n-    public static class ColumnDefine {\n-\n-        // column width\n-        private final int width;\n-\n-        // whether to auto resize\n-        private final boolean isAutoResize;\n-\n-        // alignment\n-        private final Align align;\n-\n-        // data rows\n-        private final List<String> rows = new ArrayList<String>();\n-\n-        public ColumnDefine(int width, boolean isAutoResize, Align align) {\n-            this.width = width;\n-            this.isAutoResize = isAutoResize;\n-            this.align = align;\n-        }\n-\n-        public ColumnDefine(Align align) {\n-            this(0, true, align);\n-        }\n-\n-        public ColumnDefine(int width) {\n-            this(width, false, Align.LEFT);\n-        }\n-\n-        public ColumnDefine(int width, Align align) {\n-            this(width, false, align);\n-        }\n-\n-        public ColumnDefine() {\n-            this(Align.LEFT);\n-        }\n-\n-        /**\n-         * get current width\n-         *\n-         * @return width\n-         */\n-        public int getWidth() {\n-\n-            // if not auto resize, return preset width\n-            if (!isAutoResize) {\n-                return width;\n-            }\n-\n-            // if it's auto resize, then calculate the possible max width\n-            int maxWidth = 0;\n-            for (String data : rows) {\n-                maxWidth = max(width(data), maxWidth);\n-            }\n-\n-            return maxWidth;\n-        }\n-\n-        /**\n-         * get rows for the current column\n-         *\n-         * @return current column's rows\n-         */\n-        public int getRowCount() {\n-            return rows.size();\n-        }\n-\n-    }\n-\n-    /**\n-     * set padding\n-     *\n-     * @param padding padding\n-     */\n-    public TTable padding(int padding) {\n-        this.padding = padding;\n-        return this;\n-    }\n-\n-    /**\n-     * get column count\n-     *\n-     * @return column count\n-     */\n-    public int getColumnCount() {\n-        return columnDefineArray.length;\n-    }\n-\n-\n-    /**\n-     * replace tab to four spaces\n-     *\n-     * @param string the original string\n-     * @return the replaced string\n-     */\n-    private static String replaceTab(String string) {\n-        return replace(string, \"\\t\", \"    \");\n-    }\n-\n-    /**\n-     * visible width for the given string.\n-     *\n-     * for example: \"abc\\n1234\"'s width is 4.\n-     *\n-     * @param string the given string\n-     * @return visible width\n-     */\n-    private static int width(String string) {\n-        int maxWidth = 0;\n-        try (Scanner scanner = new Scanner(new StringReader(string))) {\n-            while (scanner.hasNextLine()) {\n-                maxWidth = max(length(scanner.nextLine()), maxWidth);\n-            }\n-        }\n-        return maxWidth;\n-    }\n-\n-    /**\n-     * get border\n-     *\n-     * @return table border\n-     */\n-    public Border getBorder() {\n-        return border;\n-    }\n-\n-    /**\n-     * border style\n-     */\n-    public class Border {\n-\n-        private int borders = BORDER_OUTER | BORDER_INNER;\n-\n-        /**\n-         * border outer top\n-         */\n-        public static final int BORDER_OUTER_TOP = 1 << 0;\n-\n-        /**\n-         * border outer right\n-         */\n-        public static final int BORDER_OUTER_RIGHT = 1 << 1;\n-\n-        /**\n-         * border outer bottom\n-         */\n-        public static final int BORDER_OUTER_BOTTOM = 1 << 2;\n-\n-        /**\n-         * border outer left\n-         */\n-        public static final int BORDER_OUTER_LEFT = 1 << 3;\n-\n-        /**\n-         * inner border: horizon\n-         */\n-        public static final int BORDER_INNER_H = 1 << 4;\n-\n-        /**\n-         * inner border: vertical\n-         */\n-        public static final int BORDER_INNER_V = 1 << 5;\n-\n-        /**\n-         * outer border\n-         */\n-        public static final int BORDER_OUTER = BORDER_OUTER_TOP | BORDER_OUTER_BOTTOM | BORDER_OUTER_LEFT | BORDER_OUTER_RIGHT;\n-\n-        /**\n-         * inner border\n-         */\n-        public static final int BORDER_INNER = BORDER_INNER_H | BORDER_INNER_V;\n-\n-        /**\n-         * no border\n-         */\n-        public static final int BORDER_NON = 0;\n-\n-        /**\n-         * whether has one of the specified border styles\n-         *\n-         * @param borderArray border styles\n-         * @return whether has one of the specified border styles\n-         */\n-        public boolean has(int... borderArray) {\n-            if (null == borderArray) {\n-                return false;\n-            }\n-            for (int b : borderArray) {\n-                if ((this.borders & b) == b) {\n-                    return true;\n-                }\n-            }\n-            return false;\n-        }\n-\n-        /**\n-         * get border style\n-         *\n-         * @return border style\n-         */\n-        public int get() {\n-            return borders;\n-        }\n-\n-        /**\n-         * set border style\n-         *\n-         * @param border border style\n-         * @return this\n-         */\n-        public Border set(int border) {\n-            this.borders = border;\n-            return this;\n-        }\n-\n-        public Border add(int border) {\n-            return set(get() | border);\n-        }\n-\n-        public Border remove(int border) {\n-            return set(get() ^ border);\n-        }\n-\n-    }\n-\n-\n-    public static String wrap(String string, int width) {\n-        final StringBuilder sb = new StringBuilder();\n-        final char[] buffer = string.toCharArray();\n-        int count = 0;\n-        for (char c : buffer) {\n-\n-            if (count == width) {\n-                count = 0;\n-                sb.append('\\n');\n-                if (c == '\\n') {\n-                    continue;\n-                }\n-            }\n-\n-            if (c == '\\n') {\n-                count = 0;\n-            } else {\n-                count++;\n-            }\n-\n-            sb.append(c);\n-\n-        }\n-        return sb.toString();\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.textui;\r\n+\r\n+import java.io.StringReader;\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+import java.util.Scanner;\r\n+\r\n+import static java.lang.Math.abs;\r\n+import static java.lang.Math.max;\r\n+import static java.lang.String.format;\r\n+import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING;\r\n+import static org.apache.dubbo.common.utils.StringUtils.length;\r\n+import static org.apache.dubbo.common.utils.StringUtils.repeat;\r\n+import static org.apache.dubbo.common.utils.StringUtils.replace;\r\n+\r\n+/**\r\n+ * Table\r\n+ */\r\n+public class TTable implements TComponent {\r\n+\r\n+    // column definition\r\n+    private final ColumnDefine[] columnDefineArray;\r\n+\r\n+    // border\r\n+    private final Border border = new Border();\r\n+\r\n+    // padding\r\n+    private int padding;\r\n+\r\n+    public TTable(ColumnDefine[] columnDefineArray) {\r\n+        this.columnDefineArray = null == columnDefineArray\r\n+                ? new ColumnDefine[0]\r\n+                : columnDefineArray;\r\n+    }\r\n+\r\n+    public TTable(int columnNum) {\r\n+        this.columnDefineArray = new ColumnDefine[columnNum];\r\n+        for (int index = 0; index < this.columnDefineArray.length; index++) {\r\n+            columnDefineArray[index] = new ColumnDefine();\r\n+        }\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public String rendering() {\r\n+        final StringBuilder tableSB = new StringBuilder();\r\n+\r\n+        // process width cache\r\n+        final int[] widthCacheArray = new int[getColumnCount()];\r\n+        for (int index = 0; index < widthCacheArray.length; index++) {\r\n+            widthCacheArray[index] = abs(columnDefineArray[index].getWidth());\r\n+        }\r\n+\r\n+        final int rowCount = getRowCount();\r\n+        for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {\r\n+\r\n+            final boolean isFirstRow = rowIndex == 0;\r\n+            final boolean isLastRow = rowIndex == rowCount - 1;\r\n+\r\n+            // print first separation line\r\n+            if (isFirstRow\r\n+                    && border.has(Border.BORDER_OUTER_TOP)) {\r\n+                tableSB.append(drawSeparationLine(widthCacheArray)).append(System.lineSeparator());\r\n+            }\r\n+\r\n+            // print inner separation lines\r\n+            if (!isFirstRow\r\n+                    && border.has(Border.BORDER_INNER_H)) {\r\n+                tableSB.append(drawSeparationLine(widthCacheArray)).append(System.lineSeparator());\r\n+            }\r\n+\r\n+            // draw one line\r\n+            tableSB.append(drawRow(widthCacheArray, rowIndex));\r\n+\r\n+\r\n+            // print ending separation line\r\n+            if (isLastRow\r\n+                    && border.has(Border.BORDER_OUTER_BOTTOM)) {\r\n+                tableSB.append(drawSeparationLine(widthCacheArray)).append(System.lineSeparator());\r\n+            }\r\n+\r\n+        }\r\n+\r\n+\r\n+        return tableSB.toString();\r\n+    }\r\n+\r\n+\r\n+    private String drawRow(int[] widthCacheArray, int rowIndex) {\r\n+\r\n+        final StringBuilder rowSB = new StringBuilder();\r\n+        final Scanner[] scannerArray = new Scanner[getColumnCount()];\r\n+        try {\r\n+            boolean hasNextLine;\r\n+            do {\r\n+\r\n+                hasNextLine = false;\r\n+                final StringBuilder segmentSB = new StringBuilder();\r\n+\r\n+                for (int colIndex = 0; colIndex < getColumnCount(); colIndex++) {\r\n+\r\n+\r\n+                    final int width = widthCacheArray[colIndex];\r\n+                    final boolean isFirstColOfRow = colIndex == 0;\r\n+                    final boolean isLastColOfRow = colIndex == widthCacheArray.length - 1;\r\n+\r\n+                    final String borderChar;\r\n+                    if (isFirstColOfRow\r\n+                            && border.has(Border.BORDER_OUTER_LEFT)) {\r\n+                        borderChar = \"|\";\r\n+                    } else if (!isFirstColOfRow\r\n+                            && border.has(Border.BORDER_INNER_V)) {\r\n+                        borderChar = \"|\";\r\n+                    } else {\r\n+                        borderChar = EMPTY_STRING;\r\n+                    }\r\n+\r\n+\r\n+                    if (null == scannerArray[colIndex]) {\r\n+                        scannerArray[colIndex] = new Scanner(\r\n+                                new StringReader(wrap(getData(rowIndex, columnDefineArray[colIndex]), width)));\r\n+                    }\r\n+                    final Scanner scanner = scannerArray[colIndex];\r\n+\r\n+                    final String data;\r\n+                    if (scanner.hasNextLine()) {\r\n+                        data = scanner.nextLine();\r\n+                        hasNextLine = true;\r\n+                    } else {\r\n+                        data = EMPTY_STRING;\r\n+                    }\r\n+\r\n+                    if (width > 0) {\r\n+                        final ColumnDefine columnDefine = columnDefineArray[colIndex];\r\n+                        final String dataFormat = getDataFormat(columnDefine, width, data);\r\n+                        final String paddingChar = repeat(\" \", padding);\r\n+                        segmentSB.append(format(borderChar + paddingChar + dataFormat + paddingChar, data));\r\n+                    }\r\n+\r\n+                    if (isLastColOfRow) {\r\n+                        if (border.has(Border.BORDER_OUTER_RIGHT)) {\r\n+                            segmentSB.append(\"|\");\r\n+                        }\r\n+                        segmentSB.append(System.lineSeparator());\r\n+                    }\r\n+\r\n+                }\r\n+\r\n+                if (hasNextLine) {\r\n+                    rowSB.append(segmentSB);\r\n+                }\r\n+\r\n+            } while (hasNextLine);\r\n+\r\n+            return rowSB.toString();\r\n+        } finally {\r\n+            for (Scanner scanner : scannerArray) {\r\n+                if (null != scanner) {\r\n+                    scanner.close();\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    private String getData(int rowIndex, ColumnDefine columnDefine) {\r\n+        return columnDefine.getRowCount() <= rowIndex\r\n+                ? EMPTY_STRING\r\n+                : columnDefine.rows.get(rowIndex);\r\n+    }\r\n+\r\n+    private String getDataFormat(ColumnDefine columnDefine, int width, String data) {\r\n+        switch (columnDefine.align) {\r\n+            case MIDDLE: {\r\n+                final int length = length(data);\r\n+                final int diff = width - length;\r\n+                final int left = diff / 2;\r\n+                return repeat(\" \", diff - left) + \"%s\" + repeat(\" \", left);\r\n+            }\r\n+            case RIGHT: {\r\n+                return \"%\" + width + \"s\";\r\n+            }\r\n+            case LEFT:\r\n+            default: {\r\n+                return \"%-\" + width + \"s\";\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * get row count\r\n+     */\r\n+    private int getRowCount() {\r\n+        int rowCount = 0;\r\n+        for (ColumnDefine columnDefine : columnDefineArray) {\r\n+            rowCount = max(rowCount, columnDefine.getRowCount());\r\n+        }\r\n+        return rowCount;\r\n+    }\r\n+\r\n+    /**\r\n+     * position to last column\r\n+     */\r\n+    private int indexLastCol(final int[] widthCacheArray) {\r\n+        for (int colIndex = widthCacheArray.length - 1; colIndex >= 0; colIndex--) {\r\n+            final int width = widthCacheArray[colIndex];\r\n+            if (width <= 0) {\r\n+                continue;\r\n+            }\r\n+            return colIndex;\r\n+        }\r\n+        return 0;\r\n+    }\r\n+\r\n+    /**\r\n+     * draw separation line\r\n+     */\r\n+    private String drawSeparationLine(final int[] widthCacheArray) {\r\n+        final StringBuilder separationLineSB = new StringBuilder();\r\n+\r\n+        final int lastCol = indexLastCol(widthCacheArray);\r\n+        final int colCount = widthCacheArray.length;\r\n+        for (int colIndex = 0; colIndex < colCount; colIndex++) {\r\n+            final int width = widthCacheArray[colIndex];\r\n+            if (width <= 0) {\r\n+                continue;\r\n+            }\r\n+\r\n+            final boolean isFirstCol = colIndex == 0;\r\n+            final boolean isLastCol = colIndex == lastCol;\r\n+\r\n+            if (isFirstCol\r\n+                    && border.has(Border.BORDER_OUTER_LEFT)) {\r\n+                separationLineSB.append(\"+\");\r\n+            }\r\n+\r\n+            if (!isFirstCol\r\n+                    && border.has(Border.BORDER_INNER_V)) {\r\n+                separationLineSB.append(\"+\");\r\n+            }\r\n+\r\n+            separationLineSB.append(repeat(\"-\", width + 2 * padding));\r\n+\r\n+            if (isLastCol\r\n+                    && border.has(Border.BORDER_OUTER_RIGHT)) {\r\n+                separationLineSB.append(\"+\");\r\n+            }\r\n+\r\n+        }\r\n+        return separationLineSB.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * Add a row\r\n+     */\r\n+    public TTable addRow(Object... columnDataArray) {\r\n+\r\n+        if (null != columnDataArray) {\r\n+            for (int index = 0; index < columnDefineArray.length; index++) {\r\n+                final ColumnDefine columnDefine = columnDefineArray[index];\r\n+                if (index < columnDataArray.length\r\n+                        && null != columnDataArray[index]) {\r\n+                    columnDefine.rows.add(replaceTab(columnDataArray[index].toString()));\r\n+                } else {\r\n+                    columnDefine.rows.add(EMPTY_STRING);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        return this;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * alignment\r\n+     */\r\n+    public enum Align {\r\n+\r\n+        /**\r\n+         * left-alignment\r\n+         */\r\n+        LEFT,\r\n+\r\n+        /**\r\n+         * right-alignment\r\n+         */\r\n+        RIGHT,\r\n+\r\n+        /**\r\n+         * middle-alignment\r\n+         */\r\n+        MIDDLE\r\n+    }\r\n+\r\n+    /**\r\n+     * column definition\r\n+     */\r\n+    public static class ColumnDefine {\r\n+\r\n+        // column width\r\n+        private final int width;\r\n+\r\n+        // whether to auto resize\r\n+        private final boolean isAutoResize;\r\n+\r\n+        // alignment\r\n+        private final Align align;\r\n+\r\n+        // data rows\r\n+        private final List<String> rows = new ArrayList<String>();\r\n+\r\n+        public ColumnDefine(int width, boolean isAutoResize, Align align) {\r\n+            this.width = width;\r\n+            this.isAutoResize = isAutoResize;\r\n+            this.align = align;\r\n+        }\r\n+\r\n+        public ColumnDefine(Align align) {\r\n+            this(0, true, align);\r\n+        }\r\n+\r\n+        public ColumnDefine(int width) {\r\n+            this(width, false, Align.LEFT);\r\n+        }\r\n+\r\n+        public ColumnDefine(int width, Align align) {\r\n+            this(width, false, align);\r\n+        }\r\n+\r\n+        public ColumnDefine() {\r\n+            this(Align.LEFT);\r\n+        }\r\n+\r\n+        /**\r\n+         * get current width\r\n+         *\r\n+         * @return width\r\n+         */\r\n+        public int getWidth() {\r\n+\r\n+            // if not auto resize, return preset width\r\n+            if (!isAutoResize) {\r\n+                return width;\r\n+            }\r\n+\r\n+            // if it's auto resize, then calculate the possible max width\r\n+            int maxWidth = 0;\r\n+            for (String data : rows) {\r\n+                maxWidth = max(width(data), maxWidth);\r\n+            }\r\n+\r\n+            return maxWidth;\r\n+        }\r\n+\r\n+        /**\r\n+         * get rows for the current column\r\n+         *\r\n+         * @return current column's rows\r\n+         */\r\n+        public int getRowCount() {\r\n+            return rows.size();\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    /**\r\n+     * set padding\r\n+     *\r\n+     * @param padding padding\r\n+     */\r\n+    public TTable padding(int padding) {\r\n+        this.padding = padding;\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * get column count\r\n+     *\r\n+     * @return column count\r\n+     */\r\n+    public int getColumnCount() {\r\n+        return columnDefineArray.length;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * replace tab to four spaces\r\n+     *\r\n+     * @param string the original string\r\n+     * @return the replaced string\r\n+     */\r\n+    private static String replaceTab(String string) {\r\n+        return replace(string, \"\\t\", \"    \");\r\n+    }\r\n+\r\n+    /**\r\n+     * visible width for the given string.\r\n+     *\r\n+     * for example: \"abc\\n1234\"'s width is 4.\r\n+     *\r\n+     * @param string the given string\r\n+     * @return visible width\r\n+     */\r\n+    private static int width(String string) {\r\n+        int maxWidth = 0;\r\n+        try (Scanner scanner = new Scanner(new StringReader(string))) {\r\n+            while (scanner.hasNextLine()) {\r\n+                maxWidth = max(length(scanner.nextLine()), maxWidth);\r\n+            }\r\n+        }\r\n+        return maxWidth;\r\n+    }\r\n+\r\n+    /**\r\n+     * get border\r\n+     *\r\n+     * @return table border\r\n+     */\r\n+    public Border getBorder() {\r\n+        return border;\r\n+    }\r\n+\r\n+    /**\r\n+     * border style\r\n+     */\r\n+    public class Border {\r\n+\r\n+        private int borders = BORDER_OUTER | BORDER_INNER;\r\n+\r\n+        /**\r\n+         * border outer top\r\n+         */\r\n+        public static final int BORDER_OUTER_TOP = 1 << 0;\r\n+\r\n+        /**\r\n+         * border outer right\r\n+         */\r\n+        public static final int BORDER_OUTER_RIGHT = 1 << 1;\r\n+\r\n+        /**\r\n+         * border outer bottom\r\n+         */\r\n+        public static final int BORDER_OUTER_BOTTOM = 1 << 2;\r\n+\r\n+        /**\r\n+         * border outer left\r\n+         */\r\n+        public static final int BORDER_OUTER_LEFT = 1 << 3;\r\n+\r\n+        /**\r\n+         * inner border: horizon\r\n+         */\r\n+        public static final int BORDER_INNER_H = 1 << 4;\r\n+\r\n+        /**\r\n+         * inner border: vertical\r\n+         */\r\n+        public static final int BORDER_INNER_V = 1 << 5;\r\n+\r\n+        /**\r\n+         * outer border\r\n+         */\r\n+        public static final int BORDER_OUTER = BORDER_OUTER_TOP | BORDER_OUTER_BOTTOM | BORDER_OUTER_LEFT | BORDER_OUTER_RIGHT;\r\n+\r\n+        /**\r\n+         * inner border\r\n+         */\r\n+        public static final int BORDER_INNER = BORDER_INNER_H | BORDER_INNER_V;\r\n+\r\n+        /**\r\n+         * no border\r\n+         */\r\n+        public static final int BORDER_NON = 0;\r\n+\r\n+        /**\r\n+         * whether has one of the specified border styles\r\n+         *\r\n+         * @param borderArray border styles\r\n+         * @return whether has one of the specified border styles\r\n+         */\r\n+        public boolean has(int... borderArray) {\r\n+            if (null == borderArray) {\r\n+                return false;\r\n+            }\r\n+            for (int b : borderArray) {\r\n+                if ((this.borders & b) == b) {\r\n+                    return true;\r\n+                }\r\n+            }\r\n+            return false;\r\n+        }\r\n+\r\n+        /**\r\n+         * get border style\r\n+         *\r\n+         * @return border style\r\n+         */\r\n+        public int get() {\r\n+            return borders;\r\n+        }\r\n+\r\n+        /**\r\n+         * set border style\r\n+         *\r\n+         * @param border border style\r\n+         * @return this\r\n+         */\r\n+        public Border set(int border) {\r\n+            this.borders = border;\r\n+            return this;\r\n+        }\r\n+\r\n+        public Border add(int border) {\r\n+            return set(get() | border);\r\n+        }\r\n+\r\n+        public Border remove(int border) {\r\n+            return set(get() ^ border);\r\n+        }\r\n+\r\n+    }\r\n+\r\n+\r\n+    public static String wrap(String string, int width) {\r\n+        final StringBuilder sb = new StringBuilder();\r\n+        final char[] buffer = string.toCharArray();\r\n+        int count = 0;\r\n+        for (char c : buffer) {\r\n+\r\n+            if (count == width) {\r\n+                count = 0;\r\n+                sb.append('\\n');\r\n+                if (c == '\\n') {\r\n+                    continue;\r\n+                }\r\n+            }\r\n+\r\n+            if (c == '\\n') {\r\n+                count = 0;\r\n+            } else {\r\n+                count++;\r\n+            }\r\n+\r\n+            sb.append(c);\r\n+\r\n+        }\r\n+        return sb.toString();\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/qos/textui/TTree.java", "source2": "org/apache/dubbo/qos/textui/TTree.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,266 +1,266 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.qos.textui;\n-\n-import java.io.StringReader;\n-import java.util.ArrayList;\n-import java.util.List;\n-import java.util.Scanner;\n-\n-import static java.lang.System.currentTimeMillis;\n-import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING;\n-import static org.apache.dubbo.common.utils.StringUtils.length;\n-import static org.apache.dubbo.common.utils.StringUtils.repeat;\n-\n-/**\n- * tree\n- */\n-public class TTree implements TComponent {\n-\n-    private static final String STEP_FIRST_CHAR = \"`---\";\n-    private static final String STEP_NORMAL_CHAR = \"+---\";\n-    private static final String STEP_HAS_BOARD = \"|   \";\n-    private static final String STEP_EMPTY_BOARD = \"    \";\n-\n-    // should output cost or not\n-    private final boolean isPrintCost;\n-\n-    // tree node\n-    private final Node root;\n-\n-    // current node\n-    private Node current;\n-\n-\n-    public TTree(boolean isPrintCost, String title) {\n-        this.root = new Node(title).markBegin().markEnd();\n-        this.current = root;\n-        this.isPrintCost = isPrintCost;\n-    }\n-\n-\n-    @Override\n-    public String rendering() {\n-\n-        final StringBuilder treeSB = new StringBuilder();\n-        recursive(0, true, \"\", root, new Callback() {\n-\n-            @Override\n-            public void callback(int deep, boolean isLast, String prefix, Node node) {\n-\n-                final boolean hasChild = !node.children.isEmpty();\n-                final String stepString = isLast ? STEP_FIRST_CHAR : STEP_NORMAL_CHAR;\n-                final int stepStringLength = length(stepString);\n-                treeSB.append(prefix).append(stepString);\n-\n-                int costPrefixLength = 0;\n-                if (hasChild) {\n-                    treeSB.append(\"+\");\n-                }\n-                if (isPrintCost\n-                        && !node.isRoot()) {\n-                    final String costPrefix = String.format(\"[%s,%sms]\", (node.endTimestamp - root.beginTimestamp), (node.endTimestamp - node.beginTimestamp));\n-                    costPrefixLength = length(costPrefix);\n-                    treeSB.append(costPrefix);\n-                }\n-\n-                try (Scanner scanner = new Scanner(new StringReader(node.data.toString()))) {\n-                    boolean isFirst = true;\n-                    while (scanner.hasNextLine()) {\n-                        if (isFirst) {\n-                            treeSB.append(scanner.nextLine()).append(\"\\n\");\n-                            isFirst = false;\n-                        } else {\n-                            treeSB.append(prefix)\n-                                    .append(repeat(' ', stepStringLength))\n-                                    .append(hasChild ? \"|\" : EMPTY_STRING)\n-                                    .append(repeat(' ', costPrefixLength))\n-                                    .append(scanner.nextLine())\n-                                    .append(System.lineSeparator());\n-                        }\n-                    }\n-                }\n-\n-            }\n-\n-        });\n-\n-        return treeSB.toString();\n-    }\n-\n-    /**\n-     * recursive visit\n-     */\n-    private void recursive(int deep, boolean isLast, String prefix, Node node, Callback callback) {\n-        callback.callback(deep, isLast, prefix, node);\n-        if (!node.isLeaf()) {\n-            final int size = node.children.size();\n-            for (int index = 0; index < size; index++) {\n-                final boolean isLastFlag = index == size - 1;\n-                final String currentPrefix = isLast ? prefix + STEP_EMPTY_BOARD : prefix + STEP_HAS_BOARD;\n-                recursive(\n-                        deep + 1,\n-                        isLastFlag,\n-                        currentPrefix,\n-                        node.children.get(index),\n-                        callback\n-                );\n-            }\n-        }\n-    }\n-\n-    public boolean isTop() {\n-        return current.isRoot();\n-    }\n-\n-    /**\n-     * create a branch node\n-     *\n-     * @param data node data\n-     * @return this\n-     */\n-    public TTree begin(Object data) {\n-        current = new Node(current, data);\n-        current.markBegin();\n-        return this;\n-    }\n-\n-    public TTree begin() {\n-        return begin(null);\n-    }\n-\n-    public Object get() {\n-        if (current.isRoot()) {\n-            throw new IllegalStateException(\"current node is root.\");\n-        }\n-        return current.data;\n-    }\n-\n-    public TTree set(Object data) {\n-        if (current.isRoot()) {\n-            throw new IllegalStateException(\"current node is root.\");\n-        }\n-        current.data = data;\n-        return this;\n-    }\n-\n-    /**\n-     * end a branch node\n-     *\n-     * @return this\n-     */\n-    public TTree end() {\n-        if (current.isRoot()) {\n-            throw new IllegalStateException(\"current node is root.\");\n-        }\n-        current.markEnd();\n-        current = current.parent;\n-        return this;\n-    }\n-\n-\n-    /**\n-     * tree node\n-     */\n-    private static class Node {\n-\n-        /**\n-         * parent node\n-         */\n-        final Node parent;\n-\n-        /**\n-         * node data\n-         */\n-        Object data;\n-\n-        /**\n-         * child nodes\n-         */\n-        final List<Node> children = new ArrayList<Node>();\n-\n-        /**\n-         * begin timestamp\n-         */\n-        private long beginTimestamp;\n-\n-        /**\n-         * end timestamp\n-         */\n-        private long endTimestamp;\n-\n-        /**\n-         * construct root node\n-         */\n-        private Node(Object data) {\n-            this.parent = null;\n-            this.data = data;\n-        }\n-\n-        /**\n-         * construct a regular node\n-         *\n-         * @param parent parent node\n-         * @param data   node data\n-         */\n-        private Node(Node parent, Object data) {\n-            this.parent = parent;\n-            this.data = data;\n-            parent.children.add(this);\n-        }\n-\n-        /**\n-         * is the current node the root node\n-         *\n-         * @return true / false\n-         */\n-        boolean isRoot() {\n-            return null == parent;\n-        }\n-\n-        /**\n-         * if the current node the leaf node\n-         *\n-         * @return true / false\n-         */\n-        boolean isLeaf() {\n-            return children.isEmpty();\n-        }\n-\n-        Node markBegin() {\n-            beginTimestamp = currentTimeMillis();\n-            return this;\n-        }\n-\n-        Node markEnd() {\n-            endTimestamp = currentTimeMillis();\n-            return this;\n-        }\n-\n-    }\n-\n-\n-    /**\n-     * callback interface for recursive visit\n-     */\n-    private interface Callback {\n-\n-        void callback(int deep, boolean isLast, String prefix, Node node);\n-\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.qos.textui;\r\n+\r\n+import java.io.StringReader;\r\n+import java.util.ArrayList;\r\n+import java.util.List;\r\n+import java.util.Scanner;\r\n+\r\n+import static java.lang.System.currentTimeMillis;\r\n+import static org.apache.dubbo.common.utils.StringUtils.EMPTY_STRING;\r\n+import static org.apache.dubbo.common.utils.StringUtils.length;\r\n+import static org.apache.dubbo.common.utils.StringUtils.repeat;\r\n+\r\n+/**\r\n+ * tree\r\n+ */\r\n+public class TTree implements TComponent {\r\n+\r\n+    private static final String STEP_FIRST_CHAR = \"`---\";\r\n+    private static final String STEP_NORMAL_CHAR = \"+---\";\r\n+    private static final String STEP_HAS_BOARD = \"|   \";\r\n+    private static final String STEP_EMPTY_BOARD = \"    \";\r\n+\r\n+    // should output cost or not\r\n+    private final boolean isPrintCost;\r\n+\r\n+    // tree node\r\n+    private final Node root;\r\n+\r\n+    // current node\r\n+    private Node current;\r\n+\r\n+\r\n+    public TTree(boolean isPrintCost, String title) {\r\n+        this.root = new Node(title).markBegin().markEnd();\r\n+        this.current = root;\r\n+        this.isPrintCost = isPrintCost;\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    public String rendering() {\r\n+\r\n+        final StringBuilder treeSB = new StringBuilder();\r\n+        recursive(0, true, \"\", root, new Callback() {\r\n+\r\n+            @Override\r\n+            public void callback(int deep, boolean isLast, String prefix, Node node) {\r\n+\r\n+                final boolean hasChild = !node.children.isEmpty();\r\n+                final String stepString = isLast ? STEP_FIRST_CHAR : STEP_NORMAL_CHAR;\r\n+                final int stepStringLength = length(stepString);\r\n+                treeSB.append(prefix).append(stepString);\r\n+\r\n+                int costPrefixLength = 0;\r\n+                if (hasChild) {\r\n+                    treeSB.append(\"+\");\r\n+                }\r\n+                if (isPrintCost\r\n+                        && !node.isRoot()) {\r\n+                    final String costPrefix = String.format(\"[%s,%sms]\", (node.endTimestamp - root.beginTimestamp), (node.endTimestamp - node.beginTimestamp));\r\n+                    costPrefixLength = length(costPrefix);\r\n+                    treeSB.append(costPrefix);\r\n+                }\r\n+\r\n+                try (Scanner scanner = new Scanner(new StringReader(node.data.toString()))) {\r\n+                    boolean isFirst = true;\r\n+                    while (scanner.hasNextLine()) {\r\n+                        if (isFirst) {\r\n+                            treeSB.append(scanner.nextLine()).append(\"\\n\");\r\n+                            isFirst = false;\r\n+                        } else {\r\n+                            treeSB.append(prefix)\r\n+                                    .append(repeat(' ', stepStringLength))\r\n+                                    .append(hasChild ? \"|\" : EMPTY_STRING)\r\n+                                    .append(repeat(' ', costPrefixLength))\r\n+                                    .append(scanner.nextLine())\r\n+                                    .append(System.lineSeparator());\r\n+                        }\r\n+                    }\r\n+                }\r\n+\r\n+            }\r\n+\r\n+        });\r\n+\r\n+        return treeSB.toString();\r\n+    }\r\n+\r\n+    /**\r\n+     * recursive visit\r\n+     */\r\n+    private void recursive(int deep, boolean isLast, String prefix, Node node, Callback callback) {\r\n+        callback.callback(deep, isLast, prefix, node);\r\n+        if (!node.isLeaf()) {\r\n+            final int size = node.children.size();\r\n+            for (int index = 0; index < size; index++) {\r\n+                final boolean isLastFlag = index == size - 1;\r\n+                final String currentPrefix = isLast ? prefix + STEP_EMPTY_BOARD : prefix + STEP_HAS_BOARD;\r\n+                recursive(\r\n+                        deep + 1,\r\n+                        isLastFlag,\r\n+                        currentPrefix,\r\n+                        node.children.get(index),\r\n+                        callback\r\n+                );\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public boolean isTop() {\r\n+        return current.isRoot();\r\n+    }\r\n+\r\n+    /**\r\n+     * create a branch node\r\n+     *\r\n+     * @param data node data\r\n+     * @return this\r\n+     */\r\n+    public TTree begin(Object data) {\r\n+        current = new Node(current, data);\r\n+        current.markBegin();\r\n+        return this;\r\n+    }\r\n+\r\n+    public TTree begin() {\r\n+        return begin(null);\r\n+    }\r\n+\r\n+    public Object get() {\r\n+        if (current.isRoot()) {\r\n+            throw new IllegalStateException(\"current node is root.\");\r\n+        }\r\n+        return current.data;\r\n+    }\r\n+\r\n+    public TTree set(Object data) {\r\n+        if (current.isRoot()) {\r\n+            throw new IllegalStateException(\"current node is root.\");\r\n+        }\r\n+        current.data = data;\r\n+        return this;\r\n+    }\r\n+\r\n+    /**\r\n+     * end a branch node\r\n+     *\r\n+     * @return this\r\n+     */\r\n+    public TTree end() {\r\n+        if (current.isRoot()) {\r\n+            throw new IllegalStateException(\"current node is root.\");\r\n+        }\r\n+        current.markEnd();\r\n+        current = current.parent;\r\n+        return this;\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * tree node\r\n+     */\r\n+    private static class Node {\r\n+\r\n+        /**\r\n+         * parent node\r\n+         */\r\n+        final Node parent;\r\n+\r\n+        /**\r\n+         * node data\r\n+         */\r\n+        Object data;\r\n+\r\n+        /**\r\n+         * child nodes\r\n+         */\r\n+        final List<Node> children = new ArrayList<Node>();\r\n+\r\n+        /**\r\n+         * begin timestamp\r\n+         */\r\n+        private long beginTimestamp;\r\n+\r\n+        /**\r\n+         * end timestamp\r\n+         */\r\n+        private long endTimestamp;\r\n+\r\n+        /**\r\n+         * construct root node\r\n+         */\r\n+        private Node(Object data) {\r\n+            this.parent = null;\r\n+            this.data = data;\r\n+        }\r\n+\r\n+        /**\r\n+         * construct a regular node\r\n+         *\r\n+         * @param parent parent node\r\n+         * @param data   node data\r\n+         */\r\n+        private Node(Node parent, Object data) {\r\n+            this.parent = parent;\r\n+            this.data = data;\r\n+            parent.children.add(this);\r\n+        }\r\n+\r\n+        /**\r\n+         * is the current node the root node\r\n+         *\r\n+         * @return true / false\r\n+         */\r\n+        boolean isRoot() {\r\n+            return null == parent;\r\n+        }\r\n+\r\n+        /**\r\n+         * if the current node the leaf node\r\n+         *\r\n+         * @return true / false\r\n+         */\r\n+        boolean isLeaf() {\r\n+            return children.isEmpty();\r\n+        }\r\n+\r\n+        Node markBegin() {\r\n+            beginTimestamp = currentTimeMillis();\r\n+            return this;\r\n+        }\r\n+\r\n+        Node markEnd() {\r\n+            endTimestamp = currentTimeMillis();\r\n+            return this;\r\n+        }\r\n+\r\n+    }\r\n+\r\n+\r\n+    /**\r\n+     * callback interface for recursive visit\r\n+     */\r\n+    private interface Callback {\r\n+\r\n+        void callback(int deep, boolean isLast, String prefix, Node node);\r\n+\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.qos.command.BaseCommand", "source2": "META-INF/dubbo/internal/org.apache.dubbo.qos.command.BaseCommand", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,8 +1,8 @@\n-online=org.apache.dubbo.qos.command.impl.Online\n-help=org.apache.dubbo.qos.command.impl.Help\n-quit=org.apache.dubbo.qos.command.impl.Quit\n-ls=org.apache.dubbo.qos.command.impl.Ls\n-offline=org.apache.dubbo.qos.command.impl.Offline\n-ready=org.apache.dubbo.qos.command.impl.Ready\n-version=org.apache.dubbo.qos.command.impl.Version\n-publish-metadata=org.apache.dubbo.qos.command.impl.PublishMetadata\n+online=org.apache.dubbo.qos.command.impl.Online\r\n+help=org.apache.dubbo.qos.command.impl.Help\r\n+quit=org.apache.dubbo.qos.command.impl.Quit\r\n+ls=org.apache.dubbo.qos.command.impl.Ls\r\n+offline=org.apache.dubbo.qos.command.impl.Offline\r\n+ready=org.apache.dubbo.qos.command.impl.Ready\r\n+version=org.apache.dubbo.qos.command.impl.Version\r\n+publish-metadata=org.apache.dubbo.qos.command.impl.PublishMetadata\r\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.remoting.telnet.TelnetHandler", "source2": "META-INF/dubbo/internal/org.apache.dubbo.remoting.telnet.TelnetHandler", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,9 +1,9 @@\n-ls=org.apache.dubbo.qos.legacy.ListTelnetHandler\n-ps=org.apache.dubbo.qos.legacy.PortTelnetHandler\n-cd=org.apache.dubbo.qos.legacy.ChangeTelnetHandler\n-pwd=org.apache.dubbo.qos.legacy.CurrentTelnetHandler\n-invoke=org.apache.dubbo.qos.legacy.InvokeTelnetHandler\n-trace=org.apache.dubbo.qos.legacy.TraceTelnetHandler\n-count=org.apache.dubbo.qos.legacy.CountTelnetHandler\n-select=org.apache.dubbo.qos.legacy.SelectTelnetHandler\n+ls=org.apache.dubbo.qos.legacy.ListTelnetHandler\r\n+ps=org.apache.dubbo.qos.legacy.PortTelnetHandler\r\n+cd=org.apache.dubbo.qos.legacy.ChangeTelnetHandler\r\n+pwd=org.apache.dubbo.qos.legacy.CurrentTelnetHandler\r\n+invoke=org.apache.dubbo.qos.legacy.InvokeTelnetHandler\r\n+trace=org.apache.dubbo.qos.legacy.TraceTelnetHandler\r\n+count=org.apache.dubbo.qos.legacy.CountTelnetHandler\r\n+select=org.apache.dubbo.qos.legacy.SelectTelnetHandler\r\n shutdown=org.apache.dubbo.qos.legacy.ShutdownTelnetHandler\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-qos/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-qos/pom.xml", "comments": ["Format-specific differences are supported for XML files but no file-specific differences were detected; falling back to a binary diff. file(1) reports: XML 1.0 document, ASCII text, with CRLF line terminators"], "has_internal_linenos": true, "unified_diff": "@@ -1,185 +1,180 @@\n 00000000: 3c3f 786d 6c20 7665 7273 696f 6e3d 2231  <?xml version=\"1\n 00000010: 2e30 2220 656e 636f 6469 6e67 3d22 5554  .0\" encoding=\"UT\n-00000020: 462d 3822 3f3e 0d0a 3c21 2d2d 0d0a 2020  F-8\"?>..<!--..  \n-00000030: 4c69 6365 6e73 6564 2074 6f20 7468 6520  Licensed to the \n-00000040: 4170 6163 6865 2053 6f66 7477 6172 6520  Apache Software \n-00000050: 466f 756e 6461 7469 6f6e 2028 4153 4629  Foundation (ASF)\n-00000060: 2075 6e64 6572 206f 6e65 206f 7220 6d6f   under one or mo\n-00000070: 7265 0d0a 2020 636f 6e74 7269 6275 746f  re..  contributo\n-00000080: 7220 6c69 6365 6e73 6520 6167 7265 656d  r license agreem\n-00000090: 656e 7473 2e20 2053 6565 2074 6865 204e  ents.  See the N\n-000000a0: 4f54 4943 4520 6669 6c65 2064 6973 7472  OTICE file distr\n-000000b0: 6962 7574 6564 2077 6974 680d 0a20 2074  ibuted with..  t\n-000000c0: 6869 7320 776f 726b 2066 6f72 2061 6464  his work for add\n-000000d0: 6974 696f 6e61 6c20 696e 666f 726d 6174  itional informat\n-000000e0: 696f 6e20 7265 6761 7264 696e 6720 636f  ion regarding co\n-000000f0: 7079 7269 6768 7420 6f77 6e65 7273 6869  pyright ownershi\n-00000100: 702e 0d0a 2020 5468 6520 4153 4620 6c69  p...  The ASF li\n-00000110: 6365 6e73 6573 2074 6869 7320 6669 6c65  censes this file\n-00000120: 2074 6f20 596f 7520 756e 6465 7220 7468   to You under th\n-00000130: 6520 4170 6163 6865 204c 6963 656e 7365  e Apache License\n-00000140: 2c20 5665 7273 696f 6e20 322e 300d 0a20  , Version 2.0.. \n-00000150: 2028 7468 6520 224c 6963 656e 7365 2229   (the \"License\")\n-00000160: 3b20 796f 7520 6d61 7920 6e6f 7420 7573  ; you may not us\n-00000170: 6520 7468 6973 2066 696c 6520 6578 6365  e this file exce\n-00000180: 7074 2069 6e20 636f 6d70 6c69 616e 6365  pt in compliance\n-00000190: 2077 6974 680d 0a20 2074 6865 204c 6963   with..  the Lic\n-000001a0: 656e 7365 2e20 2059 6f75 206d 6179 206f  ense.  You may o\n-000001b0: 6274 6169 6e20 6120 636f 7079 206f 6620  btain a copy of \n-000001c0: 7468 6520 4c69 6365 6e73 6520 6174 0d0a  the License at..\n-000001d0: 0d0a 2020 2020 2020 6874 7470 3a2f 2f77  ..      http://w\n-000001e0: 7777 2e61 7061 6368 652e 6f72 672f 6c69  ww.apache.org/li\n-000001f0: 6365 6e73 6573 2f4c 4943 454e 5345 2d32  censes/LICENSE-2\n-00000200: 2e30 0d0a 0d0a 2020 556e 6c65 7373 2072  .0....  Unless r\n-00000210: 6571 7569 7265 6420 6279 2061 7070 6c69  equired by appli\n-00000220: 6361 626c 6520 6c61 7720 6f72 2061 6772  cable law or agr\n-00000230: 6565 6420 746f 2069 6e20 7772 6974 696e  eed to in writin\n-00000240: 672c 2073 6f66 7477 6172 650d 0a20 2064  g, software..  d\n-00000250: 6973 7472 6962 7574 6564 2075 6e64 6572  istributed under\n-00000260: 2074 6865 204c 6963 656e 7365 2069 7320   the License is \n-00000270: 6469 7374 7269 6275 7465 6420 6f6e 2061  distributed on a\n-00000280: 6e20 2241 5320 4953 2220 4241 5349 532c  n \"AS IS\" BASIS,\n-00000290: 0d0a 2020 5749 5448 4f55 5420 5741 5252  ..  WITHOUT WARR\n-000002a0: 414e 5449 4553 204f 5220 434f 4e44 4954  ANTIES OR CONDIT\n-000002b0: 494f 4e53 204f 4620 414e 5920 4b49 4e44  IONS OF ANY KIND\n-000002c0: 2c20 6569 7468 6572 2065 7870 7265 7373  , either express\n-000002d0: 206f 7220 696d 706c 6965 642e 0d0a 2020   or implied...  \n-000002e0: 5365 6520 7468 6520 4c69 6365 6e73 6520  See the License \n-000002f0: 666f 7220 7468 6520 7370 6563 6966 6963  for the specific\n-00000300: 206c 616e 6775 6167 6520 676f 7665 726e   language govern\n-00000310: 696e 6720 7065 726d 6973 7369 6f6e 7320  ing permissions \n-00000320: 616e 640d 0a20 206c 696d 6974 6174 696f  and..  limitatio\n-00000330: 6e73 2075 6e64 6572 2074 6865 204c 6963  ns under the Lic\n-00000340: 656e 7365 2e0d 0a20 202d 2d3e 0d0a 3c70  ense...  -->..<p\n-00000350: 726f 6a65 6374 2078 7369 3a73 6368 656d  roject xsi:schem\n-00000360: 614c 6f63 6174 696f 6e3d 2268 7474 703a  aLocation=\"http:\n-00000370: 2f2f 6d61 7665 6e2e 6170 6163 6865 2e6f  //maven.apache.o\n-00000380: 7267 2f50 4f4d 2f34 2e30 2e30 2068 7474  rg/POM/4.0.0 htt\n-00000390: 7073 3a2f 2f6d 6176 656e 2e61 7061 6368  ps://maven.apach\n-000003a0: 652e 6f72 672f 7873 642f 6d61 7665 6e2d  e.org/xsd/maven-\n-000003b0: 342e 302e 302e 7873 6422 2078 6d6c 6e73  4.0.0.xsd\" xmlns\n-000003c0: 3d22 6874 7470 3a2f 2f6d 6176 656e 2e61  =\"http://maven.a\n-000003d0: 7061 6368 652e 6f72 672f 504f 4d2f 342e  pache.org/POM/4.\n-000003e0: 302e 3022 0d0a 2020 2020 786d 6c6e 733a  0.0\"..    xmlns:\n-000003f0: 7873 693d 2268 7474 703a 2f2f 7777 772e  xsi=\"http://www.\n-00000400: 7733 2e6f 7267 2f32 3030 312f 584d 4c53  w3.org/2001/XMLS\n-00000410: 6368 656d 612d 696e 7374 616e 6365 223e  chema-instance\">\n-00000420: 0d0a 2020 3c6d 6f64 656c 5665 7273 696f  ..  <modelVersio\n-00000430: 6e3e 342e 302e 303c 2f6d 6f64 656c 5665  n>4.0.0</modelVe\n-00000440: 7273 696f 6e3e 0d0a 2020 3c70 6172 656e  rsion>..  <paren\n-00000450: 743e 0d0a 2020 2020 3c67 726f 7570 4964  t>..    <groupId\n-00000460: 3e6f 7267 2e61 7061 6368 652e 6475 6262  >org.apache.dubb\n-00000470: 6f3c 2f67 726f 7570 4964 3e0d 0a20 2020  o</groupId>..   \n-00000480: 203c 6172 7469 6661 6374 4964 3e64 7562   <artifactId>dub\n-00000490: 626f 2d70 6c75 6769 6e3c 2f61 7274 6966  bo-plugin</artif\n-000004a0: 6163 7449 643e 0d0a 2020 2020 3c76 6572  actId>..    <ver\n-000004b0: 7369 6f6e 3e32 2e37 2e31 303c 2f76 6572  sion>2.7.10</ver\n-000004c0: 7369 6f6e 3e0d 0a20 203c 2f70 6172 656e  sion>..  </paren\n-000004d0: 743e 0d0a 2020 3c67 726f 7570 4964 3e6f  t>..  <groupId>o\n-000004e0: 7267 2e61 7061 6368 652e 6475 6262 6f3c  rg.apache.dubbo<\n-000004f0: 2f67 726f 7570 4964 3e0d 0a20 203c 6172  /groupId>..  <ar\n-00000500: 7469 6661 6374 4964 3e64 7562 626f 2d71  tifactId>dubbo-q\n-00000510: 6f73 3c2f 6172 7469 6661 6374 4964 3e0d  os</artifactId>.\n-00000520: 0a20 203c 7665 7273 696f 6e3e 322e 372e  .  <version>2.7.\n-00000530: 3130 3c2f 7665 7273 696f 6e3e 0d0a 2020  10</version>..  \n-00000540: 3c6e 616d 653e 6475 6262 6f2d 716f 733c  <name>dubbo-qos<\n-00000550: 2f6e 616d 653e 0d0a 2020 3c6c 6963 656e  /name>..  <licen\n-00000560: 7365 733e 0d0a 2020 2020 3c6c 6963 656e  ses>..    <licen\n-00000570: 7365 3e0d 0a20 2020 2020 203c 6e61 6d65  se>..      <name\n-00000580: 3e41 7061 6368 6520 4c69 6365 6e73 652c  >Apache License,\n-00000590: 2056 6572 7369 6f6e 2032 2e30 3c2f 6e61   Version 2.0</na\n-000005a0: 6d65 3e0d 0a20 2020 2020 203c 7572 6c3e  me>..      <url>\n-000005b0: 6874 7470 3a2f 2f77 7777 2e61 7061 6368  http://www.apach\n-000005c0: 652e 6f72 672f 6c69 6365 6e73 6573 2f4c  e.org/licenses/L\n-000005d0: 4943 454e 5345 2d32 2e30 3c2f 7572 6c3e  ICENSE-2.0</url>\n-000005e0: 0d0a 2020 2020 2020 3c64 6973 7472 6962  ..      <distrib\n-000005f0: 7574 696f 6e3e 7265 706f 3c2f 6469 7374  ution>repo</dist\n-00000600: 7269 6275 7469 6f6e 3e0d 0a20 2020 203c  ribution>..    <\n-00000610: 2f6c 6963 656e 7365 3e0d 0a20 203c 2f6c  /license>..  </l\n-00000620: 6963 656e 7365 733e 0d0a 2020 3c70 726f  icenses>..  <pro\n-00000630: 7065 7274 6965 733e 0d0a 2020 2020 3c73  perties>..    <s\n-00000640: 6b69 705f 6d61 7665 6e5f 6465 706c 6f79  kip_maven_deploy\n-00000650: 3e66 616c 7365 3c2f 736b 6970 5f6d 6176  >false</skip_mav\n-00000660: 656e 5f64 6570 6c6f 793e 0d0a 2020 2020  en_deploy>..    \n-00000670: 3c70 726f 6a65 6374 2e62 7569 6c64 2e73  <project.build.s\n-00000680: 6f75 7263 6545 6e63 6f64 696e 673e 5554  ourceEncoding>UT\n-00000690: 462d 383c 2f70 726f 6a65 6374 2e62 7569  F-8</project.bui\n-000006a0: 6c64 2e73 6f75 7263 6545 6e63 6f64 696e  ld.sourceEncodin\n-000006b0: 673e 0d0a 2020 3c2f 7072 6f70 6572 7469  g>..  </properti\n-000006c0: 6573 3e0d 0a20 203c 6465 7065 6e64 656e  es>..  <dependen\n-000006d0: 6369 6573 3e0d 0a20 2020 203c 6465 7065  cies>..    <depe\n-000006e0: 6e64 656e 6379 3e0d 0a20 2020 2020 203c  ndency>..      <\n-000006f0: 6772 6f75 7049 643e 6f72 672e 6170 6163  groupId>org.apac\n-00000700: 6865 2e64 7562 626f 3c2f 6772 6f75 7049  he.dubbo</groupI\n-00000710: 643e 0d0a 2020 2020 2020 3c61 7274 6966  d>..      <artif\n-00000720: 6163 7449 643e 6475 6262 6f2d 636f 6d6d  actId>dubbo-comm\n-00000730: 6f6e 3c2f 6172 7469 6661 6374 4964 3e0d  on</artifactId>.\n-00000740: 0a20 2020 2020 203c 7665 7273 696f 6e3e  .      <version>\n-00000750: 247b 7072 6f6a 6563 742e 7665 7273 696f  ${project.versio\n-00000760: 6e7d 3c2f 7665 7273 696f 6e3e 0d0a 2020  n}</version>..  \n-00000770: 2020 3c2f 6465 7065 6e64 656e 6379 3e0d    </dependency>.\n-00000780: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n-00000790: 3e0d 0a20 2020 2020 203c 6772 6f75 7049  >..      <groupI\n-000007a0: 643e 6f72 672e 6170 6163 6865 2e64 7562  d>org.apache.dub\n-000007b0: 626f 3c2f 6772 6f75 7049 643e 0d0a 2020  bo</groupId>..  \n-000007c0: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n-000007d0: 6475 6262 6f2d 7265 6769 7374 7279 2d61  dubbo-registry-a\n-000007e0: 7069 3c2f 6172 7469 6661 6374 4964 3e0d  pi</artifactId>.\n-000007f0: 0a20 2020 2020 203c 7665 7273 696f 6e3e  .      <version>\n-00000800: 247b 7072 6f6a 6563 742e 7665 7273 696f  ${project.versio\n-00000810: 6e7d 3c2f 7665 7273 696f 6e3e 0d0a 2020  n}</version>..  \n-00000820: 2020 3c2f 6465 7065 6e64 656e 6379 3e0d    </dependency>.\n-00000830: 0a20 2020 203c 6465 7065 6e64 656e 6379  .    <dependency\n-00000840: 3e0d 0a20 2020 2020 203c 6772 6f75 7049  >..      <groupI\n-00000850: 643e 6f72 672e 6170 6163 6865 2e64 7562  d>org.apache.dub\n-00000860: 626f 3c2f 6772 6f75 7049 643e 0d0a 2020  bo</groupId>..  \n-00000870: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n-00000880: 6475 6262 6f2d 636f 6e66 6967 2d61 7069  dubbo-config-api\n-00000890: 3c2f 6172 7469 6661 6374 4964 3e0d 0a20  </artifactId>.. \n-000008a0: 2020 2020 203c 7665 7273 696f 6e3e 247b       <version>${\n-000008b0: 7072 6f6a 6563 742e 7665 7273 696f 6e7d  project.version}\n-000008c0: 3c2f 7665 7273 696f 6e3e 0d0a 2020 2020  </version>..    \n-000008d0: 3c2f 6465 7065 6e64 656e 6379 3e0d 0a20  </dependency>.. \n-000008e0: 2020 203c 6465 7065 6e64 656e 6379 3e0d     <dependency>.\n-000008f0: 0a20 2020 2020 203c 6772 6f75 7049 643e  .      <groupId>\n-00000900: 6f72 672e 6170 6163 6865 2e64 7562 626f  org.apache.dubbo\n-00000910: 3c2f 6772 6f75 7049 643e 0d0a 2020 2020  </groupId>..    \n-00000920: 2020 3c61 7274 6966 6163 7449 643e 6475    <artifactId>du\n-00000930: 6262 6f2d 7270 632d 6475 6262 6f3c 2f61  bbo-rpc-dubbo</a\n-00000940: 7274 6966 6163 7449 643e 0d0a 2020 2020  rtifactId>..    \n-00000950: 2020 3c76 6572 7369 6f6e 3e24 7b70 726f    <version>${pro\n-00000960: 6a65 6374 2e76 6572 7369 6f6e 7d3c 2f76  ject.version}</v\n-00000970: 6572 7369 6f6e 3e0d 0a20 2020 203c 2f64  ersion>..    </d\n-00000980: 6570 656e 6465 6e63 793e 0d0a 2020 2020  ependency>..    \n-00000990: 3c64 6570 656e 6465 6e63 793e 0d0a 2020  <dependency>..  \n-000009a0: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n-000009b0: 2e61 7061 6368 652e 6475 6262 6f3c 2f67  .apache.dubbo</g\n-000009c0: 726f 7570 4964 3e0d 0a20 2020 2020 203c  roupId>..      <\n-000009d0: 6172 7469 6661 6374 4964 3e64 7562 626f  artifactId>dubbo\n-000009e0: 2d72 656d 6f74 696e 672d 6e65 7474 7934  -remoting-netty4\n-000009f0: 3c2f 6172 7469 6661 6374 4964 3e0d 0a20  </artifactId>.. \n-00000a00: 2020 2020 203c 7665 7273 696f 6e3e 247b       <version>${\n-00000a10: 7072 6f6a 6563 742e 7665 7273 696f 6e7d  project.version}\n-00000a20: 3c2f 7665 7273 696f 6e3e 0d0a 2020 2020  </version>..    \n-00000a30: 3c2f 6465 7065 6e64 656e 6379 3e0d 0a20  </dependency>.. \n-00000a40: 2020 203c 6465 7065 6e64 656e 6379 3e0d     <dependency>.\n-00000a50: 0a20 2020 2020 203c 6772 6f75 7049 643e  .      <groupId>\n-00000a60: 6f72 672e 6170 6163 6865 2e64 7562 626f  org.apache.dubbo\n-00000a70: 3c2f 6772 6f75 7049 643e 0d0a 2020 2020  </groupId>..    \n-00000a80: 2020 3c61 7274 6966 6163 7449 643e 6475    <artifactId>du\n-00000a90: 6262 6f2d 7365 7269 616c 697a 6174 696f  bbo-serializatio\n-00000aa0: 6e2d 6865 7373 6961 6e32 3c2f 6172 7469  n-hessian2</arti\n-00000ab0: 6661 6374 4964 3e0d 0a20 2020 2020 203c  factId>..      <\n-00000ac0: 7665 7273 696f 6e3e 247b 7072 6f6a 6563  version>${projec\n-00000ad0: 742e 7665 7273 696f 6e7d 3c2f 7665 7273  t.version}</vers\n-00000ae0: 696f 6e3e 0d0a 2020 2020 3c2f 6465 7065  ion>..    </depe\n-00000af0: 6e64 656e 6379 3e0d 0a20 2020 203c 6465  ndency>..    <de\n-00000b00: 7065 6e64 656e 6379 3e0d 0a20 2020 2020  pendency>..     \n-00000b10: 203c 6772 6f75 7049 643e 696f 2e6e 6574   <groupId>io.net\n-00000b20: 7479 3c2f 6772 6f75 7049 643e 0d0a 2020  ty</groupId>..  \n-00000b30: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n-00000b40: 6e65 7474 792d 616c 6c3c 2f61 7274 6966  netty-all</artif\n-00000b50: 6163 7449 643e 0d0a 2020 2020 3c2f 6465  actId>..    </de\n-00000b60: 7065 6e64 656e 6379 3e0d 0a20 203c 2f64  pendency>..  </d\n-00000b70: 6570 656e 6465 6e63 6965 733e 0d0a 3c2f  ependencies>..</\n-00000b80: 7072 6f6a 6563 743e 0d0a                 project>..\n+00000020: 462d 3822 3f3e 0a3c 212d 2d0a 2020 4c69  F-8\"?>.<!--.  Li\n+00000030: 6365 6e73 6564 2074 6f20 7468 6520 4170  censed to the Ap\n+00000040: 6163 6865 2053 6f66 7477 6172 6520 466f  ache Software Fo\n+00000050: 756e 6461 7469 6f6e 2028 4153 4629 2075  undation (ASF) u\n+00000060: 6e64 6572 206f 6e65 206f 7220 6d6f 7265  nder one or more\n+00000070: 0a20 2063 6f6e 7472 6962 7574 6f72 206c  .  contributor l\n+00000080: 6963 656e 7365 2061 6772 6565 6d65 6e74  icense agreement\n+00000090: 732e 2020 5365 6520 7468 6520 4e4f 5449  s.  See the NOTI\n+000000a0: 4345 2066 696c 6520 6469 7374 7269 6275  CE file distribu\n+000000b0: 7465 6420 7769 7468 0a20 2074 6869 7320  ted with.  this \n+000000c0: 776f 726b 2066 6f72 2061 6464 6974 696f  work for additio\n+000000d0: 6e61 6c20 696e 666f 726d 6174 696f 6e20  nal information \n+000000e0: 7265 6761 7264 696e 6720 636f 7079 7269  regarding copyri\n+000000f0: 6768 7420 6f77 6e65 7273 6869 702e 0a20  ght ownership.. \n+00000100: 2054 6865 2041 5346 206c 6963 656e 7365   The ASF license\n+00000110: 7320 7468 6973 2066 696c 6520 746f 2059  s this file to Y\n+00000120: 6f75 2075 6e64 6572 2074 6865 2041 7061  ou under the Apa\n+00000130: 6368 6520 4c69 6365 6e73 652c 2056 6572  che License, Ver\n+00000140: 7369 6f6e 2032 2e30 0a20 2028 7468 6520  sion 2.0.  (the \n+00000150: 224c 6963 656e 7365 2229 3b20 796f 7520  \"License\"); you \n+00000160: 6d61 7920 6e6f 7420 7573 6520 7468 6973  may not use this\n+00000170: 2066 696c 6520 6578 6365 7074 2069 6e20   file except in \n+00000180: 636f 6d70 6c69 616e 6365 2077 6974 680a  compliance with.\n+00000190: 2020 7468 6520 4c69 6365 6e73 652e 2020    the License.  \n+000001a0: 596f 7520 6d61 7920 6f62 7461 696e 2061  You may obtain a\n+000001b0: 2063 6f70 7920 6f66 2074 6865 204c 6963   copy of the Lic\n+000001c0: 656e 7365 2061 740a 0a20 2020 2020 2068  ense at..      h\n+000001d0: 7474 703a 2f2f 7777 772e 6170 6163 6865  ttp://www.apache\n+000001e0: 2e6f 7267 2f6c 6963 656e 7365 732f 4c49  .org/licenses/LI\n+000001f0: 4345 4e53 452d 322e 300a 0a20 2055 6e6c  CENSE-2.0..  Unl\n+00000200: 6573 7320 7265 7175 6972 6564 2062 7920  ess required by \n+00000210: 6170 706c 6963 6162 6c65 206c 6177 206f  applicable law o\n+00000220: 7220 6167 7265 6564 2074 6f20 696e 2077  r agreed to in w\n+00000230: 7269 7469 6e67 2c20 736f 6674 7761 7265  riting, software\n+00000240: 0a20 2064 6973 7472 6962 7574 6564 2075  .  distributed u\n+00000250: 6e64 6572 2074 6865 204c 6963 656e 7365  nder the License\n+00000260: 2069 7320 6469 7374 7269 6275 7465 6420   is distributed \n+00000270: 6f6e 2061 6e20 2241 5320 4953 2220 4241  on an \"AS IS\" BA\n+00000280: 5349 532c 0a20 2057 4954 484f 5554 2057  SIS,.  WITHOUT W\n+00000290: 4152 5241 4e54 4945 5320 4f52 2043 4f4e  ARRANTIES OR CON\n+000002a0: 4449 5449 4f4e 5320 4f46 2041 4e59 204b  DITIONS OF ANY K\n+000002b0: 494e 442c 2065 6974 6865 7220 6578 7072  IND, either expr\n+000002c0: 6573 7320 6f72 2069 6d70 6c69 6564 2e0a  ess or implied..\n+000002d0: 2020 5365 6520 7468 6520 4c69 6365 6e73    See the Licens\n+000002e0: 6520 666f 7220 7468 6520 7370 6563 6966  e for the specif\n+000002f0: 6963 206c 616e 6775 6167 6520 676f 7665  ic language gove\n+00000300: 726e 696e 6720 7065 726d 6973 7369 6f6e  rning permission\n+00000310: 7320 616e 640a 2020 6c69 6d69 7461 7469  s and.  limitati\n+00000320: 6f6e 7320 756e 6465 7220 7468 6520 4c69  ons under the Li\n+00000330: 6365 6e73 652e 0a20 202d 2d3e 0a3c 7072  cense..  -->.<pr\n+00000340: 6f6a 6563 7420 7873 693a 7363 6865 6d61  oject xsi:schema\n+00000350: 4c6f 6361 7469 6f6e 3d22 6874 7470 3a2f  Location=\"http:/\n+00000360: 2f6d 6176 656e 2e61 7061 6368 652e 6f72  /maven.apache.or\n+00000370: 672f 504f 4d2f 342e 302e 3020 6874 7470  g/POM/4.0.0 http\n+00000380: 733a 2f2f 6d61 7665 6e2e 6170 6163 6865  s://maven.apache\n+00000390: 2e6f 7267 2f78 7364 2f6d 6176 656e 2d34  .org/xsd/maven-4\n+000003a0: 2e30 2e30 2e78 7364 2220 786d 6c6e 733d  .0.0.xsd\" xmlns=\n+000003b0: 2268 7474 703a 2f2f 6d61 7665 6e2e 6170  \"http://maven.ap\n+000003c0: 6163 6865 2e6f 7267 2f50 4f4d 2f34 2e30  ache.org/POM/4.0\n+000003d0: 2e30 220a 2020 2020 786d 6c6e 733a 7873  .0\".    xmlns:xs\n+000003e0: 693d 2268 7474 703a 2f2f 7777 772e 7733  i=\"http://www.w3\n+000003f0: 2e6f 7267 2f32 3030 312f 584d 4c53 6368  .org/2001/XMLSch\n+00000400: 656d 612d 696e 7374 616e 6365 223e 0a20  ema-instance\">. \n+00000410: 203c 6d6f 6465 6c56 6572 7369 6f6e 3e34   <modelVersion>4\n+00000420: 2e30 2e30 3c2f 6d6f 6465 6c56 6572 7369  .0.0</modelVersi\n+00000430: 6f6e 3e0a 2020 3c70 6172 656e 743e 0a20  on>.  <parent>. \n+00000440: 2020 203c 6772 6f75 7049 643e 6f72 672e     <groupId>org.\n+00000450: 6170 6163 6865 2e64 7562 626f 3c2f 6772  apache.dubbo</gr\n+00000460: 6f75 7049 643e 0a20 2020 203c 6172 7469  oupId>.    <arti\n+00000470: 6661 6374 4964 3e64 7562 626f 2d70 6c75  factId>dubbo-plu\n+00000480: 6769 6e3c 2f61 7274 6966 6163 7449 643e  gin</artifactId>\n+00000490: 0a20 2020 203c 7665 7273 696f 6e3e 322e  .    <version>2.\n+000004a0: 372e 3130 3c2f 7665 7273 696f 6e3e 0a20  7.10</version>. \n+000004b0: 203c 2f70 6172 656e 743e 0a20 203c 6772   </parent>.  <gr\n+000004c0: 6f75 7049 643e 6f72 672e 6170 6163 6865  oupId>org.apache\n+000004d0: 2e64 7562 626f 3c2f 6772 6f75 7049 643e  .dubbo</groupId>\n+000004e0: 0a20 203c 6172 7469 6661 6374 4964 3e64  .  <artifactId>d\n+000004f0: 7562 626f 2d71 6f73 3c2f 6172 7469 6661  ubbo-qos</artifa\n+00000500: 6374 4964 3e0a 2020 3c76 6572 7369 6f6e  ctId>.  <version\n+00000510: 3e32 2e37 2e31 303c 2f76 6572 7369 6f6e  >2.7.10</version\n+00000520: 3e0a 2020 3c6e 616d 653e 6475 6262 6f2d  >.  <name>dubbo-\n+00000530: 716f 733c 2f6e 616d 653e 0a20 203c 6c69  qos</name>.  <li\n+00000540: 6365 6e73 6573 3e0a 2020 2020 3c6c 6963  censes>.    <lic\n+00000550: 656e 7365 3e0a 2020 2020 2020 3c6e 616d  ense>.      <nam\n+00000560: 653e 4170 6163 6865 204c 6963 656e 7365  e>Apache License\n+00000570: 2c20 5665 7273 696f 6e20 322e 303c 2f6e  , Version 2.0</n\n+00000580: 616d 653e 0a20 2020 2020 203c 7572 6c3e  ame>.      <url>\n+00000590: 6874 7470 3a2f 2f77 7777 2e61 7061 6368  http://www.apach\n+000005a0: 652e 6f72 672f 6c69 6365 6e73 6573 2f4c  e.org/licenses/L\n+000005b0: 4943 454e 5345 2d32 2e30 3c2f 7572 6c3e  ICENSE-2.0</url>\n+000005c0: 0a20 2020 2020 203c 6469 7374 7269 6275  .      <distribu\n+000005d0: 7469 6f6e 3e72 6570 6f3c 2f64 6973 7472  tion>repo</distr\n+000005e0: 6962 7574 696f 6e3e 0a20 2020 203c 2f6c  ibution>.    </l\n+000005f0: 6963 656e 7365 3e0a 2020 3c2f 6c69 6365  icense>.  </lice\n+00000600: 6e73 6573 3e0a 2020 3c70 726f 7065 7274  nses>.  <propert\n+00000610: 6965 733e 0a20 2020 203c 736b 6970 5f6d  ies>.    <skip_m\n+00000620: 6176 656e 5f64 6570 6c6f 793e 6661 6c73  aven_deploy>fals\n+00000630: 653c 2f73 6b69 705f 6d61 7665 6e5f 6465  e</skip_maven_de\n+00000640: 706c 6f79 3e0a 2020 2020 3c70 726f 6a65  ploy>.    <proje\n+00000650: 6374 2e62 7569 6c64 2e73 6f75 7263 6545  ct.build.sourceE\n+00000660: 6e63 6f64 696e 673e 5554 462d 383c 2f70  ncoding>UTF-8</p\n+00000670: 726f 6a65 6374 2e62 7569 6c64 2e73 6f75  roject.build.sou\n+00000680: 7263 6545 6e63 6f64 696e 673e 0a20 203c  rceEncoding>.  <\n+00000690: 2f70 726f 7065 7274 6965 733e 0a20 203c  /properties>.  <\n+000006a0: 6465 7065 6e64 656e 6369 6573 3e0a 2020  dependencies>.  \n+000006b0: 2020 3c64 6570 656e 6465 6e63 793e 0a20    <dependency>. \n+000006c0: 2020 2020 203c 6772 6f75 7049 643e 6f72       <groupId>or\n+000006d0: 672e 6170 6163 6865 2e64 7562 626f 3c2f  g.apache.dubbo</\n+000006e0: 6772 6f75 7049 643e 0a20 2020 2020 203c  groupId>.      <\n+000006f0: 6172 7469 6661 6374 4964 3e64 7562 626f  artifactId>dubbo\n+00000700: 2d63 6f6d 6d6f 6e3c 2f61 7274 6966 6163  -common</artifac\n+00000710: 7449 643e 0a20 2020 2020 203c 7665 7273  tId>.      <vers\n+00000720: 696f 6e3e 247b 7072 6f6a 6563 742e 7665  ion>${project.ve\n+00000730: 7273 696f 6e7d 3c2f 7665 7273 696f 6e3e  rsion}</version>\n+00000740: 0a20 2020 203c 2f64 6570 656e 6465 6e63  .    </dependenc\n+00000750: 793e 0a20 2020 203c 6465 7065 6e64 656e  y>.    <dependen\n+00000760: 6379 3e0a 2020 2020 2020 3c67 726f 7570  cy>.      <group\n+00000770: 4964 3e6f 7267 2e61 7061 6368 652e 6475  Id>org.apache.du\n+00000780: 6262 6f3c 2f67 726f 7570 4964 3e0a 2020  bbo</groupId>.  \n+00000790: 2020 2020 3c61 7274 6966 6163 7449 643e      <artifactId>\n+000007a0: 6475 6262 6f2d 7265 6769 7374 7279 2d61  dubbo-registry-a\n+000007b0: 7069 3c2f 6172 7469 6661 6374 4964 3e0a  pi</artifactId>.\n+000007c0: 2020 2020 2020 3c76 6572 7369 6f6e 3e24        <version>$\n+000007d0: 7b70 726f 6a65 6374 2e76 6572 7369 6f6e  {project.version\n+000007e0: 7d3c 2f76 6572 7369 6f6e 3e0a 2020 2020  }</version>.    \n+000007f0: 3c2f 6465 7065 6e64 656e 6379 3e0a 2020  </dependency>.  \n+00000800: 2020 3c64 6570 656e 6465 6e63 793e 0a20    <dependency>. \n+00000810: 2020 2020 203c 6772 6f75 7049 643e 6f72       <groupId>or\n+00000820: 672e 6170 6163 6865 2e64 7562 626f 3c2f  g.apache.dubbo</\n+00000830: 6772 6f75 7049 643e 0a20 2020 2020 203c  groupId>.      <\n+00000840: 6172 7469 6661 6374 4964 3e64 7562 626f  artifactId>dubbo\n+00000850: 2d63 6f6e 6669 672d 6170 693c 2f61 7274  -config-api</art\n+00000860: 6966 6163 7449 643e 0a20 2020 2020 203c  ifactId>.      <\n+00000870: 7665 7273 696f 6e3e 247b 7072 6f6a 6563  version>${projec\n+00000880: 742e 7665 7273 696f 6e7d 3c2f 7665 7273  t.version}</vers\n+00000890: 696f 6e3e 0a20 2020 203c 2f64 6570 656e  ion>.    </depen\n+000008a0: 6465 6e63 793e 0a20 2020 203c 6465 7065  dency>.    <depe\n+000008b0: 6e64 656e 6379 3e0a 2020 2020 2020 3c67  ndency>.      <g\n+000008c0: 726f 7570 4964 3e6f 7267 2e61 7061 6368  roupId>org.apach\n+000008d0: 652e 6475 6262 6f3c 2f67 726f 7570 4964  e.dubbo</groupId\n+000008e0: 3e0a 2020 2020 2020 3c61 7274 6966 6163  >.      <artifac\n+000008f0: 7449 643e 6475 6262 6f2d 7270 632d 6475  tId>dubbo-rpc-du\n+00000900: 6262 6f3c 2f61 7274 6966 6163 7449 643e  bbo</artifactId>\n+00000910: 0a20 2020 2020 203c 7665 7273 696f 6e3e  .      <version>\n+00000920: 247b 7072 6f6a 6563 742e 7665 7273 696f  ${project.versio\n+00000930: 6e7d 3c2f 7665 7273 696f 6e3e 0a20 2020  n}</version>.   \n+00000940: 203c 2f64 6570 656e 6465 6e63 793e 0a20   </dependency>. \n+00000950: 2020 203c 6465 7065 6e64 656e 6379 3e0a     <dependency>.\n+00000960: 2020 2020 2020 3c67 726f 7570 4964 3e6f        <groupId>o\n+00000970: 7267 2e61 7061 6368 652e 6475 6262 6f3c  rg.apache.dubbo<\n+00000980: 2f67 726f 7570 4964 3e0a 2020 2020 2020  /groupId>.      \n+00000990: 3c61 7274 6966 6163 7449 643e 6475 6262  <artifactId>dubb\n+000009a0: 6f2d 7265 6d6f 7469 6e67 2d6e 6574 7479  o-remoting-netty\n+000009b0: 343c 2f61 7274 6966 6163 7449 643e 0a20  4</artifactId>. \n+000009c0: 2020 2020 203c 7665 7273 696f 6e3e 247b       <version>${\n+000009d0: 7072 6f6a 6563 742e 7665 7273 696f 6e7d  project.version}\n+000009e0: 3c2f 7665 7273 696f 6e3e 0a20 2020 203c  </version>.    <\n+000009f0: 2f64 6570 656e 6465 6e63 793e 0a20 2020  /dependency>.   \n+00000a00: 203c 6465 7065 6e64 656e 6379 3e0a 2020   <dependency>.  \n+00000a10: 2020 2020 3c67 726f 7570 4964 3e6f 7267      <groupId>org\n+00000a20: 2e61 7061 6368 652e 6475 6262 6f3c 2f67  .apache.dubbo</g\n+00000a30: 726f 7570 4964 3e0a 2020 2020 2020 3c61  roupId>.      <a\n+00000a40: 7274 6966 6163 7449 643e 6475 6262 6f2d  rtifactId>dubbo-\n+00000a50: 7365 7269 616c 697a 6174 696f 6e2d 6865  serialization-he\n+00000a60: 7373 6961 6e32 3c2f 6172 7469 6661 6374  ssian2</artifact\n+00000a70: 4964 3e0a 2020 2020 2020 3c76 6572 7369  Id>.      <versi\n+00000a80: 6f6e 3e24 7b70 726f 6a65 6374 2e76 6572  on>${project.ver\n+00000a90: 7369 6f6e 7d3c 2f76 6572 7369 6f6e 3e0a  sion}</version>.\n+00000aa0: 2020 2020 3c2f 6465 7065 6e64 656e 6379      </dependency\n+00000ab0: 3e0a 2020 2020 3c64 6570 656e 6465 6e63  >.    <dependenc\n+00000ac0: 793e 0a20 2020 2020 203c 6772 6f75 7049  y>.      <groupI\n+00000ad0: 643e 696f 2e6e 6574 7479 3c2f 6772 6f75  d>io.netty</grou\n+00000ae0: 7049 643e 0a20 2020 2020 203c 6172 7469  pId>.      <arti\n+00000af0: 6661 6374 4964 3e6e 6574 7479 2d61 6c6c  factId>netty-all\n+00000b00: 3c2f 6172 7469 6661 6374 4964 3e0a 2020  </artifactId>.  \n+00000b10: 2020 3c2f 6465 7065 6e64 656e 6379 3e0a    </dependency>.\n+00000b20: 2020 3c2f 6465 7065 6e64 656e 6369 6573    </dependencies\n+00000b30: 3e0a 3c2f 7072 6f6a 6563 743e 0a         >.</project>.\n"}]}
