{"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: 32584 bytes, number of entries: 38\n+Zip file size: 32685 bytes, number of entries: 38\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/rpc/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/\n@@ -14,27 +14,27 @@\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/dubbo/internal/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-rpc-rest/\n -rw-r--r--  2.0 unx    14493 b- defN 20-Apr-01 08:04 META-INF/DEPENDENCIES\n -rw-r--r--  2.0 unx    11358 b- defN 20-Apr-01 08:04 META-INF/LICENSE\n -rw-r--r--  2.0 unx      171 b- defN 20-Apr-01 08:04 META-INF/NOTICE\n--rw-r--r--  2.0 unx     3030 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/BaseRestProtocolServer.java\n--rw-r--r--  2.0 unx     1012 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/Constants.java\n--rw-r--r--  2.0 unx     4599 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/DubboHttpProtocolServer.java\n+-rw-r--r--  2.0 unx     3110 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/BaseRestProtocolServer.java\n+-rw-r--r--  2.0 unx     1041 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/Constants.java\n+-rw-r--r--  2.0 unx     4730 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/DubboHttpProtocolServer.java\n -rw-r--r--  2.0 unx     2581 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/DubboResourceFactory.java\n--rw-r--r--  2.0 unx     3144 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/NettyRestProtocolServer.java\n+-rw-r--r--  2.0 unx     3217 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/NettyRestProtocolServer.java\n -rw-r--r--  2.0 unx     2017 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/RestConstraintViolation.java\n--rw-r--r--  2.0 unx    12786 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/RestProtocol.java\n--rw-r--r--  2.0 unx     1236 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/RestProtocolServer.java\n--rw-r--r--  2.0 unx     1701 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/RestServerFactory.java\n--rw-r--r--  2.0 unx     4502 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/RpcContextFilter.java\n+-rw-r--r--  2.0 unx    13081 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/RestProtocol.java\n+-rw-r--r--  2.0 unx     1269 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/RestProtocolServer.java\n+-rw-r--r--  2.0 unx     1745 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/RestServerFactory.java\n+-rw-r--r--  2.0 unx     4608 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/RpcContextFilter.java\n -rw-r--r--  2.0 unx     2538 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/RpcExceptionMapper.java\n -rw-r--r--  2.0 unx     1939 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/ViolationReport.java\n -rw-r--r--  2.0 unx     2137 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/integration/swagger/DubboSwaggerApiListingResource.java\n--rw-r--r--  2.0 unx     1734 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/integration/swagger/DubboSwaggerService.java\n+-rw-r--r--  2.0 unx     1776 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/integration/swagger/DubboSwaggerService.java\n -rw-r--r--  2.0 unx     1315 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/support/ContentType.java\n--rw-r--r--  2.0 unx     5479 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/support/LoggingFilter.java\n+-rw-r--r--  2.0 unx     5627 b- defN 20-Apr-01 08:04 org/apache/dubbo/rpc/protocol/rest/support/LoggingFilter.java\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     3999 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-rpc-rest/pom.xml\n+-rw-r--r--  2.0 unx     3888 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-rpc-rest/pom.xml\n -rw-r--r--  2.0 unx       69 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-rpc-rest/pom.properties\n-38 files, 81956 bytes uncompressed, 26414 bytes compressed:  67.8%\n+38 files, 82826 bytes uncompressed, 26515 bytes compressed:  68.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -353,1569 +353,1569 @@\n 1E9B Extract Zip Spec      14 (20) '2.0'\n 1E9C Extract OS            00 (0) 'MS-DOS'\n 1E9D General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n 1E9F Compression Method    0008 (8) 'Deflated'\n 1EA1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1EA5 CRC                   3DF79E03 (1039638019)\n-1EA9 Compressed Size       00000476 (1142)\n-1EAD Uncompressed Size     00000BD6 (3030)\n+1EA5 CRC                   E49ADE4B (3835354699)\n+1EA9 Compressed Size       0000047F (1151)\n+1EAD Uncompressed Size     00000C26 (3110)\n 1EB1 Filename Length       003E (62)\n 1EB3 Extra Length          0000 (0)\n 1EB5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n # WARNING: Offset 0x1EB5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 1EF3 PAYLOAD\n \n-2369 LOCAL HEADER #21      04034B50 (67324752)\n-236D Extract Zip Spec      14 (20) '2.0'\n-236E Extract OS            00 (0) 'MS-DOS'\n-236F General Purpose Flag  0800 (2048)\n+2372 LOCAL HEADER #21      04034B50 (67324752)\n+2376 Extract Zip Spec      14 (20) '2.0'\n+2377 Extract OS            00 (0) 'MS-DOS'\n+2378 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-2371 Compression Method    0008 (8) 'Deflated'\n-2373 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2377 CRC                   4DA1C2B1 (1302446769)\n-237B Compressed Size       0000024A (586)\n-237F Uncompressed Size     000003F4 (1012)\n-2383 Filename Length       0031 (49)\n-2385 Extra Length          0000 (0)\n-2387 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+237A Compression Method    0008 (8) 'Deflated'\n+237C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+2380 CRC                   CAFD8C87 (3405614215)\n+2384 Compressed Size       0000024F (591)\n+2388 Uncompressed Size     00000411 (1041)\n+238C Filename Length       0031 (49)\n+238E Extra Length          0000 (0)\n+2390 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2387: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2390: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-23B8 PAYLOAD\n+23C1 PAYLOAD\n \n-2602 LOCAL HEADER #22      04034B50 (67324752)\n-2606 Extract Zip Spec      14 (20) '2.0'\n-2607 Extract OS            00 (0) 'MS-DOS'\n-2608 General Purpose Flag  0800 (2048)\n+2610 LOCAL HEADER #22      04034B50 (67324752)\n+2614 Extract Zip Spec      14 (20) '2.0'\n+2615 Extract OS            00 (0) 'MS-DOS'\n+2616 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-260A Compression Method    0008 (8) 'Deflated'\n-260C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2610 CRC                   150F0CC2 (353307842)\n-2614 Compressed Size       000005B7 (1463)\n-2618 Uncompressed Size     000011F7 (4599)\n-261C Filename Length       003F (63)\n-261E Extra Length          0000 (0)\n-2620 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2618 Compression Method    0008 (8) 'Deflated'\n+261A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+261E CRC                   3D20A35F (1025549151)\n+2622 Compressed Size       000005C3 (1475)\n+2626 Uncompressed Size     0000127A (4730)\n+262A Filename Length       003F (63)\n+262C Extra Length          0000 (0)\n+262E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2620: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x262E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-265F PAYLOAD\n+266D PAYLOAD\n \n-2C16 LOCAL HEADER #23      04034B50 (67324752)\n-2C1A Extract Zip Spec      14 (20) '2.0'\n-2C1B Extract OS            00 (0) 'MS-DOS'\n-2C1C General Purpose Flag  0800 (2048)\n+2C30 LOCAL HEADER #23      04034B50 (67324752)\n+2C34 Extract Zip Spec      14 (20) '2.0'\n+2C35 Extract OS            00 (0) 'MS-DOS'\n+2C36 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-2C1E Compression Method    0008 (8) 'Deflated'\n-2C20 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2C24 CRC                   74B3513E (1957908798)\n-2C28 Compressed Size       000003A8 (936)\n-2C2C Uncompressed Size     00000A15 (2581)\n-2C30 Filename Length       003C (60)\n-2C32 Extra Length          0000 (0)\n-2C34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2C38 Compression Method    0008 (8) 'Deflated'\n+2C3A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+2C3E CRC                   74B3513E (1957908798)\n+2C42 Compressed Size       000003A8 (936)\n+2C46 Uncompressed Size     00000A15 (2581)\n+2C4A Filename Length       003C (60)\n+2C4C Extra Length          0000 (0)\n+2C4E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2C34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2C4E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2C70 PAYLOAD\n+2C8A PAYLOAD\n \n-3018 LOCAL HEADER #24      04034B50 (67324752)\n-301C Extract Zip Spec      14 (20) '2.0'\n-301D Extract OS            00 (0) 'MS-DOS'\n-301E General Purpose Flag  0800 (2048)\n+3032 LOCAL HEADER #24      04034B50 (67324752)\n+3036 Extract Zip Spec      14 (20) '2.0'\n+3037 Extract OS            00 (0) 'MS-DOS'\n+3038 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3020 Compression Method    0008 (8) 'Deflated'\n-3022 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3026 CRC                   59C6BCF2 (1506196722)\n-302A Compressed Size       00000478 (1144)\n-302E Uncompressed Size     00000C48 (3144)\n-3032 Filename Length       003F (63)\n-3034 Extra Length          0000 (0)\n-3036 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+303A Compression Method    0008 (8) 'Deflated'\n+303C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3040 CRC                   755A7982 (1968863618)\n+3044 Compressed Size       00000484 (1156)\n+3048 Uncompressed Size     00000C91 (3217)\n+304C Filename Length       003F (63)\n+304E Extra Length          0000 (0)\n+3050 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3036: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3050: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3075 PAYLOAD\n+308F PAYLOAD\n \n-34ED LOCAL HEADER #25      04034B50 (67324752)\n-34F1 Extract Zip Spec      14 (20) '2.0'\n-34F2 Extract OS            00 (0) 'MS-DOS'\n-34F3 General Purpose Flag  0800 (2048)\n+3513 LOCAL HEADER #25      04034B50 (67324752)\n+3517 Extract Zip Spec      14 (20) '2.0'\n+3518 Extract OS            00 (0) 'MS-DOS'\n+3519 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-34F5 Compression Method    0008 (8) 'Deflated'\n-34F7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-34FB CRC                   CB062A84 (3406178948)\n-34FF Compressed Size       00000327 (807)\n-3503 Uncompressed Size     000007E1 (2017)\n-3507 Filename Length       003F (63)\n-3509 Extra Length          0000 (0)\n-350B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+351B Compression Method    0008 (8) 'Deflated'\n+351D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3521 CRC                   CB062A84 (3406178948)\n+3525 Compressed Size       00000327 (807)\n+3529 Uncompressed Size     000007E1 (2017)\n+352D Filename Length       003F (63)\n+352F Extra Length          0000 (0)\n+3531 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x350B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3531: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-354A PAYLOAD\n+3570 PAYLOAD\n \n-3871 LOCAL HEADER #26      04034B50 (67324752)\n-3875 Extract Zip Spec      14 (20) '2.0'\n-3876 Extract OS            00 (0) 'MS-DOS'\n-3877 General Purpose Flag  0800 (2048)\n+3897 LOCAL HEADER #26      04034B50 (67324752)\n+389B Extract Zip Spec      14 (20) '2.0'\n+389C Extract OS            00 (0) 'MS-DOS'\n+389D General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3879 Compression Method    0008 (8) 'Deflated'\n-387B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-387F CRC                   8E964D75 (2392214901)\n-3883 Compressed Size       00000DC2 (3522)\n-3887 Uncompressed Size     000031F2 (12786)\n-388B Filename Length       0034 (52)\n-388D Extra Length          0000 (0)\n-388F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+389F Compression Method    0008 (8) 'Deflated'\n+38A1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+38A5 CRC                   D7522A4D (3612486221)\n+38A9 Compressed Size       00000DD4 (3540)\n+38AD Uncompressed Size     00003319 (13081)\n+38B1 Filename Length       0034 (52)\n+38B3 Extra Length          0000 (0)\n+38B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x388F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x38B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-38C3 PAYLOAD\n+38E9 PAYLOAD\n \n-4685 LOCAL HEADER #27      04034B50 (67324752)\n-4689 Extract Zip Spec      14 (20) '2.0'\n-468A Extract OS            00 (0) 'MS-DOS'\n-468B General Purpose Flag  0800 (2048)\n+46BD LOCAL HEADER #27      04034B50 (67324752)\n+46C1 Extract Zip Spec      14 (20) '2.0'\n+46C2 Extract OS            00 (0) 'MS-DOS'\n+46C3 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-468D Compression Method    0008 (8) 'Deflated'\n-468F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-4693 CRC                   2E39C29D (775537309)\n-4697 Compressed Size       00000288 (648)\n-469B Uncompressed Size     000004D4 (1236)\n-469F Filename Length       003A (58)\n-46A1 Extra Length          0000 (0)\n-46A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+46C5 Compression Method    0008 (8) 'Deflated'\n+46C7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+46CB CRC                   6BBB41BD (1807434173)\n+46CF Compressed Size       00000290 (656)\n+46D3 Uncompressed Size     000004F5 (1269)\n+46D7 Filename Length       003A (58)\n+46D9 Extra Length          0000 (0)\n+46DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x46A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x46DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-46DD PAYLOAD\n+4715 PAYLOAD\n \n-4965 LOCAL HEADER #28      04034B50 (67324752)\n-4969 Extract Zip Spec      14 (20) '2.0'\n-496A Extract OS            00 (0) 'MS-DOS'\n-496B General Purpose Flag  0800 (2048)\n+49A5 LOCAL HEADER #28      04034B50 (67324752)\n+49A9 Extract Zip Spec      14 (20) '2.0'\n+49AA Extract OS            00 (0) 'MS-DOS'\n+49AB General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-496D Compression Method    0008 (8) 'Deflated'\n-496F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-4973 CRC                   8AE5D3FF (2330317823)\n-4977 Compressed Size       00000334 (820)\n-497B Uncompressed Size     000006A5 (1701)\n-497F Filename Length       0039 (57)\n-4981 Extra Length          0000 (0)\n-4983 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+49AD Compression Method    0008 (8) 'Deflated'\n+49AF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+49B3 CRC                   086F2C9C (141503644)\n+49B7 Compressed Size       0000033C (828)\n+49BB Uncompressed Size     000006D1 (1745)\n+49BF Filename Length       0039 (57)\n+49C1 Extra Length          0000 (0)\n+49C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4983: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x49C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-49BC PAYLOAD\n+49FC PAYLOAD\n \n-4CF0 LOCAL HEADER #29      04034B50 (67324752)\n-4CF4 Extract Zip Spec      14 (20) '2.0'\n-4CF5 Extract OS            00 (0) 'MS-DOS'\n-4CF6 General Purpose Flag  0800 (2048)\n+4D38 LOCAL HEADER #29      04034B50 (67324752)\n+4D3C Extract Zip Spec      14 (20) '2.0'\n+4D3D Extract OS            00 (0) 'MS-DOS'\n+4D3E General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-4CF8 Compression Method    0008 (8) 'Deflated'\n-4CFA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-4CFE CRC                   1149E8E6 (290056422)\n-4D02 Compressed Size       0000063B (1595)\n-4D06 Uncompressed Size     00001196 (4502)\n-4D0A Filename Length       0038 (56)\n-4D0C Extra Length          0000 (0)\n-4D0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4D40 Compression Method    0008 (8) 'Deflated'\n+4D42 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+4D46 CRC                   A0E895BE (2699597246)\n+4D4A Compressed Size       00000649 (1609)\n+4D4E Uncompressed Size     00001200 (4608)\n+4D52 Filename Length       0038 (56)\n+4D54 Extra Length          0000 (0)\n+4D56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4D0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4D56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-4D46 PAYLOAD\n+4D8E PAYLOAD\n \n-5381 LOCAL HEADER #30      04034B50 (67324752)\n-5385 Extract Zip Spec      14 (20) '2.0'\n-5386 Extract OS            00 (0) 'MS-DOS'\n-5387 General Purpose Flag  0800 (2048)\n+53D7 LOCAL HEADER #30      04034B50 (67324752)\n+53DB Extract Zip Spec      14 (20) '2.0'\n+53DC Extract OS            00 (0) 'MS-DOS'\n+53DD General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-5389 Compression Method    0008 (8) 'Deflated'\n-538B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-538F CRC                   939A92A5 (2476380837)\n-5393 Compressed Size       0000040C (1036)\n-5397 Uncompressed Size     000009EA (2538)\n-539B Filename Length       003A (58)\n-539D Extra Length          0000 (0)\n-539F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+53DF Compression Method    0008 (8) 'Deflated'\n+53E1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+53E5 CRC                   939A92A5 (2476380837)\n+53E9 Compressed Size       0000040C (1036)\n+53ED Uncompressed Size     000009EA (2538)\n+53F1 Filename Length       003A (58)\n+53F3 Extra Length          0000 (0)\n+53F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x539F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x53F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-53D9 PAYLOAD\n+542F PAYLOAD\n \n-57E5 LOCAL HEADER #31      04034B50 (67324752)\n-57E9 Extract Zip Spec      14 (20) '2.0'\n-57EA Extract OS            00 (0) 'MS-DOS'\n-57EB General Purpose Flag  0800 (2048)\n+583B LOCAL HEADER #31      04034B50 (67324752)\n+583F Extract Zip Spec      14 (20) '2.0'\n+5840 Extract OS            00 (0) 'MS-DOS'\n+5841 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-57ED Compression Method    0008 (8) 'Deflated'\n-57EF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-57F3 CRC                   4DDA4FAB (1306152875)\n-57F7 Compressed Size       0000031F (799)\n-57FB Uncompressed Size     00000793 (1939)\n-57FF Filename Length       0037 (55)\n-5801 Extra Length          0000 (0)\n-5803 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5843 Compression Method    0008 (8) 'Deflated'\n+5845 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5849 CRC                   4DDA4FAB (1306152875)\n+584D Compressed Size       0000031F (799)\n+5851 Uncompressed Size     00000793 (1939)\n+5855 Filename Length       0037 (55)\n+5857 Extra Length          0000 (0)\n+5859 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5803: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5859: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-583A PAYLOAD\n+5890 PAYLOAD\n \n-5B59 LOCAL HEADER #32      04034B50 (67324752)\n-5B5D Extract Zip Spec      14 (20) '2.0'\n-5B5E Extract OS            00 (0) 'MS-DOS'\n-5B5F General Purpose Flag  0800 (2048)\n+5BAF LOCAL HEADER #32      04034B50 (67324752)\n+5BB3 Extract Zip Spec      14 (20) '2.0'\n+5BB4 Extract OS            00 (0) 'MS-DOS'\n+5BB5 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-5B61 Compression Method    0008 (8) 'Deflated'\n-5B63 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5B67 CRC                   E3F9F330 (3824808752)\n-5B6B Compressed Size       00000397 (919)\n-5B6F Uncompressed Size     00000859 (2137)\n-5B73 Filename Length       005A (90)\n-5B75 Extra Length          0000 (0)\n-5B77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5BB7 Compression Method    0008 (8) 'Deflated'\n+5BB9 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5BBD CRC                   E3F9F330 (3824808752)\n+5BC1 Compressed Size       00000397 (919)\n+5BC5 Uncompressed Size     00000859 (2137)\n+5BC9 Filename Length       005A (90)\n+5BCB Extra Length          0000 (0)\n+5BCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5B77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5BCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5BD1 PAYLOAD\n+5C27 PAYLOAD\n \n-5F68 LOCAL HEADER #33      04034B50 (67324752)\n-5F6C Extract Zip Spec      14 (20) '2.0'\n-5F6D Extract OS            00 (0) 'MS-DOS'\n-5F6E General Purpose Flag  0800 (2048)\n+5FBE LOCAL HEADER #33      04034B50 (67324752)\n+5FC2 Extract Zip Spec      14 (20) '2.0'\n+5FC3 Extract OS            00 (0) 'MS-DOS'\n+5FC4 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-5F70 Compression Method    0008 (8) 'Deflated'\n-5F72 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-5F76 CRC                   FF2D0DF3 (4281142771)\n-5F7A Compressed Size       00000329 (809)\n-5F7E Uncompressed Size     000006C6 (1734)\n-5F82 Filename Length       004F (79)\n-5F84 Extra Length          0000 (0)\n-5F86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5FC6 Compression Method    0008 (8) 'Deflated'\n+5FC8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+5FCC CRC                   879AD63A (2275071546)\n+5FD0 Compressed Size       00000331 (817)\n+5FD4 Uncompressed Size     000006F0 (1776)\n+5FD8 Filename Length       004F (79)\n+5FDA Extra Length          0000 (0)\n+5FDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5F86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5FDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5FD5 PAYLOAD\n+602B PAYLOAD\n \n-62FE LOCAL HEADER #34      04034B50 (67324752)\n-6302 Extract Zip Spec      14 (20) '2.0'\n-6303 Extract OS            00 (0) 'MS-DOS'\n-6304 General Purpose Flag  0800 (2048)\n+635C LOCAL HEADER #34      04034B50 (67324752)\n+6360 Extract Zip Spec      14 (20) '2.0'\n+6361 Extract OS            00 (0) 'MS-DOS'\n+6362 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-6306 Compression Method    0008 (8) 'Deflated'\n-6308 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-630C CRC                   FC72AE7D (4235374205)\n-6310 Compressed Size       0000028A (650)\n-6314 Uncompressed Size     00000523 (1315)\n-6318 Filename Length       003B (59)\n-631A Extra Length          0000 (0)\n-631C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+6364 Compression Method    0008 (8) 'Deflated'\n+6366 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+636A CRC                   FC72AE7D (4235374205)\n+636E Compressed Size       0000028A (650)\n+6372 Uncompressed Size     00000523 (1315)\n+6376 Filename Length       003B (59)\n+6378 Extra Length          0000 (0)\n+637A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x631C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x637A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-6357 PAYLOAD\n+63B5 PAYLOAD\n \n-65E1 LOCAL HEADER #35      04034B50 (67324752)\n-65E5 Extract Zip Spec      14 (20) '2.0'\n-65E6 Extract OS            00 (0) 'MS-DOS'\n-65E7 General Purpose Flag  0800 (2048)\n+663F LOCAL HEADER #35      04034B50 (67324752)\n+6643 Extract Zip Spec      14 (20) '2.0'\n+6644 Extract OS            00 (0) 'MS-DOS'\n+6645 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-65E9 Compression Method    0008 (8) 'Deflated'\n-65EB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-65EF CRC                   DD3F3E44 (3711909444)\n-65F3 Compressed Size       00000616 (1558)\n-65F7 Uncompressed Size     00001567 (5479)\n-65FB Filename Length       003D (61)\n-65FD Extra Length          0000 (0)\n-65FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+6647 Compression Method    0008 (8) 'Deflated'\n+6649 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+664D CRC                   98665538 (2556843320)\n+6651 Compressed Size       00000626 (1574)\n+6655 Uncompressed Size     000015FB (5627)\n+6659 Filename Length       003D (61)\n+665B Extra Length          0000 (0)\n+665D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x65FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x665D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-663C PAYLOAD\n+669A PAYLOAD\n \n-6C52 LOCAL HEADER #36      04034B50 (67324752)\n-6C56 Extract Zip Spec      14 (20) '2.0'\n-6C57 Extract OS            00 (0) 'MS-DOS'\n-6C58 General Purpose Flag  0800 (2048)\n+6CC0 LOCAL HEADER #36      04034B50 (67324752)\n+6CC4 Extract Zip Spec      14 (20) '2.0'\n+6CC5 Extract OS            00 (0) 'MS-DOS'\n+6CC6 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-6C5A Compression Method    0008 (8) 'Deflated'\n-6C5C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-6C60 CRC                   654AD933 (1699404083)\n-6C64 Compressed Size       0000002E (46)\n-6C68 Uncompressed Size     00000034 (52)\n-6C6C Filename Length       0035 (53)\n-6C6E Extra Length          0000 (0)\n-6C70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+6CC8 Compression Method    0008 (8) 'Deflated'\n+6CCA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6CCE CRC                   654AD933 (1699404083)\n+6CD2 Compressed Size       0000002E (46)\n+6CD6 Uncompressed Size     00000034 (52)\n+6CDA Filename Length       0035 (53)\n+6CDC Extra Length          0000 (0)\n+6CDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6C70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6CDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-6CA5 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+6D13 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-6CD3 LOCAL HEADER #37      04034B50 (67324752)\n-6CD7 Extract Zip Spec      14 (20) '2.0'\n-6CD8 Extract OS            00 (0) 'MS-DOS'\n-6CD9 General Purpose Flag  0800 (2048)\n+6D41 LOCAL HEADER #37      04034B50 (67324752)\n+6D45 Extract Zip Spec      14 (20) '2.0'\n+6D46 Extract OS            00 (0) 'MS-DOS'\n+6D47 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-6CDB Compression Method    0008 (8) 'Deflated'\n-6CDD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-6CE1 CRC                   B2FF8BF3 (3003091955)\n-6CE5 Compressed Size       0000043B (1083)\n-6CE9 Uncompressed Size     00000F9F (3999)\n-6CED Filename Length       0036 (54)\n-6CEF Extra Length          0000 (0)\n-6CF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+6D49 Compression Method    0008 (8) 'Deflated'\n+6D4B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+6D4F CRC                   E36316D8 (3814921944)\n+6D53 Compressed Size       00000432 (1074)\n+6D57 Uncompressed Size     00000F30 (3888)\n+6D5B Filename Length       0036 (54)\n+6D5D Extra Length          0000 (0)\n+6D5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x6CF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x6D5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-6D27 PAYLOAD\n+6D95 PAYLOAD\n \n-7162 LOCAL HEADER #38      04034B50 (67324752)\n-7166 Extract Zip Spec      14 (20) '2.0'\n-7167 Extract OS            00 (0) 'MS-DOS'\n-7168 General Purpose Flag  0800 (2048)\n+71C7 LOCAL HEADER #38      04034B50 (67324752)\n+71CB Extract Zip Spec      14 (20) '2.0'\n+71CC Extract OS            00 (0) 'MS-DOS'\n+71CD General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-716A Compression Method    0008 (8) 'Deflated'\n-716C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7170 CRC                   A1DBB70A (2715531018)\n-7174 Compressed Size       00000043 (67)\n-7178 Uncompressed Size     00000045 (69)\n-717C Filename Length       003D (61)\n-717E Extra Length          0000 (0)\n-7180 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+71CF Compression Method    0008 (8) 'Deflated'\n+71D1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+71D5 CRC                   A1DBB70A (2715531018)\n+71D9 Compressed Size       00000043 (67)\n+71DD Uncompressed Size     00000045 (69)\n+71E1 Filename Length       003D (61)\n+71E3 Extra Length          0000 (0)\n+71E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7180: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x71E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-71BD PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+7222 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-7200 CENTRAL HEADER #1     02014B50 (33639248)\n-7204 Created Zip Spec      14 (20) '2.0'\n-7205 Created OS            03 (3) 'Unix'\n-7206 Extract Zip Spec      14 (20) '2.0'\n-7207 Extract OS            00 (0) 'MS-DOS'\n-7208 General Purpose Flag  0800 (2048)\n+7265 CENTRAL HEADER #1     02014B50 (33639248)\n+7269 Created Zip Spec      14 (20) '2.0'\n+726A Created OS            03 (3) 'Unix'\n+726B Extract Zip Spec      14 (20) '2.0'\n+726C Extract OS            00 (0) 'MS-DOS'\n+726D General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-720A Compression Method    0008 (8) 'Deflated'\n-720C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7210 CRC                   A689EB18 (2794056472)\n-7214 Compressed Size       00000042 (66)\n-7218 Uncompressed Size     00000040 (64)\n-721C Filename Length       0014 (20)\n-721E Extra Length          0000 (0)\n-7220 Comment Length        0000 (0)\n-7222 Disk Start            0000 (0)\n-7224 Int File Attributes   0000 (0)\n+726F Compression Method    0008 (8) 'Deflated'\n+7271 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7275 CRC                   A689EB18 (2794056472)\n+7279 Compressed Size       00000042 (66)\n+727D Uncompressed Size     00000040 (64)\n+7281 Filename Length       0014 (20)\n+7283 Extra Length          0000 (0)\n+7285 Comment Length        0000 (0)\n+7287 Disk Start            0000 (0)\n+7289 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7226 Ext File Attributes   81A40000 (2175008768)\n+728B 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-722A Local Header Offset   00000000 (0)\n-722E Filename              'XXXXXXXXXXXXXXXXXXXX'\n+728F Local Header Offset   00000000 (0)\n+7293 Filename              'XXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x722E: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7293: Filename 'XXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7242 CENTRAL HEADER #2     02014B50 (33639248)\n-7246 Created Zip Spec      14 (20) '2.0'\n-7247 Created OS            03 (3) 'Unix'\n-7248 Extract Zip Spec      0A (10) '1.0'\n-7249 Extract OS            00 (0) 'MS-DOS'\n-724A General Purpose Flag  0800 (2048)\n+72A7 CENTRAL HEADER #2     02014B50 (33639248)\n+72AB Created Zip Spec      14 (20) '2.0'\n+72AC Created OS            03 (3) 'Unix'\n+72AD Extract Zip Spec      0A (10) '1.0'\n+72AE Extract OS            00 (0) 'MS-DOS'\n+72AF General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-724C Compression Method    0000 (0) 'Stored'\n-724E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7252 CRC                   00000000 (0)\n-7256 Compressed Size       00000000 (0)\n-725A Uncompressed Size     00000000 (0)\n-725E Filename Length       0009 (9)\n-7260 Extra Length          0000 (0)\n-7262 Comment Length        0000 (0)\n-7264 Disk Start            0000 (0)\n-7266 Int File Attributes   0000 (0)\n+72B1 Compression Method    0000 (0) 'Stored'\n+72B3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+72B7 CRC                   00000000 (0)\n+72BB Compressed Size       00000000 (0)\n+72BF Uncompressed Size     00000000 (0)\n+72C3 Filename Length       0009 (9)\n+72C5 Extra Length          0000 (0)\n+72C7 Comment Length        0000 (0)\n+72C9 Disk Start            0000 (0)\n+72CB Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7268 Ext File Attributes   41ED0010 (1106051088)\n+72CD 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-726C Local Header Offset   00000074 (116)\n-7270 Filename              'XXXXXXXXX'\n+72D1 Local Header Offset   00000074 (116)\n+72D5 Filename              'XXXXXXXXX'\n #\n-# WARNING: Offset 0x7270: Filename 'XXXXXXXXX'\n+# WARNING: Offset 0x72D5: Filename 'XXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x7270: Directory 'XXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x72D5: Directory 'XXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x7248: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n+# WARNING: Offset 0x72AD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n #\n \n-7279 CENTRAL HEADER #3     02014B50 (33639248)\n-727D Created Zip Spec      14 (20) '2.0'\n-727E Created OS            03 (3) 'Unix'\n-727F Extract Zip Spec      0A (10) '1.0'\n-7280 Extract OS            00 (0) 'MS-DOS'\n-7281 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-7283 Compression Method    0000 (0) 'Stored'\n-7285 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7289 CRC                   00000000 (0)\n-728D Compressed Size       00000000 (0)\n-7291 Uncompressed Size     00000000 (0)\n-7295 Filename Length       0004 (4)\n-7297 Extra Length          0000 (0)\n-7299 Comment Length        0000 (0)\n-729B Disk Start            0000 (0)\n-729D Int File Attributes   0000 (0)\n+72DE CENTRAL HEADER #3     02014B50 (33639248)\n+72E2 Created Zip Spec      14 (20) '2.0'\n+72E3 Created OS            03 (3) 'Unix'\n+72E4 Extract Zip Spec      0A (10) '1.0'\n+72E5 Extract OS            00 (0) 'MS-DOS'\n+72E6 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+72E8 Compression Method    0000 (0) 'Stored'\n+72EA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+72EE CRC                   00000000 (0)\n+72F2 Compressed Size       00000000 (0)\n+72F6 Uncompressed Size     00000000 (0)\n+72FA Filename Length       0004 (4)\n+72FC Extra Length          0000 (0)\n+72FE Comment Length        0000 (0)\n+7300 Disk Start            0000 (0)\n+7302 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-729F Ext File Attributes   41ED0010 (1106051088)\n+7304 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-72A3 Local Header Offset   0000009B (155)\n-72A7 Filename              'XXXX'\n+7308 Local Header Offset   0000009B (155)\n+730C Filename              'XXXX'\n #\n-# WARNING: Offset 0x72A7: Filename 'XXXX'\n+# WARNING: Offset 0x730C: Filename 'XXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x72A7: Directory 'XXXX' must end in a '/'\n+# ERROR: Offset 0x730C: Directory 'XXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x727F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n+# WARNING: Offset 0x72E4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n #\n \n-72AB CENTRAL HEADER #4     02014B50 (33639248)\n-72AF Created Zip Spec      14 (20) '2.0'\n-72B0 Created OS            03 (3) 'Unix'\n-72B1 Extract Zip Spec      0A (10) '1.0'\n-72B2 Extract OS            00 (0) 'MS-DOS'\n-72B3 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-72B5 Compression Method    0000 (0) 'Stored'\n-72B7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-72BB CRC                   00000000 (0)\n-72BF Compressed Size       00000000 (0)\n-72C3 Uncompressed Size     00000000 (0)\n-72C7 Filename Length       000B (11)\n-72C9 Extra Length          0000 (0)\n-72CB Comment Length        0000 (0)\n-72CD Disk Start            0000 (0)\n-72CF Int File Attributes   0000 (0)\n+7310 CENTRAL HEADER #4     02014B50 (33639248)\n+7314 Created Zip Spec      14 (20) '2.0'\n+7315 Created OS            03 (3) 'Unix'\n+7316 Extract Zip Spec      0A (10) '1.0'\n+7317 Extract OS            00 (0) 'MS-DOS'\n+7318 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+731A Compression Method    0000 (0) 'Stored'\n+731C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7320 CRC                   00000000 (0)\n+7324 Compressed Size       00000000 (0)\n+7328 Uncompressed Size     00000000 (0)\n+732C Filename Length       000B (11)\n+732E Extra Length          0000 (0)\n+7330 Comment Length        0000 (0)\n+7332 Disk Start            0000 (0)\n+7334 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-72D1 Ext File Attributes   41ED0010 (1106051088)\n+7336 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-72D5 Local Header Offset   000000BD (189)\n-72D9 Filename              'XXXXXXXXXXX'\n+733A Local Header Offset   000000BD (189)\n+733E Filename              'XXXXXXXXXXX'\n #\n-# WARNING: Offset 0x72D9: Filename 'XXXXXXXXXXX'\n+# WARNING: Offset 0x733E: Filename 'XXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x72D9: Directory 'XXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x733E: Directory 'XXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x72B1: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n+# WARNING: Offset 0x7316: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n #\n \n-72E4 CENTRAL HEADER #5     02014B50 (33639248)\n-72E8 Created Zip Spec      14 (20) '2.0'\n-72E9 Created OS            03 (3) 'Unix'\n-72EA Extract Zip Spec      0A (10) '1.0'\n-72EB Extract OS            00 (0) 'MS-DOS'\n-72EC General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-72EE Compression Method    0000 (0) 'Stored'\n-72F0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-72F4 CRC                   00000000 (0)\n-72F8 Compressed Size       00000000 (0)\n-72FC Uncompressed Size     00000000 (0)\n-7300 Filename Length       0011 (17)\n-7302 Extra Length          0000 (0)\n-7304 Comment Length        0000 (0)\n-7306 Disk Start            0000 (0)\n-7308 Int File Attributes   0000 (0)\n+7349 CENTRAL HEADER #5     02014B50 (33639248)\n+734D Created Zip Spec      14 (20) '2.0'\n+734E Created OS            03 (3) 'Unix'\n+734F Extract Zip Spec      0A (10) '1.0'\n+7350 Extract OS            00 (0) 'MS-DOS'\n+7351 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+7353 Compression Method    0000 (0) 'Stored'\n+7355 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7359 CRC                   00000000 (0)\n+735D Compressed Size       00000000 (0)\n+7361 Uncompressed Size     00000000 (0)\n+7365 Filename Length       0011 (17)\n+7367 Extra Length          0000 (0)\n+7369 Comment Length        0000 (0)\n+736B Disk Start            0000 (0)\n+736D Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-730A Ext File Attributes   41ED0010 (1106051088)\n+736F 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-730E Local Header Offset   000000E6 (230)\n-7312 Filename              'XXXXXXXXXXXXXXXXX'\n+7373 Local Header Offset   000000E6 (230)\n+7377 Filename              'XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7312: Filename 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7377: Filename 'XXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x7312: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x7377: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x72EA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x734F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n #\n \n-7323 CENTRAL HEADER #6     02014B50 (33639248)\n-7327 Created Zip Spec      14 (20) '2.0'\n-7328 Created OS            03 (3) 'Unix'\n-7329 Extract Zip Spec      0A (10) '1.0'\n-732A Extract OS            00 (0) 'MS-DOS'\n-732B General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-732D Compression Method    0000 (0) 'Stored'\n-732F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7333 CRC                   00000000 (0)\n-7337 Compressed Size       00000000 (0)\n-733B Uncompressed Size     00000000 (0)\n-733F Filename Length       0015 (21)\n-7341 Extra Length          0000 (0)\n-7343 Comment Length        0000 (0)\n-7345 Disk Start            0000 (0)\n-7347 Int File Attributes   0000 (0)\n+7388 CENTRAL HEADER #6     02014B50 (33639248)\n+738C Created Zip Spec      14 (20) '2.0'\n+738D Created OS            03 (3) 'Unix'\n+738E Extract Zip Spec      0A (10) '1.0'\n+738F Extract OS            00 (0) 'MS-DOS'\n+7390 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+7392 Compression Method    0000 (0) 'Stored'\n+7394 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7398 CRC                   00000000 (0)\n+739C Compressed Size       00000000 (0)\n+73A0 Uncompressed Size     00000000 (0)\n+73A4 Filename Length       0015 (21)\n+73A6 Extra Length          0000 (0)\n+73A8 Comment Length        0000 (0)\n+73AA Disk Start            0000 (0)\n+73AC Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7349 Ext File Attributes   41ED0010 (1106051088)\n+73AE 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-734D Local Header Offset   00000115 (277)\n-7351 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+73B2 Local Header Offset   00000115 (277)\n+73B6 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7351: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x73B6: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x7351: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x73B6: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x7329: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x738E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n #\n \n-7366 CENTRAL HEADER #7     02014B50 (33639248)\n-736A Created Zip Spec      14 (20) '2.0'\n-736B Created OS            03 (3) 'Unix'\n-736C Extract Zip Spec      0A (10) '1.0'\n-736D Extract OS            00 (0) 'MS-DOS'\n-736E General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-7370 Compression Method    0000 (0) 'Stored'\n-7372 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7376 CRC                   00000000 (0)\n-737A Compressed Size       00000000 (0)\n-737E Uncompressed Size     00000000 (0)\n-7382 Filename Length       001E (30)\n-7384 Extra Length          0000 (0)\n-7386 Comment Length        0000 (0)\n-7388 Disk Start            0000 (0)\n-738A Int File Attributes   0000 (0)\n+73CB CENTRAL HEADER #7     02014B50 (33639248)\n+73CF Created Zip Spec      14 (20) '2.0'\n+73D0 Created OS            03 (3) 'Unix'\n+73D1 Extract Zip Spec      0A (10) '1.0'\n+73D2 Extract OS            00 (0) 'MS-DOS'\n+73D3 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+73D5 Compression Method    0000 (0) 'Stored'\n+73D7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+73DB CRC                   00000000 (0)\n+73DF Compressed Size       00000000 (0)\n+73E3 Uncompressed Size     00000000 (0)\n+73E7 Filename Length       001E (30)\n+73E9 Extra Length          0000 (0)\n+73EB Comment Length        0000 (0)\n+73ED Disk Start            0000 (0)\n+73EF Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-738C Ext File Attributes   41ED0010 (1106051088)\n+73F1 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-7390 Local Header Offset   00000148 (328)\n-7394 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+73F5 Local Header Offset   00000148 (328)\n+73F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7394: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x73F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x7394: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x73F9: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x736C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x73D1: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-73B2 CENTRAL HEADER #8     02014B50 (33639248)\n-73B6 Created Zip Spec      14 (20) '2.0'\n-73B7 Created OS            03 (3) 'Unix'\n-73B8 Extract Zip Spec      0A (10) '1.0'\n-73B9 Extract OS            00 (0) 'MS-DOS'\n-73BA General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-73BC Compression Method    0000 (0) 'Stored'\n-73BE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-73C2 CRC                   00000000 (0)\n-73C6 Compressed Size       00000000 (0)\n-73CA Uncompressed Size     00000000 (0)\n-73CE Filename Length       0023 (35)\n-73D0 Extra Length          0000 (0)\n-73D2 Comment Length        0000 (0)\n-73D4 Disk Start            0000 (0)\n-73D6 Int File Attributes   0000 (0)\n+7417 CENTRAL HEADER #8     02014B50 (33639248)\n+741B Created Zip Spec      14 (20) '2.0'\n+741C Created OS            03 (3) 'Unix'\n+741D Extract Zip Spec      0A (10) '1.0'\n+741E Extract OS            00 (0) 'MS-DOS'\n+741F General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+7421 Compression Method    0000 (0) 'Stored'\n+7423 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7427 CRC                   00000000 (0)\n+742B Compressed Size       00000000 (0)\n+742F Uncompressed Size     00000000 (0)\n+7433 Filename Length       0023 (35)\n+7435 Extra Length          0000 (0)\n+7437 Comment Length        0000 (0)\n+7439 Disk Start            0000 (0)\n+743B Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-73D8 Ext File Attributes   41ED0010 (1106051088)\n+743D 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-73DC Local Header Offset   00000184 (388)\n-73E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7441 Local Header Offset   00000184 (388)\n+7445 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x73E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7445: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x73E0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x7445: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x73B8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x741D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-7403 CENTRAL HEADER #9     02014B50 (33639248)\n-7407 Created Zip Spec      14 (20) '2.0'\n-7408 Created OS            03 (3) 'Unix'\n-7409 Extract Zip Spec      0A (10) '1.0'\n-740A Extract OS            00 (0) 'MS-DOS'\n-740B General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-740D Compression Method    0000 (0) 'Stored'\n-740F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7413 CRC                   00000000 (0)\n-7417 Compressed Size       00000000 (0)\n-741B Uncompressed Size     00000000 (0)\n-741F Filename Length       002F (47)\n-7421 Extra Length          0000 (0)\n-7423 Comment Length        0000 (0)\n-7425 Disk Start            0000 (0)\n-7427 Int File Attributes   0000 (0)\n+7468 CENTRAL HEADER #9     02014B50 (33639248)\n+746C Created Zip Spec      14 (20) '2.0'\n+746D Created OS            03 (3) 'Unix'\n+746E Extract Zip Spec      0A (10) '1.0'\n+746F Extract OS            00 (0) 'MS-DOS'\n+7470 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+7472 Compression Method    0000 (0) 'Stored'\n+7474 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7478 CRC                   00000000 (0)\n+747C Compressed Size       00000000 (0)\n+7480 Uncompressed Size     00000000 (0)\n+7484 Filename Length       002F (47)\n+7486 Extra Length          0000 (0)\n+7488 Comment Length        0000 (0)\n+748A Disk Start            0000 (0)\n+748C Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7429 Ext File Attributes   41ED0010 (1106051088)\n+748E 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-742D Local Header Offset   000001C5 (453)\n-7431 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7492 Local Header Offset   000001C5 (453)\n+7496 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7431: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7496: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x7431: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x7496: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x7409: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x746E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-7460 CENTRAL HEADER #10    02014B50 (33639248)\n-7464 Created Zip Spec      14 (20) '2.0'\n-7465 Created OS            03 (3) 'Unix'\n-7466 Extract Zip Spec      0A (10) '1.0'\n-7467 Extract OS            00 (0) 'MS-DOS'\n-7468 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-746A Compression Method    0000 (0) 'Stored'\n-746C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7470 CRC                   00000000 (0)\n-7474 Compressed Size       00000000 (0)\n-7478 Uncompressed Size     00000000 (0)\n-747C Filename Length       0037 (55)\n-747E Extra Length          0000 (0)\n-7480 Comment Length        0000 (0)\n-7482 Disk Start            0000 (0)\n-7484 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-7486 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-748A Local Header Offset   00000212 (530)\n-748E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x748E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-# ERROR: Offset 0x748E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n-#        'External Attributes' flag this as a directory\n-#\n-# WARNING: Offset 0x7466: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-\n-74C5 CENTRAL HEADER #11    02014B50 (33639248)\n+74C5 CENTRAL HEADER #10    02014B50 (33639248)\n 74C9 Created Zip Spec      14 (20) '2.0'\n 74CA Created OS            03 (3) 'Unix'\n 74CB Extract Zip Spec      0A (10) '1.0'\n 74CC Extract OS            00 (0) 'MS-DOS'\n 74CD General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n 74CF Compression Method    0000 (0) 'Stored'\n 74D1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n 74D5 CRC                   00000000 (0)\n 74D9 Compressed Size       00000000 (0)\n 74DD Uncompressed Size     00000000 (0)\n-74E1 Filename Length       002B (43)\n+74E1 Filename Length       0037 (55)\n 74E3 Extra Length          0000 (0)\n 74E5 Comment Length        0000 (0)\n 74E7 Disk Start            0000 (0)\n 74E9 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n 74EB 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-74EF Local Header Offset   00000267 (615)\n-74F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+74EF Local Header Offset   00000212 (530)\n+74F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x74F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x74F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x74F3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x74F3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x74CB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x74CB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-751E CENTRAL HEADER #12    02014B50 (33639248)\n-7522 Created Zip Spec      14 (20) '2.0'\n-7523 Created OS            03 (3) 'Unix'\n-7524 Extract Zip Spec      0A (10) '1.0'\n-7525 Extract OS            00 (0) 'MS-DOS'\n-7526 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-7528 Compression Method    0000 (0) 'Stored'\n-752A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-752E CRC                   00000000 (0)\n-7532 Compressed Size       00000000 (0)\n-7536 Uncompressed Size     00000000 (0)\n-753A Filename Length       000F (15)\n-753C Extra Length          0000 (0)\n-753E Comment Length        0000 (0)\n-7540 Disk Start            0000 (0)\n-7542 Int File Attributes   0000 (0)\n+752A CENTRAL HEADER #11    02014B50 (33639248)\n+752E Created Zip Spec      14 (20) '2.0'\n+752F Created OS            03 (3) 'Unix'\n+7530 Extract Zip Spec      0A (10) '1.0'\n+7531 Extract OS            00 (0) 'MS-DOS'\n+7532 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+7534 Compression Method    0000 (0) 'Stored'\n+7536 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+753A CRC                   00000000 (0)\n+753E Compressed Size       00000000 (0)\n+7542 Uncompressed Size     00000000 (0)\n+7546 Filename Length       002B (43)\n+7548 Extra Length          0000 (0)\n+754A Comment Length        0000 (0)\n+754C Disk Start            0000 (0)\n+754E Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7544 Ext File Attributes   41ED0010 (1106051088)\n+7550 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-7548 Local Header Offset   000002B0 (688)\n-754C Filename              'XXXXXXXXXXXXXXX'\n+7554 Local Header Offset   00000267 (615)\n+7558 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x754C: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7558: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x754C: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x7558: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x7524: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7530: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-755B CENTRAL HEADER #13    02014B50 (33639248)\n-755F Created Zip Spec      14 (20) '2.0'\n-7560 Created OS            03 (3) 'Unix'\n-7561 Extract Zip Spec      0A (10) '1.0'\n-7562 Extract OS            00 (0) 'MS-DOS'\n-7563 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-7565 Compression Method    0000 (0) 'Stored'\n-7567 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-756B CRC                   00000000 (0)\n-756F Compressed Size       00000000 (0)\n-7573 Uncompressed Size     00000000 (0)\n-7577 Filename Length       0018 (24)\n-7579 Extra Length          0000 (0)\n-757B Comment Length        0000 (0)\n-757D Disk Start            0000 (0)\n-757F Int File Attributes   0000 (0)\n+7583 CENTRAL HEADER #12    02014B50 (33639248)\n+7587 Created Zip Spec      14 (20) '2.0'\n+7588 Created OS            03 (3) 'Unix'\n+7589 Extract Zip Spec      0A (10) '1.0'\n+758A Extract OS            00 (0) 'MS-DOS'\n+758B General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+758D Compression Method    0000 (0) 'Stored'\n+758F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7593 CRC                   00000000 (0)\n+7597 Compressed Size       00000000 (0)\n+759B Uncompressed Size     00000000 (0)\n+759F Filename Length       000F (15)\n+75A1 Extra Length          0000 (0)\n+75A3 Comment Length        0000 (0)\n+75A5 Disk Start            0000 (0)\n+75A7 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7581 Ext File Attributes   41ED0010 (1106051088)\n+75A9 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-7585 Local Header Offset   000002DD (733)\n-7589 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+75AD Local Header Offset   000002B0 (688)\n+75B1 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7589: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x75B1: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x7589: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x75B1: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x7561: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7589: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-75A1 CENTRAL HEADER #14    02014B50 (33639248)\n-75A5 Created Zip Spec      14 (20) '2.0'\n-75A6 Created OS            03 (3) 'Unix'\n-75A7 Extract Zip Spec      0A (10) '1.0'\n-75A8 Extract OS            00 (0) 'MS-DOS'\n-75A9 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-75AB Compression Method    0000 (0) 'Stored'\n-75AD Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-75B1 CRC                   00000000 (0)\n-75B5 Compressed Size       00000000 (0)\n-75B9 Uncompressed Size     00000000 (0)\n-75BD Filename Length       000F (15)\n-75BF Extra Length          0000 (0)\n-75C1 Comment Length        0000 (0)\n-75C3 Disk Start            0000 (0)\n-75C5 Int File Attributes   0000 (0)\n+75C0 CENTRAL HEADER #13    02014B50 (33639248)\n+75C4 Created Zip Spec      14 (20) '2.0'\n+75C5 Created OS            03 (3) 'Unix'\n+75C6 Extract Zip Spec      0A (10) '1.0'\n+75C7 Extract OS            00 (0) 'MS-DOS'\n+75C8 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+75CA Compression Method    0000 (0) 'Stored'\n+75CC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+75D0 CRC                   00000000 (0)\n+75D4 Compressed Size       00000000 (0)\n+75D8 Uncompressed Size     00000000 (0)\n+75DC Filename Length       0018 (24)\n+75DE Extra Length          0000 (0)\n+75E0 Comment Length        0000 (0)\n+75E2 Disk Start            0000 (0)\n+75E4 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-75C7 Ext File Attributes   41ED0010 (1106051088)\n+75E6 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-75CB Local Header Offset   00000313 (787)\n-75CF Filename              'XXXXXXXXXXXXXXX'\n+75EA Local Header Offset   000002DD (733)\n+75EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x75CF: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x75EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x75CF: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x75EE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x75A7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x75C6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-75DE CENTRAL HEADER #15    02014B50 (33639248)\n-75E2 Created Zip Spec      14 (20) '2.0'\n-75E3 Created OS            03 (3) 'Unix'\n-75E4 Extract Zip Spec      0A (10) '1.0'\n-75E5 Extract OS            00 (0) 'MS-DOS'\n-75E6 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-75E8 Compression Method    0000 (0) 'Stored'\n-75EA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-75EE CRC                   00000000 (0)\n-75F2 Compressed Size       00000000 (0)\n-75F6 Uncompressed Size     00000000 (0)\n-75FA Filename Length       0020 (32)\n-75FC Extra Length          0000 (0)\n-75FE Comment Length        0000 (0)\n-7600 Disk Start            0000 (0)\n-7602 Int File Attributes   0000 (0)\n+7606 CENTRAL HEADER #14    02014B50 (33639248)\n+760A Created Zip Spec      14 (20) '2.0'\n+760B Created OS            03 (3) 'Unix'\n+760C Extract Zip Spec      0A (10) '1.0'\n+760D Extract OS            00 (0) 'MS-DOS'\n+760E General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+7610 Compression Method    0000 (0) 'Stored'\n+7612 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7616 CRC                   00000000 (0)\n+761A Compressed Size       00000000 (0)\n+761E Uncompressed Size     00000000 (0)\n+7622 Filename Length       000F (15)\n+7624 Extra Length          0000 (0)\n+7626 Comment Length        0000 (0)\n+7628 Disk Start            0000 (0)\n+762A Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7604 Ext File Attributes   41ED0010 (1106051088)\n+762C 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-7608 Local Header Offset   00000340 (832)\n-760C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7630 Local Header Offset   00000313 (787)\n+7634 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x760C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7634: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x760C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x7634: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x75E4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x760C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-762C CENTRAL HEADER #16    02014B50 (33639248)\n-7630 Created Zip Spec      14 (20) '2.0'\n-7631 Created OS            03 (3) 'Unix'\n-7632 Extract Zip Spec      0A (10) '1.0'\n-7633 Extract OS            00 (0) 'MS-DOS'\n-7634 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-7636 Compression Method    0000 (0) 'Stored'\n-7638 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-763C CRC                   00000000 (0)\n-7640 Compressed Size       00000000 (0)\n-7644 Uncompressed Size     00000000 (0)\n-7648 Filename Length       002F (47)\n-764A Extra Length          0000 (0)\n-764C Comment Length        0000 (0)\n-764E Disk Start            0000 (0)\n-7650 Int File Attributes   0000 (0)\n+7643 CENTRAL HEADER #15    02014B50 (33639248)\n+7647 Created Zip Spec      14 (20) '2.0'\n+7648 Created OS            03 (3) 'Unix'\n+7649 Extract Zip Spec      0A (10) '1.0'\n+764A Extract OS            00 (0) 'MS-DOS'\n+764B General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+764D Compression Method    0000 (0) 'Stored'\n+764F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7653 CRC                   00000000 (0)\n+7657 Compressed Size       00000000 (0)\n+765B Uncompressed Size     00000000 (0)\n+765F Filename Length       0020 (32)\n+7661 Extra Length          0000 (0)\n+7663 Comment Length        0000 (0)\n+7665 Disk Start            0000 (0)\n+7667 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7652 Ext File Attributes   41ED0010 (1106051088)\n+7669 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-7656 Local Header Offset   0000037E (894)\n-765A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+766D Local Header Offset   00000340 (832)\n+7671 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x765A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7671: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x765A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x7671: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x7632: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7649: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-7689 CENTRAL HEADER #17    02014B50 (33639248)\n-768D Created Zip Spec      14 (20) '2.0'\n-768E Created OS            03 (3) 'Unix'\n-768F Extract Zip Spec      14 (20) '2.0'\n-7690 Extract OS            00 (0) 'MS-DOS'\n-7691 General Purpose Flag  0800 (2048)\n-     [Bits 1-2]            0 'Normal Compression'\n-     [Bit 11]              1 'Language Encoding'\n-7693 Compression Method    0008 (8) 'Deflated'\n-7695 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7699 CRC                   B4606343 (3026215747)\n-769D Compressed Size       00000A54 (2644)\n-76A1 Uncompressed Size     0000389D (14493)\n-76A5 Filename Length       0015 (21)\n-76A7 Extra Length          0000 (0)\n-76A9 Comment Length        0000 (0)\n-76AB Disk Start            0000 (0)\n-76AD Int File Attributes   0000 (0)\n+7691 CENTRAL HEADER #16    02014B50 (33639248)\n+7695 Created Zip Spec      14 (20) '2.0'\n+7696 Created OS            03 (3) 'Unix'\n+7697 Extract Zip Spec      0A (10) '1.0'\n+7698 Extract OS            00 (0) 'MS-DOS'\n+7699 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+769B Compression Method    0000 (0) 'Stored'\n+769D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+76A1 CRC                   00000000 (0)\n+76A5 Compressed Size       00000000 (0)\n+76A9 Uncompressed Size     00000000 (0)\n+76AD Filename Length       002F (47)\n+76AF Extra Length          0000 (0)\n+76B1 Comment Length        0000 (0)\n+76B3 Disk Start            0000 (0)\n+76B5 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-76AF 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-76B3 Local Header Offset   000003CB (971)\n-76B7 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+76B7 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+76BB Local Header Offset   0000037E (894)\n+76BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x76B7: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x76BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n+# ERROR: Offset 0x76BF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+#        'External Attributes' flag this as a directory\n+#\n+# WARNING: Offset 0x7697: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n \n-76CC CENTRAL HEADER #18    02014B50 (33639248)\n-76D0 Created Zip Spec      14 (20) '2.0'\n-76D1 Created OS            03 (3) 'Unix'\n-76D2 Extract Zip Spec      14 (20) '2.0'\n-76D3 Extract OS            00 (0) 'MS-DOS'\n-76D4 General Purpose Flag  0800 (2048)\n+76EE CENTRAL HEADER #17    02014B50 (33639248)\n+76F2 Created Zip Spec      14 (20) '2.0'\n+76F3 Created OS            03 (3) 'Unix'\n+76F4 Extract Zip Spec      14 (20) '2.0'\n+76F5 Extract OS            00 (0) 'MS-DOS'\n+76F6 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-76D6 Compression Method    0008 (8) 'Deflated'\n-76D8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-76DC CRC                   86E2B4B4 (2263004340)\n-76E0 Compressed Size       00000F6D (3949)\n-76E4 Uncompressed Size     00002C5E (11358)\n-76E8 Filename Length       0010 (16)\n-76EA Extra Length          0000 (0)\n-76EC Comment Length        0000 (0)\n-76EE Disk Start            0000 (0)\n-76F0 Int File Attributes   0000 (0)\n+76F8 Compression Method    0008 (8) 'Deflated'\n+76FA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+76FE CRC                   B4606343 (3026215747)\n+7702 Compressed Size       00000A54 (2644)\n+7706 Uncompressed Size     0000389D (14493)\n+770A Filename Length       0015 (21)\n+770C Extra Length          0000 (0)\n+770E Comment Length        0000 (0)\n+7710 Disk Start            0000 (0)\n+7712 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-76F2 Ext File Attributes   81A40000 (2175008768)\n+7714 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-76F6 Local Header Offset   00000E52 (3666)\n-76FA Filename              'XXXXXXXXXXXXXXXX'\n+7718 Local Header Offset   000003CB (971)\n+771C Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x76FA: Filename 'XXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x771C: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-770A CENTRAL HEADER #19    02014B50 (33639248)\n-770E Created Zip Spec      14 (20) '2.0'\n-770F Created OS            03 (3) 'Unix'\n-7710 Extract Zip Spec      14 (20) '2.0'\n-7711 Extract OS            00 (0) 'MS-DOS'\n-7712 General Purpose Flag  0800 (2048)\n+7731 CENTRAL HEADER #18    02014B50 (33639248)\n+7735 Created Zip Spec      14 (20) '2.0'\n+7736 Created OS            03 (3) 'Unix'\n+7737 Extract Zip Spec      14 (20) '2.0'\n+7738 Extract OS            00 (0) 'MS-DOS'\n+7739 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7714 Compression Method    0008 (8) 'Deflated'\n-7716 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-771A CRC                   3EE5F40B (1055257611)\n-771E Compressed Size       0000007D (125)\n-7722 Uncompressed Size     000000AB (171)\n-7726 Filename Length       000F (15)\n-7728 Extra Length          0000 (0)\n-772A Comment Length        0000 (0)\n-772C Disk Start            0000 (0)\n-772E Int File Attributes   0000 (0)\n+773B Compression Method    0008 (8) 'Deflated'\n+773D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7741 CRC                   86E2B4B4 (2263004340)\n+7745 Compressed Size       00000F6D (3949)\n+7749 Uncompressed Size     00002C5E (11358)\n+774D Filename Length       0010 (16)\n+774F Extra Length          0000 (0)\n+7751 Comment Length        0000 (0)\n+7753 Disk Start            0000 (0)\n+7755 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7730 Ext File Attributes   81A40000 (2175008768)\n+7757 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-7734 Local Header Offset   00001DED (7661)\n-7738 Filename              'XXXXXXXXXXXXXXX'\n+775B Local Header Offset   00000E52 (3666)\n+775F Filename              'XXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7738: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x775F: Filename 'XXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7747 CENTRAL HEADER #20    02014B50 (33639248)\n-774B Created Zip Spec      14 (20) '2.0'\n-774C Created OS            03 (3) 'Unix'\n-774D Extract Zip Spec      14 (20) '2.0'\n-774E Extract OS            00 (0) 'MS-DOS'\n-774F General Purpose Flag  0800 (2048)\n+776F CENTRAL HEADER #19    02014B50 (33639248)\n+7773 Created Zip Spec      14 (20) '2.0'\n+7774 Created OS            03 (3) 'Unix'\n+7775 Extract Zip Spec      14 (20) '2.0'\n+7776 Extract OS            00 (0) 'MS-DOS'\n+7777 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7751 Compression Method    0008 (8) 'Deflated'\n-7753 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7757 CRC                   3DF79E03 (1039638019)\n-775B Compressed Size       00000476 (1142)\n-775F Uncompressed Size     00000BD6 (3030)\n-7763 Filename Length       003E (62)\n-7765 Extra Length          0000 (0)\n-7767 Comment Length        0000 (0)\n-7769 Disk Start            0000 (0)\n-776B Int File Attributes   0000 (0)\n+7779 Compression Method    0008 (8) 'Deflated'\n+777B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+777F CRC                   3EE5F40B (1055257611)\n+7783 Compressed Size       0000007D (125)\n+7787 Uncompressed Size     000000AB (171)\n+778B Filename Length       000F (15)\n+778D Extra Length          0000 (0)\n+778F Comment Length        0000 (0)\n+7791 Disk Start            0000 (0)\n+7793 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-776D Ext File Attributes   81A40000 (2175008768)\n+7795 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-7771 Local Header Offset   00001E97 (7831)\n-7775 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7799 Local Header Offset   00001DED (7661)\n+779D Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7775: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x779D: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-77B3 CENTRAL HEADER #21    02014B50 (33639248)\n-77B7 Created Zip Spec      14 (20) '2.0'\n-77B8 Created OS            03 (3) 'Unix'\n-77B9 Extract Zip Spec      14 (20) '2.0'\n-77BA Extract OS            00 (0) 'MS-DOS'\n-77BB General Purpose Flag  0800 (2048)\n+77AC CENTRAL HEADER #20    02014B50 (33639248)\n+77B0 Created Zip Spec      14 (20) '2.0'\n+77B1 Created OS            03 (3) 'Unix'\n+77B2 Extract Zip Spec      14 (20) '2.0'\n+77B3 Extract OS            00 (0) 'MS-DOS'\n+77B4 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-77BD Compression Method    0008 (8) 'Deflated'\n-77BF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-77C3 CRC                   4DA1C2B1 (1302446769)\n-77C7 Compressed Size       0000024A (586)\n-77CB Uncompressed Size     000003F4 (1012)\n-77CF Filename Length       0031 (49)\n-77D1 Extra Length          0000 (0)\n-77D3 Comment Length        0000 (0)\n-77D5 Disk Start            0000 (0)\n-77D7 Int File Attributes   0000 (0)\n+77B6 Compression Method    0008 (8) 'Deflated'\n+77B8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+77BC CRC                   E49ADE4B (3835354699)\n+77C0 Compressed Size       0000047F (1151)\n+77C4 Uncompressed Size     00000C26 (3110)\n+77C8 Filename Length       003E (62)\n+77CA Extra Length          0000 (0)\n+77CC Comment Length        0000 (0)\n+77CE Disk Start            0000 (0)\n+77D0 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-77D9 Ext File Attributes   81A40000 (2175008768)\n+77D2 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-77DD Local Header Offset   00002369 (9065)\n-77E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+77D6 Local Header Offset   00001E97 (7831)\n+77DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x77E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x77DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7812 CENTRAL HEADER #22    02014B50 (33639248)\n-7816 Created Zip Spec      14 (20) '2.0'\n-7817 Created OS            03 (3) 'Unix'\n-7818 Extract Zip Spec      14 (20) '2.0'\n-7819 Extract OS            00 (0) 'MS-DOS'\n-781A General Purpose Flag  0800 (2048)\n+7818 CENTRAL HEADER #21    02014B50 (33639248)\n+781C Created Zip Spec      14 (20) '2.0'\n+781D Created OS            03 (3) 'Unix'\n+781E Extract Zip Spec      14 (20) '2.0'\n+781F Extract OS            00 (0) 'MS-DOS'\n+7820 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-781C Compression Method    0008 (8) 'Deflated'\n-781E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7822 CRC                   150F0CC2 (353307842)\n-7826 Compressed Size       000005B7 (1463)\n-782A Uncompressed Size     000011F7 (4599)\n-782E Filename Length       003F (63)\n-7830 Extra Length          0000 (0)\n-7832 Comment Length        0000 (0)\n-7834 Disk Start            0000 (0)\n-7836 Int File Attributes   0000 (0)\n+7822 Compression Method    0008 (8) 'Deflated'\n+7824 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7828 CRC                   CAFD8C87 (3405614215)\n+782C Compressed Size       0000024F (591)\n+7830 Uncompressed Size     00000411 (1041)\n+7834 Filename Length       0031 (49)\n+7836 Extra Length          0000 (0)\n+7838 Comment Length        0000 (0)\n+783A Disk Start            0000 (0)\n+783C Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7838 Ext File Attributes   81A40000 (2175008768)\n+783E 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-783C Local Header Offset   00002602 (9730)\n-7840 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7842 Local Header Offset   00002372 (9074)\n+7846 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7840: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7846: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-787F CENTRAL HEADER #23    02014B50 (33639248)\n-7883 Created Zip Spec      14 (20) '2.0'\n-7884 Created OS            03 (3) 'Unix'\n-7885 Extract Zip Spec      14 (20) '2.0'\n-7886 Extract OS            00 (0) 'MS-DOS'\n-7887 General Purpose Flag  0800 (2048)\n+7877 CENTRAL HEADER #22    02014B50 (33639248)\n+787B Created Zip Spec      14 (20) '2.0'\n+787C Created OS            03 (3) 'Unix'\n+787D Extract Zip Spec      14 (20) '2.0'\n+787E Extract OS            00 (0) 'MS-DOS'\n+787F General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7889 Compression Method    0008 (8) 'Deflated'\n-788B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-788F CRC                   74B3513E (1957908798)\n-7893 Compressed Size       000003A8 (936)\n-7897 Uncompressed Size     00000A15 (2581)\n-789B Filename Length       003C (60)\n-789D Extra Length          0000 (0)\n-789F Comment Length        0000 (0)\n-78A1 Disk Start            0000 (0)\n-78A3 Int File Attributes   0000 (0)\n+7881 Compression Method    0008 (8) 'Deflated'\n+7883 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7887 CRC                   3D20A35F (1025549151)\n+788B Compressed Size       000005C3 (1475)\n+788F Uncompressed Size     0000127A (4730)\n+7893 Filename Length       003F (63)\n+7895 Extra Length          0000 (0)\n+7897 Comment Length        0000 (0)\n+7899 Disk Start            0000 (0)\n+789B Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-78A5 Ext File Attributes   81A40000 (2175008768)\n+789D 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-78A9 Local Header Offset   00002C16 (11286)\n-78AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+78A1 Local Header Offset   00002610 (9744)\n+78A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x78AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x78A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-78E9 CENTRAL HEADER #24    02014B50 (33639248)\n-78ED Created Zip Spec      14 (20) '2.0'\n-78EE Created OS            03 (3) 'Unix'\n-78EF Extract Zip Spec      14 (20) '2.0'\n-78F0 Extract OS            00 (0) 'MS-DOS'\n-78F1 General Purpose Flag  0800 (2048)\n+78E4 CENTRAL HEADER #23    02014B50 (33639248)\n+78E8 Created Zip Spec      14 (20) '2.0'\n+78E9 Created OS            03 (3) 'Unix'\n+78EA Extract Zip Spec      14 (20) '2.0'\n+78EB Extract OS            00 (0) 'MS-DOS'\n+78EC General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-78F3 Compression Method    0008 (8) 'Deflated'\n-78F5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-78F9 CRC                   59C6BCF2 (1506196722)\n-78FD Compressed Size       00000478 (1144)\n-7901 Uncompressed Size     00000C48 (3144)\n-7905 Filename Length       003F (63)\n-7907 Extra Length          0000 (0)\n-7909 Comment Length        0000 (0)\n-790B Disk Start            0000 (0)\n-790D Int File Attributes   0000 (0)\n+78EE Compression Method    0008 (8) 'Deflated'\n+78F0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+78F4 CRC                   74B3513E (1957908798)\n+78F8 Compressed Size       000003A8 (936)\n+78FC Uncompressed Size     00000A15 (2581)\n+7900 Filename Length       003C (60)\n+7902 Extra Length          0000 (0)\n+7904 Comment Length        0000 (0)\n+7906 Disk Start            0000 (0)\n+7908 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-790F Ext File Attributes   81A40000 (2175008768)\n+790A 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-7913 Local Header Offset   00003018 (12312)\n-7917 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+790E Local Header Offset   00002C30 (11312)\n+7912 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7917: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7912: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7956 CENTRAL HEADER #25    02014B50 (33639248)\n-795A Created Zip Spec      14 (20) '2.0'\n-795B Created OS            03 (3) 'Unix'\n-795C Extract Zip Spec      14 (20) '2.0'\n-795D Extract OS            00 (0) 'MS-DOS'\n-795E General Purpose Flag  0800 (2048)\n+794E CENTRAL HEADER #24    02014B50 (33639248)\n+7952 Created Zip Spec      14 (20) '2.0'\n+7953 Created OS            03 (3) 'Unix'\n+7954 Extract Zip Spec      14 (20) '2.0'\n+7955 Extract OS            00 (0) 'MS-DOS'\n+7956 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7960 Compression Method    0008 (8) 'Deflated'\n-7962 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7966 CRC                   CB062A84 (3406178948)\n-796A Compressed Size       00000327 (807)\n-796E Uncompressed Size     000007E1 (2017)\n-7972 Filename Length       003F (63)\n-7974 Extra Length          0000 (0)\n-7976 Comment Length        0000 (0)\n-7978 Disk Start            0000 (0)\n-797A Int File Attributes   0000 (0)\n+7958 Compression Method    0008 (8) 'Deflated'\n+795A Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+795E CRC                   755A7982 (1968863618)\n+7962 Compressed Size       00000484 (1156)\n+7966 Uncompressed Size     00000C91 (3217)\n+796A Filename Length       003F (63)\n+796C Extra Length          0000 (0)\n+796E Comment Length        0000 (0)\n+7970 Disk Start            0000 (0)\n+7972 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-797C Ext File Attributes   81A40000 (2175008768)\n+7974 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-7980 Local Header Offset   000034ED (13549)\n-7984 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7978 Local Header Offset   00003032 (12338)\n+797C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7984: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x797C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-79C3 CENTRAL HEADER #26    02014B50 (33639248)\n-79C7 Created Zip Spec      14 (20) '2.0'\n-79C8 Created OS            03 (3) 'Unix'\n-79C9 Extract Zip Spec      14 (20) '2.0'\n-79CA Extract OS            00 (0) 'MS-DOS'\n-79CB General Purpose Flag  0800 (2048)\n+79BB CENTRAL HEADER #25    02014B50 (33639248)\n+79BF Created Zip Spec      14 (20) '2.0'\n+79C0 Created OS            03 (3) 'Unix'\n+79C1 Extract Zip Spec      14 (20) '2.0'\n+79C2 Extract OS            00 (0) 'MS-DOS'\n+79C3 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-79CD Compression Method    0008 (8) 'Deflated'\n-79CF Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-79D3 CRC                   8E964D75 (2392214901)\n-79D7 Compressed Size       00000DC2 (3522)\n-79DB Uncompressed Size     000031F2 (12786)\n-79DF Filename Length       0034 (52)\n-79E1 Extra Length          0000 (0)\n-79E3 Comment Length        0000 (0)\n-79E5 Disk Start            0000 (0)\n-79E7 Int File Attributes   0000 (0)\n+79C5 Compression Method    0008 (8) 'Deflated'\n+79C7 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+79CB CRC                   CB062A84 (3406178948)\n+79CF Compressed Size       00000327 (807)\n+79D3 Uncompressed Size     000007E1 (2017)\n+79D7 Filename Length       003F (63)\n+79D9 Extra Length          0000 (0)\n+79DB Comment Length        0000 (0)\n+79DD Disk Start            0000 (0)\n+79DF Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-79E9 Ext File Attributes   81A40000 (2175008768)\n+79E1 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-79ED Local Header Offset   00003871 (14449)\n-79F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+79E5 Local Header Offset   00003513 (13587)\n+79E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x79F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x79E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7A25 CENTRAL HEADER #27    02014B50 (33639248)\n-7A29 Created Zip Spec      14 (20) '2.0'\n-7A2A Created OS            03 (3) 'Unix'\n-7A2B Extract Zip Spec      14 (20) '2.0'\n-7A2C Extract OS            00 (0) 'MS-DOS'\n-7A2D General Purpose Flag  0800 (2048)\n+7A28 CENTRAL HEADER #26    02014B50 (33639248)\n+7A2C Created Zip Spec      14 (20) '2.0'\n+7A2D Created OS            03 (3) 'Unix'\n+7A2E Extract Zip Spec      14 (20) '2.0'\n+7A2F Extract OS            00 (0) 'MS-DOS'\n+7A30 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7A2F Compression Method    0008 (8) 'Deflated'\n-7A31 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7A35 CRC                   2E39C29D (775537309)\n-7A39 Compressed Size       00000288 (648)\n-7A3D Uncompressed Size     000004D4 (1236)\n-7A41 Filename Length       003A (58)\n-7A43 Extra Length          0000 (0)\n-7A45 Comment Length        0000 (0)\n-7A47 Disk Start            0000 (0)\n-7A49 Int File Attributes   0000 (0)\n+7A32 Compression Method    0008 (8) 'Deflated'\n+7A34 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7A38 CRC                   D7522A4D (3612486221)\n+7A3C Compressed Size       00000DD4 (3540)\n+7A40 Uncompressed Size     00003319 (13081)\n+7A44 Filename Length       0034 (52)\n+7A46 Extra Length          0000 (0)\n+7A48 Comment Length        0000 (0)\n+7A4A Disk Start            0000 (0)\n+7A4C Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7A4B Ext File Attributes   81A40000 (2175008768)\n+7A4E 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-7A4F Local Header Offset   00004685 (18053)\n-7A53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7A52 Local Header Offset   00003897 (14487)\n+7A56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7A53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7A56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7A8D CENTRAL HEADER #28    02014B50 (33639248)\n-7A91 Created Zip Spec      14 (20) '2.0'\n-7A92 Created OS            03 (3) 'Unix'\n-7A93 Extract Zip Spec      14 (20) '2.0'\n-7A94 Extract OS            00 (0) 'MS-DOS'\n-7A95 General Purpose Flag  0800 (2048)\n+7A8A CENTRAL HEADER #27    02014B50 (33639248)\n+7A8E Created Zip Spec      14 (20) '2.0'\n+7A8F Created OS            03 (3) 'Unix'\n+7A90 Extract Zip Spec      14 (20) '2.0'\n+7A91 Extract OS            00 (0) 'MS-DOS'\n+7A92 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7A97 Compression Method    0008 (8) 'Deflated'\n-7A99 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7A9D CRC                   8AE5D3FF (2330317823)\n-7AA1 Compressed Size       00000334 (820)\n-7AA5 Uncompressed Size     000006A5 (1701)\n-7AA9 Filename Length       0039 (57)\n-7AAB Extra Length          0000 (0)\n-7AAD Comment Length        0000 (0)\n-7AAF Disk Start            0000 (0)\n-7AB1 Int File Attributes   0000 (0)\n+7A94 Compression Method    0008 (8) 'Deflated'\n+7A96 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7A9A CRC                   6BBB41BD (1807434173)\n+7A9E Compressed Size       00000290 (656)\n+7AA2 Uncompressed Size     000004F5 (1269)\n+7AA6 Filename Length       003A (58)\n+7AA8 Extra Length          0000 (0)\n+7AAA Comment Length        0000 (0)\n+7AAC Disk Start            0000 (0)\n+7AAE Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7AB3 Ext File Attributes   81A40000 (2175008768)\n+7AB0 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-7AB7 Local Header Offset   00004965 (18789)\n-7ABB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7AB4 Local Header Offset   000046BD (18109)\n+7AB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7ABB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7AB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7AF4 CENTRAL HEADER #29    02014B50 (33639248)\n-7AF8 Created Zip Spec      14 (20) '2.0'\n-7AF9 Created OS            03 (3) 'Unix'\n-7AFA Extract Zip Spec      14 (20) '2.0'\n-7AFB Extract OS            00 (0) 'MS-DOS'\n-7AFC General Purpose Flag  0800 (2048)\n+7AF2 CENTRAL HEADER #28    02014B50 (33639248)\n+7AF6 Created Zip Spec      14 (20) '2.0'\n+7AF7 Created OS            03 (3) 'Unix'\n+7AF8 Extract Zip Spec      14 (20) '2.0'\n+7AF9 Extract OS            00 (0) 'MS-DOS'\n+7AFA General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7AFE Compression Method    0008 (8) 'Deflated'\n-7B00 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7B04 CRC                   1149E8E6 (290056422)\n-7B08 Compressed Size       0000063B (1595)\n-7B0C Uncompressed Size     00001196 (4502)\n-7B10 Filename Length       0038 (56)\n-7B12 Extra Length          0000 (0)\n-7B14 Comment Length        0000 (0)\n-7B16 Disk Start            0000 (0)\n-7B18 Int File Attributes   0000 (0)\n+7AFC Compression Method    0008 (8) 'Deflated'\n+7AFE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7B02 CRC                   086F2C9C (141503644)\n+7B06 Compressed Size       0000033C (828)\n+7B0A Uncompressed Size     000006D1 (1745)\n+7B0E Filename Length       0039 (57)\n+7B10 Extra Length          0000 (0)\n+7B12 Comment Length        0000 (0)\n+7B14 Disk Start            0000 (0)\n+7B16 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7B1A Ext File Attributes   81A40000 (2175008768)\n+7B18 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-7B1E Local Header Offset   00004CF0 (19696)\n-7B22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7B1C Local Header Offset   000049A5 (18853)\n+7B20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7B22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7B20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7B5A CENTRAL HEADER #30    02014B50 (33639248)\n-7B5E Created Zip Spec      14 (20) '2.0'\n-7B5F Created OS            03 (3) 'Unix'\n-7B60 Extract Zip Spec      14 (20) '2.0'\n-7B61 Extract OS            00 (0) 'MS-DOS'\n-7B62 General Purpose Flag  0800 (2048)\n+7B59 CENTRAL HEADER #29    02014B50 (33639248)\n+7B5D Created Zip Spec      14 (20) '2.0'\n+7B5E Created OS            03 (3) 'Unix'\n+7B5F Extract Zip Spec      14 (20) '2.0'\n+7B60 Extract OS            00 (0) 'MS-DOS'\n+7B61 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7B64 Compression Method    0008 (8) 'Deflated'\n-7B66 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7B6A CRC                   939A92A5 (2476380837)\n-7B6E Compressed Size       0000040C (1036)\n-7B72 Uncompressed Size     000009EA (2538)\n-7B76 Filename Length       003A (58)\n-7B78 Extra Length          0000 (0)\n-7B7A Comment Length        0000 (0)\n-7B7C Disk Start            0000 (0)\n-7B7E Int File Attributes   0000 (0)\n+7B63 Compression Method    0008 (8) 'Deflated'\n+7B65 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7B69 CRC                   A0E895BE (2699597246)\n+7B6D Compressed Size       00000649 (1609)\n+7B71 Uncompressed Size     00001200 (4608)\n+7B75 Filename Length       0038 (56)\n+7B77 Extra Length          0000 (0)\n+7B79 Comment Length        0000 (0)\n+7B7B Disk Start            0000 (0)\n+7B7D Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7B80 Ext File Attributes   81A40000 (2175008768)\n+7B7F 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-7B84 Local Header Offset   00005381 (21377)\n-7B88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7B83 Local Header Offset   00004D38 (19768)\n+7B87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7B88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7B87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7BC2 CENTRAL HEADER #31    02014B50 (33639248)\n-7BC6 Created Zip Spec      14 (20) '2.0'\n-7BC7 Created OS            03 (3) 'Unix'\n-7BC8 Extract Zip Spec      14 (20) '2.0'\n-7BC9 Extract OS            00 (0) 'MS-DOS'\n-7BCA General Purpose Flag  0800 (2048)\n+7BBF CENTRAL HEADER #30    02014B50 (33639248)\n+7BC3 Created Zip Spec      14 (20) '2.0'\n+7BC4 Created OS            03 (3) 'Unix'\n+7BC5 Extract Zip Spec      14 (20) '2.0'\n+7BC6 Extract OS            00 (0) 'MS-DOS'\n+7BC7 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7BCC Compression Method    0008 (8) 'Deflated'\n-7BCE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7BD2 CRC                   4DDA4FAB (1306152875)\n-7BD6 Compressed Size       0000031F (799)\n-7BDA Uncompressed Size     00000793 (1939)\n-7BDE Filename Length       0037 (55)\n-7BE0 Extra Length          0000 (0)\n-7BE2 Comment Length        0000 (0)\n-7BE4 Disk Start            0000 (0)\n-7BE6 Int File Attributes   0000 (0)\n+7BC9 Compression Method    0008 (8) 'Deflated'\n+7BCB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7BCF CRC                   939A92A5 (2476380837)\n+7BD3 Compressed Size       0000040C (1036)\n+7BD7 Uncompressed Size     000009EA (2538)\n+7BDB Filename Length       003A (58)\n+7BDD Extra Length          0000 (0)\n+7BDF Comment Length        0000 (0)\n+7BE1 Disk Start            0000 (0)\n+7BE3 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7BE8 Ext File Attributes   81A40000 (2175008768)\n+7BE5 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-7BEC Local Header Offset   000057E5 (22501)\n-7BF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7BE9 Local Header Offset   000053D7 (21463)\n+7BED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7BF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7BED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7C27 CENTRAL HEADER #32    02014B50 (33639248)\n+7C27 CENTRAL HEADER #31    02014B50 (33639248)\n 7C2B Created Zip Spec      14 (20) '2.0'\n 7C2C Created OS            03 (3) 'Unix'\n 7C2D Extract Zip Spec      14 (20) '2.0'\n 7C2E Extract OS            00 (0) 'MS-DOS'\n 7C2F General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n 7C31 Compression Method    0008 (8) 'Deflated'\n 7C33 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7C37 CRC                   E3F9F330 (3824808752)\n-7C3B Compressed Size       00000397 (919)\n-7C3F Uncompressed Size     00000859 (2137)\n-7C43 Filename Length       005A (90)\n+7C37 CRC                   4DDA4FAB (1306152875)\n+7C3B Compressed Size       0000031F (799)\n+7C3F Uncompressed Size     00000793 (1939)\n+7C43 Filename Length       0037 (55)\n 7C45 Extra Length          0000 (0)\n 7C47 Comment Length        0000 (0)\n 7C49 Disk Start            0000 (0)\n 7C4B Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n 7C4D 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-7C51 Local Header Offset   00005B59 (23385)\n-7C55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7C51 Local Header Offset   0000583B (22587)\n+7C55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x7C55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+\n+7C8C CENTRAL HEADER #32    02014B50 (33639248)\n+7C90 Created Zip Spec      14 (20) '2.0'\n+7C91 Created OS            03 (3) 'Unix'\n+7C92 Extract Zip Spec      14 (20) '2.0'\n+7C93 Extract OS            00 (0) 'MS-DOS'\n+7C94 General Purpose Flag  0800 (2048)\n+     [Bits 1-2]            0 'Normal Compression'\n+     [Bit 11]              1 'Language Encoding'\n+7C96 Compression Method    0008 (8) 'Deflated'\n+7C98 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7C9C CRC                   E3F9F330 (3824808752)\n+7CA0 Compressed Size       00000397 (919)\n+7CA4 Uncompressed Size     00000859 (2137)\n+7CA8 Filename Length       005A (90)\n+7CAA Extra Length          0000 (0)\n+7CAC Comment Length        0000 (0)\n+7CAE Disk Start            0000 (0)\n+7CB0 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+7CB2 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+7CB6 Local Header Offset   00005BAF (23471)\n+7CBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7C55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7CBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7CAF CENTRAL HEADER #33    02014B50 (33639248)\n-7CB3 Created Zip Spec      14 (20) '2.0'\n-7CB4 Created OS            03 (3) 'Unix'\n-7CB5 Extract Zip Spec      14 (20) '2.0'\n-7CB6 Extract OS            00 (0) 'MS-DOS'\n-7CB7 General Purpose Flag  0800 (2048)\n+7D14 CENTRAL HEADER #33    02014B50 (33639248)\n+7D18 Created Zip Spec      14 (20) '2.0'\n+7D19 Created OS            03 (3) 'Unix'\n+7D1A Extract Zip Spec      14 (20) '2.0'\n+7D1B Extract OS            00 (0) 'MS-DOS'\n+7D1C General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7CB9 Compression Method    0008 (8) 'Deflated'\n-7CBB Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7CBF CRC                   FF2D0DF3 (4281142771)\n-7CC3 Compressed Size       00000329 (809)\n-7CC7 Uncompressed Size     000006C6 (1734)\n-7CCB Filename Length       004F (79)\n-7CCD Extra Length          0000 (0)\n-7CCF Comment Length        0000 (0)\n-7CD1 Disk Start            0000 (0)\n-7CD3 Int File Attributes   0000 (0)\n+7D1E Compression Method    0008 (8) 'Deflated'\n+7D20 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7D24 CRC                   879AD63A (2275071546)\n+7D28 Compressed Size       00000331 (817)\n+7D2C Uncompressed Size     000006F0 (1776)\n+7D30 Filename Length       004F (79)\n+7D32 Extra Length          0000 (0)\n+7D34 Comment Length        0000 (0)\n+7D36 Disk Start            0000 (0)\n+7D38 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7CD5 Ext File Attributes   81A40000 (2175008768)\n+7D3A 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-7CD9 Local Header Offset   00005F68 (24424)\n-7CDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7D3E Local Header Offset   00005FBE (24510)\n+7D42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7CDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7D42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7D2C CENTRAL HEADER #34    02014B50 (33639248)\n-7D30 Created Zip Spec      14 (20) '2.0'\n-7D31 Created OS            03 (3) 'Unix'\n-7D32 Extract Zip Spec      14 (20) '2.0'\n-7D33 Extract OS            00 (0) 'MS-DOS'\n-7D34 General Purpose Flag  0800 (2048)\n+7D91 CENTRAL HEADER #34    02014B50 (33639248)\n+7D95 Created Zip Spec      14 (20) '2.0'\n+7D96 Created OS            03 (3) 'Unix'\n+7D97 Extract Zip Spec      14 (20) '2.0'\n+7D98 Extract OS            00 (0) 'MS-DOS'\n+7D99 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7D36 Compression Method    0008 (8) 'Deflated'\n-7D38 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7D3C CRC                   FC72AE7D (4235374205)\n-7D40 Compressed Size       0000028A (650)\n-7D44 Uncompressed Size     00000523 (1315)\n-7D48 Filename Length       003B (59)\n-7D4A Extra Length          0000 (0)\n-7D4C Comment Length        0000 (0)\n-7D4E Disk Start            0000 (0)\n-7D50 Int File Attributes   0000 (0)\n+7D9B Compression Method    0008 (8) 'Deflated'\n+7D9D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7DA1 CRC                   FC72AE7D (4235374205)\n+7DA5 Compressed Size       0000028A (650)\n+7DA9 Uncompressed Size     00000523 (1315)\n+7DAD Filename Length       003B (59)\n+7DAF Extra Length          0000 (0)\n+7DB1 Comment Length        0000 (0)\n+7DB3 Disk Start            0000 (0)\n+7DB5 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7D52 Ext File Attributes   81A40000 (2175008768)\n+7DB7 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-7D56 Local Header Offset   000062FE (25342)\n-7D5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7DBB Local Header Offset   0000635C (25436)\n+7DBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7D5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7DBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7D95 CENTRAL HEADER #35    02014B50 (33639248)\n-7D99 Created Zip Spec      14 (20) '2.0'\n-7D9A Created OS            03 (3) 'Unix'\n-7D9B Extract Zip Spec      14 (20) '2.0'\n-7D9C Extract OS            00 (0) 'MS-DOS'\n-7D9D General Purpose Flag  0800 (2048)\n+7DFA CENTRAL HEADER #35    02014B50 (33639248)\n+7DFE Created Zip Spec      14 (20) '2.0'\n+7DFF Created OS            03 (3) 'Unix'\n+7E00 Extract Zip Spec      14 (20) '2.0'\n+7E01 Extract OS            00 (0) 'MS-DOS'\n+7E02 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7D9F Compression Method    0008 (8) 'Deflated'\n-7DA1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7DA5 CRC                   DD3F3E44 (3711909444)\n-7DA9 Compressed Size       00000616 (1558)\n-7DAD Uncompressed Size     00001567 (5479)\n-7DB1 Filename Length       003D (61)\n-7DB3 Extra Length          0000 (0)\n-7DB5 Comment Length        0000 (0)\n-7DB7 Disk Start            0000 (0)\n-7DB9 Int File Attributes   0000 (0)\n+7E04 Compression Method    0008 (8) 'Deflated'\n+7E06 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7E0A CRC                   98665538 (2556843320)\n+7E0E Compressed Size       00000626 (1574)\n+7E12 Uncompressed Size     000015FB (5627)\n+7E16 Filename Length       003D (61)\n+7E18 Extra Length          0000 (0)\n+7E1A Comment Length        0000 (0)\n+7E1C Disk Start            0000 (0)\n+7E1E Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7DBB Ext File Attributes   81A40000 (2175008768)\n+7E20 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-7DBF Local Header Offset   000065E1 (26081)\n-7DC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7E24 Local Header Offset   0000663F (26175)\n+7E28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7DC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7E28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7E00 CENTRAL HEADER #36    02014B50 (33639248)\n-7E04 Created Zip Spec      14 (20) '2.0'\n-7E05 Created OS            03 (3) 'Unix'\n-7E06 Extract Zip Spec      14 (20) '2.0'\n-7E07 Extract OS            00 (0) 'MS-DOS'\n-7E08 General Purpose Flag  0800 (2048)\n+7E65 CENTRAL HEADER #36    02014B50 (33639248)\n+7E69 Created Zip Spec      14 (20) '2.0'\n+7E6A Created OS            03 (3) 'Unix'\n+7E6B Extract Zip Spec      14 (20) '2.0'\n+7E6C Extract OS            00 (0) 'MS-DOS'\n+7E6D General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7E0A Compression Method    0008 (8) 'Deflated'\n-7E0C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7E10 CRC                   654AD933 (1699404083)\n-7E14 Compressed Size       0000002E (46)\n-7E18 Uncompressed Size     00000034 (52)\n-7E1C Filename Length       0035 (53)\n-7E1E Extra Length          0000 (0)\n-7E20 Comment Length        0000 (0)\n-7E22 Disk Start            0000 (0)\n-7E24 Int File Attributes   0000 (0)\n+7E6F Compression Method    0008 (8) 'Deflated'\n+7E71 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7E75 CRC                   654AD933 (1699404083)\n+7E79 Compressed Size       0000002E (46)\n+7E7D Uncompressed Size     00000034 (52)\n+7E81 Filename Length       0035 (53)\n+7E83 Extra Length          0000 (0)\n+7E85 Comment Length        0000 (0)\n+7E87 Disk Start            0000 (0)\n+7E89 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7E26 Ext File Attributes   81A40000 (2175008768)\n+7E8B 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-7E2A Local Header Offset   00006C52 (27730)\n-7E2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7E8F Local Header Offset   00006CC0 (27840)\n+7E93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7E2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7E93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7E63 CENTRAL HEADER #37    02014B50 (33639248)\n-7E67 Created Zip Spec      14 (20) '2.0'\n-7E68 Created OS            03 (3) 'Unix'\n-7E69 Extract Zip Spec      14 (20) '2.0'\n-7E6A Extract OS            00 (0) 'MS-DOS'\n-7E6B General Purpose Flag  0800 (2048)\n+7EC8 CENTRAL HEADER #37    02014B50 (33639248)\n+7ECC Created Zip Spec      14 (20) '2.0'\n+7ECD Created OS            03 (3) 'Unix'\n+7ECE Extract Zip Spec      14 (20) '2.0'\n+7ECF Extract OS            00 (0) 'MS-DOS'\n+7ED0 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7E6D Compression Method    0008 (8) 'Deflated'\n-7E6F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7E73 CRC                   B2FF8BF3 (3003091955)\n-7E77 Compressed Size       0000043B (1083)\n-7E7B Uncompressed Size     00000F9F (3999)\n-7E7F Filename Length       0036 (54)\n-7E81 Extra Length          0000 (0)\n-7E83 Comment Length        0000 (0)\n-7E85 Disk Start            0000 (0)\n-7E87 Int File Attributes   0000 (0)\n+7ED2 Compression Method    0008 (8) 'Deflated'\n+7ED4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7ED8 CRC                   E36316D8 (3814921944)\n+7EDC Compressed Size       00000432 (1074)\n+7EE0 Uncompressed Size     00000F30 (3888)\n+7EE4 Filename Length       0036 (54)\n+7EE6 Extra Length          0000 (0)\n+7EE8 Comment Length        0000 (0)\n+7EEA Disk Start            0000 (0)\n+7EEC Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7E89 Ext File Attributes   81A40000 (2175008768)\n+7EEE 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-7E8D Local Header Offset   00006CD3 (27859)\n-7E91 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7EF2 Local Header Offset   00006D41 (27969)\n+7EF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7E91: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7EF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7EC7 CENTRAL HEADER #38    02014B50 (33639248)\n-7ECB Created Zip Spec      14 (20) '2.0'\n-7ECC Created OS            03 (3) 'Unix'\n-7ECD Extract Zip Spec      14 (20) '2.0'\n-7ECE Extract OS            00 (0) 'MS-DOS'\n-7ECF General Purpose Flag  0800 (2048)\n+7F2C CENTRAL HEADER #38    02014B50 (33639248)\n+7F30 Created Zip Spec      14 (20) '2.0'\n+7F31 Created OS            03 (3) 'Unix'\n+7F32 Extract Zip Spec      14 (20) '2.0'\n+7F33 Extract OS            00 (0) 'MS-DOS'\n+7F34 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-7ED1 Compression Method    0008 (8) 'Deflated'\n-7ED3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-7ED7 CRC                   A1DBB70A (2715531018)\n-7EDB Compressed Size       00000043 (67)\n-7EDF Uncompressed Size     00000045 (69)\n-7EE3 Filename Length       003D (61)\n-7EE5 Extra Length          0000 (0)\n-7EE7 Comment Length        0000 (0)\n-7EE9 Disk Start            0000 (0)\n-7EEB Int File Attributes   0000 (0)\n+7F36 Compression Method    0008 (8) 'Deflated'\n+7F38 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+7F3C CRC                   A1DBB70A (2715531018)\n+7F40 Compressed Size       00000043 (67)\n+7F44 Uncompressed Size     00000045 (69)\n+7F48 Filename Length       003D (61)\n+7F4A Extra Length          0000 (0)\n+7F4C Comment Length        0000 (0)\n+7F4E Disk Start            0000 (0)\n+7F50 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-7EED Ext File Attributes   81A40000 (2175008768)\n+7F52 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-7EF1 Local Header Offset   00007162 (29026)\n-7EF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+7F56 Local Header Offset   000071C7 (29127)\n+7F5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x7EF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x7F5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-7F32 END CENTRAL HEADER    06054B50 (101010256)\n-7F36 Number of this disk   0000 (0)\n-7F38 Central Dir Disk no   0000 (0)\n-7F3A Entries in this disk  0026 (38)\n-7F3C Total Entries         0026 (38)\n-7F3E Size of Central Dir   00000D32 (3378)\n-7F42 Offset to Central Dir 00007200 (29184)\n-7F46 Comment Length        0000 (0)\n+7F97 END CENTRAL HEADER    06054B50 (101010256)\n+7F9B Number of this disk   0000 (0)\n+7F9D Central Dir Disk no   0000 (0)\n+7F9F Entries in this disk  0026 (38)\n+7FA1 Total Entries         0026 (38)\n+7FA3 Size of Central Dir   00000D32 (3378)\n+7FA7 Offset to Central Dir 00007265 (29285)\n+7FAB Comment Length        0000 (0)\n #\n # Error Count: 15\n # Warning Count: 91\n #\n # Done\n"}, {"source1": "org/apache/dubbo/rpc/protocol/rest/BaseRestProtocolServer.java", "source2": "org/apache/dubbo/rpc/protocol/rest/BaseRestProtocolServer.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.rpc.protocol.rest;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.StringUtils;\n-\n-import org.jboss.resteasy.spi.ResteasyDeployment;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\n-import static org.apache.dubbo.rpc.protocol.rest.Constants.EXTENSION_KEY;\n-\n-public abstract class BaseRestProtocolServer implements RestProtocolServer {\n-\n-    private String address;\n-\n-    @Override\n-    public void start(URL url) {\n-        getDeployment().getMediaTypeMappings().put(\"json\", \"application/json\");\n-        getDeployment().getMediaTypeMappings().put(\"xml\", \"text/xml\");\n-//        server.getDeployment().getMediaTypeMappings().put(\"xml\", \"application/xml\");\n-        getDeployment().getProviderClasses().add(RpcContextFilter.class.getName());\n-        // TODO users can override this mapper, but we just rely on the current priority strategy of resteasy\n-        getDeployment().getProviderClasses().add(RpcExceptionMapper.class.getName());\n-\n-        loadProviders(url.getParameter(EXTENSION_KEY, \"\"));\n-\n-        doStart(url);\n-    }\n-\n-    @Override\n-    public void deploy(Class resourceDef, Object resourceInstance, String contextPath) {\n-        if (StringUtils.isEmpty(contextPath)) {\n-            getDeployment().getRegistry().addResourceFactory(new DubboResourceFactory(resourceInstance, resourceDef));\n-        } else {\n-            getDeployment().getRegistry().addResourceFactory(new DubboResourceFactory(resourceInstance, resourceDef), contextPath);\n-        }\n-    }\n-\n-    @Override\n-    public void undeploy(Class resourceDef) {\n-        getDeployment().getRegistry().removeRegistrations(resourceDef);\n-    }\n-\n-    @Override\n-    public String getAddress() {\n-        return address;\n-    }\n-\n-    @Override\n-    public void setAddress(String address) {\n-        this.address = address;\n-    }\n-\n-    protected void loadProviders(String value) {\n-        for (String clazz : COMMA_SPLIT_PATTERN.split(value)) {\n-            if (!StringUtils.isEmpty(clazz)) {\n-                getDeployment().getProviderClasses().add(clazz.trim());\n-            }\n-        }\n-    }\n-\n-    protected abstract ResteasyDeployment getDeployment();\n-\n-    protected abstract void doStart(URL url);\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.rpc.protocol.rest;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+\r\n+import org.jboss.resteasy.spi.ResteasyDeployment;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\r\n+import static org.apache.dubbo.rpc.protocol.rest.Constants.EXTENSION_KEY;\r\n+\r\n+public abstract class BaseRestProtocolServer implements RestProtocolServer {\r\n+\r\n+    private String address;\r\n+\r\n+    @Override\r\n+    public void start(URL url) {\r\n+        getDeployment().getMediaTypeMappings().put(\"json\", \"application/json\");\r\n+        getDeployment().getMediaTypeMappings().put(\"xml\", \"text/xml\");\r\n+//        server.getDeployment().getMediaTypeMappings().put(\"xml\", \"application/xml\");\r\n+        getDeployment().getProviderClasses().add(RpcContextFilter.class.getName());\r\n+        // TODO users can override this mapper, but we just rely on the current priority strategy of resteasy\r\n+        getDeployment().getProviderClasses().add(RpcExceptionMapper.class.getName());\r\n+\r\n+        loadProviders(url.getParameter(EXTENSION_KEY, \"\"));\r\n+\r\n+        doStart(url);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void deploy(Class resourceDef, Object resourceInstance, String contextPath) {\r\n+        if (StringUtils.isEmpty(contextPath)) {\r\n+            getDeployment().getRegistry().addResourceFactory(new DubboResourceFactory(resourceInstance, resourceDef));\r\n+        } else {\r\n+            getDeployment().getRegistry().addResourceFactory(new DubboResourceFactory(resourceInstance, resourceDef), contextPath);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void undeploy(Class resourceDef) {\r\n+        getDeployment().getRegistry().removeRegistrations(resourceDef);\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getAddress() {\r\n+        return address;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void setAddress(String address) {\r\n+        this.address = address;\r\n+    }\r\n+\r\n+    protected void loadProviders(String value) {\r\n+        for (String clazz : COMMA_SPLIT_PATTERN.split(value)) {\r\n+            if (!StringUtils.isEmpty(clazz)) {\r\n+                getDeployment().getProviderClasses().add(clazz.trim());\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    protected abstract ResteasyDeployment getDeployment();\r\n+\r\n+    protected abstract void doStart(URL url);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/rest/Constants.java", "source2": "org/apache/dubbo/rpc/protocol/rest/Constants.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,29 +1,29 @@\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-\n-package org.apache.dubbo.rpc.protocol.rest;\n-\n-/**\n- *\n- */\n-public interface Constants {\n-    String KEEP_ALIVE_KEY = \"keepalive\";\n-\n-    boolean DEFAULT_KEEP_ALIVE = true;\n-\n-    String EXTENSION_KEY = \"extension\";\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+\r\n+package org.apache.dubbo.rpc.protocol.rest;\r\n+\r\n+/**\r\n+ *\r\n+ */\r\n+public interface Constants {\r\n+    String KEEP_ALIVE_KEY = \"keepalive\";\r\n+\r\n+    boolean DEFAULT_KEEP_ALIVE = true;\r\n+\r\n+    String EXTENSION_KEY = \"extension\";\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/rest/DubboHttpProtocolServer.java", "source2": "org/apache/dubbo/rpc/protocol/rest/DubboHttpProtocolServer.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,131 +1,131 @@\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.rpc.protocol.rest;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.remoting.http.HttpBinder;\n-import org.apache.dubbo.remoting.http.HttpHandler;\n-import org.apache.dubbo.remoting.http.HttpServer;\n-import org.apache.dubbo.remoting.http.servlet.BootstrapListener;\n-import org.apache.dubbo.remoting.http.servlet.ServletManager;\n-import org.apache.dubbo.rpc.RpcContext;\n-import org.apache.dubbo.rpc.RpcException;\n-\n-import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;\n-import org.jboss.resteasy.spi.ResteasyDeployment;\n-\n-import javax.servlet.ServletConfig;\n-import javax.servlet.ServletContext;\n-import javax.servlet.ServletException;\n-import javax.servlet.http.HttpServletRequest;\n-import javax.servlet.http.HttpServletResponse;\n-import java.io.IOException;\n-import java.util.Enumeration;\n-\n-public class DubboHttpProtocolServer extends BaseRestProtocolServer {\n-\n-    private final HttpServletDispatcher dispatcher = new HttpServletDispatcher();\n-    private final ResteasyDeployment deployment = new ResteasyDeployment();\n-    private HttpBinder httpBinder;\n-    private HttpServer httpServer;\n-//    private boolean isExternalServer;\n-\n-    public DubboHttpProtocolServer(HttpBinder httpBinder) {\n-        this.httpBinder = httpBinder;\n-    }\n-\n-    @Override\n-    protected void doStart(URL url) {\n-        // TODO jetty will by default enable keepAlive so the xml config has no effect now\n-        httpServer = httpBinder.bind(url, new RestHandler());\n-\n-        ServletContext servletContext = ServletManager.getInstance().getServletContext(url.getPort());\n-        if (servletContext == null) {\n-            servletContext = ServletManager.getInstance().getServletContext(ServletManager.EXTERNAL_SERVER_PORT);\n-        }\n-        if (servletContext == null) {\n-            throw new RpcException(\"No servlet context found. If you are using server='servlet', \" +\n-                    \"make sure that you've configured \" + BootstrapListener.class.getName() + \" in web.xml\");\n-        }\n-\n-        servletContext.setAttribute(ResteasyDeployment.class.getName(), deployment);\n-\n-        try {\n-            dispatcher.init(new SimpleServletConfig(servletContext));\n-        } catch (ServletException e) {\n-            throw new RpcException(e);\n-        }\n-    }\n-\n-    @Override\n-    public void close() {\n-        httpServer.close();\n-    }\n-\n-    @Override\n-    protected ResteasyDeployment getDeployment() {\n-        return deployment;\n-    }\n-\n-    private class RestHandler implements HttpHandler {\n-\n-        @Override\n-        public void handle(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {\n-            RpcContext.getContext().setRemoteAddress(request.getRemoteAddr(), request.getRemotePort());\n-            dispatcher.service(request, response);\n-        }\n-    }\n-\n-    private static class SimpleServletConfig implements ServletConfig {\n-\n-        private final ServletContext servletContext;\n-\n-        public SimpleServletConfig(ServletContext servletContext) {\n-            this.servletContext = servletContext;\n-        }\n-\n-        @Override\n-        public String getServletName() {\n-            return \"DispatcherServlet\";\n-        }\n-\n-        @Override\n-        public ServletContext getServletContext() {\n-            return servletContext;\n-        }\n-\n-        @Override\n-        public String getInitParameter(String s) {\n-            return null;\n-        }\n-\n-        @Override\n-        public Enumeration getInitParameterNames() {\n-            return new Enumeration() {\n-                @Override\n-                public boolean hasMoreElements() {\n-                    return false;\n-                }\n-\n-                @Override\n-                public Object nextElement() {\n-                    return null;\n-                }\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.rpc.protocol.rest;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.remoting.http.HttpBinder;\r\n+import org.apache.dubbo.remoting.http.HttpHandler;\r\n+import org.apache.dubbo.remoting.http.HttpServer;\r\n+import org.apache.dubbo.remoting.http.servlet.BootstrapListener;\r\n+import org.apache.dubbo.remoting.http.servlet.ServletManager;\r\n+import org.apache.dubbo.rpc.RpcContext;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+\r\n+import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;\r\n+import org.jboss.resteasy.spi.ResteasyDeployment;\r\n+\r\n+import javax.servlet.ServletConfig;\r\n+import javax.servlet.ServletContext;\r\n+import javax.servlet.ServletException;\r\n+import javax.servlet.http.HttpServletRequest;\r\n+import javax.servlet.http.HttpServletResponse;\r\n+import java.io.IOException;\r\n+import java.util.Enumeration;\r\n+\r\n+public class DubboHttpProtocolServer extends BaseRestProtocolServer {\r\n+\r\n+    private final HttpServletDispatcher dispatcher = new HttpServletDispatcher();\r\n+    private final ResteasyDeployment deployment = new ResteasyDeployment();\r\n+    private HttpBinder httpBinder;\r\n+    private HttpServer httpServer;\r\n+//    private boolean isExternalServer;\r\n+\r\n+    public DubboHttpProtocolServer(HttpBinder httpBinder) {\r\n+        this.httpBinder = httpBinder;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void doStart(URL url) {\r\n+        // TODO jetty will by default enable keepAlive so the xml config has no effect now\r\n+        httpServer = httpBinder.bind(url, new RestHandler());\r\n+\r\n+        ServletContext servletContext = ServletManager.getInstance().getServletContext(url.getPort());\r\n+        if (servletContext == null) {\r\n+            servletContext = ServletManager.getInstance().getServletContext(ServletManager.EXTERNAL_SERVER_PORT);\r\n+        }\r\n+        if (servletContext == null) {\r\n+            throw new RpcException(\"No servlet context found. If you are using server='servlet', \" +\r\n+                    \"make sure that you've configured \" + BootstrapListener.class.getName() + \" in web.xml\");\r\n+        }\r\n+\r\n+        servletContext.setAttribute(ResteasyDeployment.class.getName(), deployment);\r\n+\r\n+        try {\r\n+            dispatcher.init(new SimpleServletConfig(servletContext));\r\n+        } catch (ServletException e) {\r\n+            throw new RpcException(e);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void close() {\r\n+        httpServer.close();\r\n+    }\r\n+\r\n+    @Override\r\n+    protected ResteasyDeployment getDeployment() {\r\n+        return deployment;\r\n+    }\r\n+\r\n+    private class RestHandler implements HttpHandler {\r\n+\r\n+        @Override\r\n+        public void handle(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {\r\n+            RpcContext.getContext().setRemoteAddress(request.getRemoteAddr(), request.getRemotePort());\r\n+            dispatcher.service(request, response);\r\n+        }\r\n+    }\r\n+\r\n+    private static class SimpleServletConfig implements ServletConfig {\r\n+\r\n+        private final ServletContext servletContext;\r\n+\r\n+        public SimpleServletConfig(ServletContext servletContext) {\r\n+            this.servletContext = servletContext;\r\n+        }\r\n+\r\n+        @Override\r\n+        public String getServletName() {\r\n+            return \"DispatcherServlet\";\r\n+        }\r\n+\r\n+        @Override\r\n+        public ServletContext getServletContext() {\r\n+            return servletContext;\r\n+        }\r\n+\r\n+        @Override\r\n+        public String getInitParameter(String s) {\r\n+            return null;\r\n+        }\r\n+\r\n+        @Override\r\n+        public Enumeration getInitParameterNames() {\r\n+            return new Enumeration() {\r\n+                @Override\r\n+                public boolean hasMoreElements() {\r\n+                    return false;\r\n+                }\r\n+\r\n+                @Override\r\n+                public Object nextElement() {\r\n+                    return null;\r\n+                }\r\n+            };\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/rest/NettyRestProtocolServer.java", "source2": "org/apache/dubbo/rpc/protocol/rest/NettyRestProtocolServer.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.rpc.protocol.rest;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.NetUtils;\n-\n-import io.netty.channel.ChannelOption;\n-import org.jboss.resteasy.plugins.server.netty.NettyJaxrsServer;\n-import org.jboss.resteasy.spi.ResteasyDeployment;\n-\n-import java.util.HashMap;\n-import java.util.Map;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_THREADS;\n-import static org.apache.dubbo.common.constants.CommonConstants.IO_THREADS_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.THREADS_KEY;\n-import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY;\n-import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY;\n-import static org.apache.dubbo.remoting.Constants.DEFAULT_IO_THREADS;\n-import static org.apache.dubbo.remoting.Constants.DEFAULT_PAYLOAD;\n-import static org.apache.dubbo.remoting.Constants.PAYLOAD_KEY;\n-import static org.apache.dubbo.rpc.protocol.rest.Constants.DEFAULT_KEEP_ALIVE;\n-import static org.apache.dubbo.rpc.protocol.rest.Constants.KEEP_ALIVE_KEY;\n-\n-/**\n- * Netty server can't support @Context injection of servlet objects since it's not a servlet container\n- *\n- */\n-public class NettyRestProtocolServer extends BaseRestProtocolServer {\n-\n-    private final NettyJaxrsServer server = new NettyJaxrsServer();\n-\n-    @Override\n-    protected void doStart(URL url) {\n-        String bindIp = url.getParameter(BIND_IP_KEY, url.getHost());\n-        if (!url.isAnyHost() && NetUtils.isValidLocalHost(bindIp)) {\n-            server.setHostname(bindIp);\n-        }\n-        server.setPort(url.getParameter(BIND_PORT_KEY, url.getPort()));\n-        Map<ChannelOption, Object> channelOption = new HashMap<ChannelOption, Object>();\n-        channelOption.put(ChannelOption.SO_KEEPALIVE, url.getParameter(KEEP_ALIVE_KEY, DEFAULT_KEEP_ALIVE));\n-        server.setChildChannelOptions(channelOption);\n-        server.setExecutorThreadCount(url.getParameter(THREADS_KEY, DEFAULT_THREADS));\n-        server.setIoWorkerCount(url.getParameter(IO_THREADS_KEY, DEFAULT_IO_THREADS));\n-        server.setMaxRequestSize(url.getParameter(PAYLOAD_KEY, DEFAULT_PAYLOAD));\n-        server.start();\n-    }\n-\n-    @Override\n-    public void close() {\n-        server.stop();\n-    }\n-\n-    @Override\n-    protected ResteasyDeployment getDeployment() {\n-        return server.getDeployment();\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.rpc.protocol.rest;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.utils.NetUtils;\r\n+\r\n+import io.netty.channel.ChannelOption;\r\n+import org.jboss.resteasy.plugins.server.netty.NettyJaxrsServer;\r\n+import org.jboss.resteasy.spi.ResteasyDeployment;\r\n+\r\n+import java.util.HashMap;\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_THREADS;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.IO_THREADS_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.THREADS_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.BIND_IP_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.BIND_PORT_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.DEFAULT_IO_THREADS;\r\n+import static org.apache.dubbo.remoting.Constants.DEFAULT_PAYLOAD;\r\n+import static org.apache.dubbo.remoting.Constants.PAYLOAD_KEY;\r\n+import static org.apache.dubbo.rpc.protocol.rest.Constants.DEFAULT_KEEP_ALIVE;\r\n+import static org.apache.dubbo.rpc.protocol.rest.Constants.KEEP_ALIVE_KEY;\r\n+\r\n+/**\r\n+ * Netty server can't support @Context injection of servlet objects since it's not a servlet container\r\n+ *\r\n+ */\r\n+public class NettyRestProtocolServer extends BaseRestProtocolServer {\r\n+\r\n+    private final NettyJaxrsServer server = new NettyJaxrsServer();\r\n+\r\n+    @Override\r\n+    protected void doStart(URL url) {\r\n+        String bindIp = url.getParameter(BIND_IP_KEY, url.getHost());\r\n+        if (!url.isAnyHost() && NetUtils.isValidLocalHost(bindIp)) {\r\n+            server.setHostname(bindIp);\r\n+        }\r\n+        server.setPort(url.getParameter(BIND_PORT_KEY, url.getPort()));\r\n+        Map<ChannelOption, Object> channelOption = new HashMap<ChannelOption, Object>();\r\n+        channelOption.put(ChannelOption.SO_KEEPALIVE, url.getParameter(KEEP_ALIVE_KEY, DEFAULT_KEEP_ALIVE));\r\n+        server.setChildChannelOptions(channelOption);\r\n+        server.setExecutorThreadCount(url.getParameter(THREADS_KEY, DEFAULT_THREADS));\r\n+        server.setIoWorkerCount(url.getParameter(IO_THREADS_KEY, DEFAULT_IO_THREADS));\r\n+        server.setMaxRequestSize(url.getParameter(PAYLOAD_KEY, DEFAULT_PAYLOAD));\r\n+        server.start();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void close() {\r\n+        server.stop();\r\n+    }\r\n+\r\n+    @Override\r\n+    protected ResteasyDeployment getDeployment() {\r\n+        return server.getDeployment();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/rest/RestProtocol.java", "source2": "org/apache/dubbo/rpc/protocol/rest/RestProtocol.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,295 +1,295 @@\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.rpc.protocol.rest;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.remoting.http.HttpBinder;\n-import org.apache.dubbo.remoting.http.servlet.BootstrapListener;\n-import org.apache.dubbo.remoting.http.servlet.ServletManager;\n-import org.apache.dubbo.rpc.ProtocolServer;\n-import org.apache.dubbo.rpc.RpcException;\n-import org.apache.dubbo.rpc.model.ApplicationModel;\n-import org.apache.dubbo.rpc.protocol.AbstractProxyProtocol;\n-\n-import org.apache.http.HeaderElement;\n-import org.apache.http.HeaderElementIterator;\n-import org.apache.http.client.config.RequestConfig;\n-import org.apache.http.config.SocketConfig;\n-import org.apache.http.impl.client.CloseableHttpClient;\n-import org.apache.http.impl.client.HttpClientBuilder;\n-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;\n-import org.apache.http.message.BasicHeaderElementIterator;\n-import org.apache.http.protocol.HTTP;\n-import org.jboss.resteasy.client.jaxrs.ResteasyClient;\n-import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;\n-import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;\n-import org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine;\n-import org.jboss.resteasy.util.GetRestful;\n-\n-import javax.servlet.ServletContext;\n-import javax.ws.rs.ProcessingException;\n-import javax.ws.rs.WebApplicationException;\n-import java.util.Collections;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.concurrent.TimeUnit;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\n-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_TIMEOUT;\n-import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\n-import static org.apache.dubbo.remoting.Constants.CONNECTIONS_KEY;\n-import static org.apache.dubbo.remoting.Constants.CONNECT_TIMEOUT_KEY;\n-import static org.apache.dubbo.remoting.Constants.DEFAULT_CONNECT_TIMEOUT;\n-import static org.apache.dubbo.remoting.Constants.SERVER_KEY;\n-import static org.apache.dubbo.rpc.protocol.rest.Constants.EXTENSION_KEY;\n-\n-public class RestProtocol extends AbstractProxyProtocol {\n-\n-    private static final int DEFAULT_PORT = 80;\n-    private static final String DEFAULT_SERVER = \"jetty\";\n-\n-    private static final int HTTPCLIENTCONNECTIONMANAGER_MAXPERROUTE = 20;\n-    private static final int HTTPCLIENTCONNECTIONMANAGER_MAXTOTAL = 20;\n-    private static final int HTTPCLIENT_KEEPALIVEDURATION = 30 * 1000;\n-    private static final int HTTPCLIENTCONNECTIONMANAGER_CLOSEWAITTIME_MS = 1000;\n-    private static final int HTTPCLIENTCONNECTIONMANAGER_CLOSEIDLETIME_S = 30;\n-\n-    private final RestServerFactory serverFactory = new RestServerFactory();\n-\n-    // TODO in the future maybe we can just use a single rest client and connection manager\n-    private final List<ResteasyClient> clients = Collections.synchronizedList(new LinkedList<>());\n-\n-    private volatile ConnectionMonitor connectionMonitor;\n-\n-    public RestProtocol() {\n-        super(WebApplicationException.class, ProcessingException.class);\n-    }\n-\n-    public void setHttpBinder(HttpBinder httpBinder) {\n-        serverFactory.setHttpBinder(httpBinder);\n-    }\n-\n-    @Override\n-    public int getDefaultPort() {\n-        return DEFAULT_PORT;\n-    }\n-\n-    @Override\n-    protected <T> Runnable doExport(T impl, Class<T> type, URL url) throws RpcException {\n-        String addr = getAddr(url);\n-        Class implClass = ApplicationModel.getProviderModel(url.getServiceKey()).getServiceInstance().getClass();\n-        RestProtocolServer server = (RestProtocolServer) serverMap.computeIfAbsent(addr, restServer -> {\n-            RestProtocolServer s = serverFactory.createServer(url.getParameter(SERVER_KEY, DEFAULT_SERVER));\n-            s.setAddress(url.getAddress());\n-            s.start(url);\n-            return s;\n-        });\n-\n-        String contextPath = getContextPath(url);\n-        if (\"servlet\".equalsIgnoreCase(url.getParameter(SERVER_KEY, DEFAULT_SERVER))) {\n-            ServletContext servletContext = ServletManager.getInstance().getServletContext(ServletManager.EXTERNAL_SERVER_PORT);\n-            if (servletContext == null) {\n-                throw new RpcException(\"No servlet context found. Since you are using server='servlet', \" +\n-                        \"make sure that you've configured \" + BootstrapListener.class.getName() + \" in web.xml\");\n-            }\n-            String webappPath = servletContext.getContextPath();\n-            if (StringUtils.isNotEmpty(webappPath)) {\n-                webappPath = webappPath.substring(1);\n-                if (!contextPath.startsWith(webappPath)) {\n-                    throw new RpcException(\"Since you are using server='servlet', \" +\n-                            \"make sure that the 'contextpath' property starts with the path of external webapp\");\n-                }\n-                contextPath = contextPath.substring(webappPath.length());\n-                if (contextPath.startsWith(\"/\")) {\n-                    contextPath = contextPath.substring(1);\n-                }\n-            }\n-        }\n-\n-        final Class resourceDef = GetRestful.getRootResourceClass(implClass) != null ? implClass : type;\n-\n-        server.deploy(resourceDef, impl, contextPath);\n-\n-        final RestProtocolServer s = server;\n-        return () -> {\n-            // TODO due to dubbo's current architecture,\n-            // it will be called from registry protocol in the shutdown process and won't appear in logs\n-            s.undeploy(resourceDef);\n-        };\n-    }\n-\n-    @Override\n-    protected <T> T doRefer(Class<T> serviceType, URL url) throws RpcException {\n-\n-        // TODO more configs to add\n-        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();\n-        // 20 is the default maxTotal of current PoolingClientConnectionManager\n-        connectionManager.setMaxTotal(url.getParameter(CONNECTIONS_KEY, HTTPCLIENTCONNECTIONMANAGER_MAXTOTAL));\n-        connectionManager.setDefaultMaxPerRoute(url.getParameter(CONNECTIONS_KEY, HTTPCLIENTCONNECTIONMANAGER_MAXPERROUTE));\n-\n-        if (connectionMonitor == null) {\n-            connectionMonitor = new ConnectionMonitor();\n-            connectionMonitor.start();\n-        }\n-        connectionMonitor.addConnectionManager(connectionManager);\n-        RequestConfig requestConfig = RequestConfig.custom()\n-                .setConnectTimeout(url.getParameter(CONNECT_TIMEOUT_KEY, DEFAULT_CONNECT_TIMEOUT))\n-                .setSocketTimeout(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT))\n-                .build();\n-\n-        SocketConfig socketConfig = SocketConfig.custom()\n-                .setSoKeepAlive(true)\n-                .setTcpNoDelay(true)\n-                .build();\n-\n-        CloseableHttpClient httpClient = HttpClientBuilder.create()\n-                .setConnectionManager(connectionManager)\n-                .setKeepAliveStrategy((response, context) -> {\n-                    HeaderElementIterator it = new BasicHeaderElementIterator(response.headerIterator(HTTP.CONN_KEEP_ALIVE));\n-                    while (it.hasNext()) {\n-                        HeaderElement he = it.nextElement();\n-                        String param = he.getName();\n-                        String value = he.getValue();\n-                        if (value != null && param.equalsIgnoreCase(TIMEOUT_KEY)) {\n-                            return Long.parseLong(value) * 1000;\n-                        }\n-                    }\n-                    return HTTPCLIENT_KEEPALIVEDURATION;\n-                })\n-                .setDefaultRequestConfig(requestConfig)\n-                .setDefaultSocketConfig(socketConfig)\n-                .build();\n-\n-        ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient/*, localContext*/);\n-\n-        ResteasyClient client = new ResteasyClientBuilder().httpEngine(engine).build();\n-        clients.add(client);\n-\n-        client.register(RpcContextFilter.class);\n-        for (String clazz : COMMA_SPLIT_PATTERN.split(url.getParameter(EXTENSION_KEY, \"\"))) {\n-            if (!StringUtils.isEmpty(clazz)) {\n-                try {\n-                    client.register(Thread.currentThread().getContextClassLoader().loadClass(clazz.trim()));\n-                } catch (ClassNotFoundException e) {\n-                    throw new RpcException(\"Error loading JAX-RS extension class: \" + clazz.trim(), e);\n-                }\n-            }\n-        }\n-\n-        // TODO protocol\n-        ResteasyWebTarget target = client.target(\"http://\" + url.getHost() + \":\" + url.getPort() + \"/\" + getContextPath(url));\n-        return target.proxy(serviceType);\n-    }\n-\n-    @Override\n-    protected int getErrorCode(Throwable e) {\n-        // TODO\n-        return super.getErrorCode(e);\n-    }\n-\n-    @Override\n-    public void destroy() {\n-        super.destroy();\n-\n-        if (connectionMonitor != null) {\n-            connectionMonitor.shutdown();\n-        }\n-\n-        for (Map.Entry<String, ProtocolServer> entry : serverMap.entrySet()) {\n-            try {\n-                if (logger.isInfoEnabled()) {\n-                    logger.info(\"Closing the rest server at \" + entry.getKey());\n-                }\n-                entry.getValue().close();\n-            } catch (Throwable t) {\n-                logger.warn(\"Error closing rest server\", t);\n-            }\n-        }\n-        serverMap.clear();\n-\n-        if (logger.isInfoEnabled()) {\n-            logger.info(\"Closing rest clients\");\n-        }\n-        for (ResteasyClient client : clients) {\n-            try {\n-                client.close();\n-            } catch (Throwable t) {\n-                logger.warn(\"Error closing rest client\", t);\n-            }\n-        }\n-        clients.clear();\n-    }\n-\n-    /**\n-     *  getPath() will return: [contextpath + \"/\" +] path\n-     *  1. contextpath is empty if user does not set through ProtocolConfig or ProviderConfig\n-     *  2. path will never be empty, it's default value is the interface name.\n-     *\n-     * @return return path only if user has explicitly gave then a value.\n-     */\n-    protected String getContextPath(URL url) {\n-        String contextPath = url.getPath();\n-        if (contextPath != null) {\n-            if (contextPath.equalsIgnoreCase(url.getParameter(INTERFACE_KEY))) {\n-                return \"\";\n-            }\n-            if (contextPath.endsWith(url.getParameter(INTERFACE_KEY))) {\n-                contextPath = contextPath.substring(0, contextPath.lastIndexOf(url.getParameter(INTERFACE_KEY)));\n-            }\n-            return contextPath.endsWith(\"/\") ? contextPath.substring(0, contextPath.length() - 1) : contextPath;\n-        } else {\n-            return \"\";\n-        }\n-    }\n-\n-    protected class ConnectionMonitor extends Thread {\n-        private volatile boolean shutdown;\n-        private final List<PoolingHttpClientConnectionManager> connectionManagers = Collections.synchronizedList(new LinkedList<>());\n-\n-        public void addConnectionManager(PoolingHttpClientConnectionManager connectionManager) {\n-            connectionManagers.add(connectionManager);\n-        }\n-\n-        @Override\n-        public void run() {\n-            try {\n-                while (!shutdown) {\n-                    synchronized (this) {\n-                        wait(HTTPCLIENTCONNECTIONMANAGER_CLOSEWAITTIME_MS);\n-                        for (PoolingHttpClientConnectionManager connectionManager : connectionManagers) {\n-                            connectionManager.closeExpiredConnections();\n-                            connectionManager.closeIdleConnections(HTTPCLIENTCONNECTIONMANAGER_CLOSEIDLETIME_S, TimeUnit.SECONDS);\n-                        }\n-                    }\n-                }\n-            } catch (InterruptedException ex) {\n-                shutdown();\n-            }\n-        }\n-\n-        public void shutdown() {\n-            shutdown = true;\n-            connectionManagers.clear();\n-            synchronized (this) {\n-                notifyAll();\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.rpc.protocol.rest;\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.remoting.http.HttpBinder;\r\n+import org.apache.dubbo.remoting.http.servlet.BootstrapListener;\r\n+import org.apache.dubbo.remoting.http.servlet.ServletManager;\r\n+import org.apache.dubbo.rpc.ProtocolServer;\r\n+import org.apache.dubbo.rpc.RpcException;\r\n+import org.apache.dubbo.rpc.model.ApplicationModel;\r\n+import org.apache.dubbo.rpc.protocol.AbstractProxyProtocol;\r\n+\r\n+import org.apache.http.HeaderElement;\r\n+import org.apache.http.HeaderElementIterator;\r\n+import org.apache.http.client.config.RequestConfig;\r\n+import org.apache.http.config.SocketConfig;\r\n+import org.apache.http.impl.client.CloseableHttpClient;\r\n+import org.apache.http.impl.client.HttpClientBuilder;\r\n+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;\r\n+import org.apache.http.message.BasicHeaderElementIterator;\r\n+import org.apache.http.protocol.HTTP;\r\n+import org.jboss.resteasy.client.jaxrs.ResteasyClient;\r\n+import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;\r\n+import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;\r\n+import org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine;\r\n+import org.jboss.resteasy.util.GetRestful;\r\n+\r\n+import javax.servlet.ServletContext;\r\n+import javax.ws.rs.ProcessingException;\r\n+import javax.ws.rs.WebApplicationException;\r\n+import java.util.Collections;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.concurrent.TimeUnit;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_TIMEOUT;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.CONNECTIONS_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.CONNECT_TIMEOUT_KEY;\r\n+import static org.apache.dubbo.remoting.Constants.DEFAULT_CONNECT_TIMEOUT;\r\n+import static org.apache.dubbo.remoting.Constants.SERVER_KEY;\r\n+import static org.apache.dubbo.rpc.protocol.rest.Constants.EXTENSION_KEY;\r\n+\r\n+public class RestProtocol extends AbstractProxyProtocol {\r\n+\r\n+    private static final int DEFAULT_PORT = 80;\r\n+    private static final String DEFAULT_SERVER = \"jetty\";\r\n+\r\n+    private static final int HTTPCLIENTCONNECTIONMANAGER_MAXPERROUTE = 20;\r\n+    private static final int HTTPCLIENTCONNECTIONMANAGER_MAXTOTAL = 20;\r\n+    private static final int HTTPCLIENT_KEEPALIVEDURATION = 30 * 1000;\r\n+    private static final int HTTPCLIENTCONNECTIONMANAGER_CLOSEWAITTIME_MS = 1000;\r\n+    private static final int HTTPCLIENTCONNECTIONMANAGER_CLOSEIDLETIME_S = 30;\r\n+\r\n+    private final RestServerFactory serverFactory = new RestServerFactory();\r\n+\r\n+    // TODO in the future maybe we can just use a single rest client and connection manager\r\n+    private final List<ResteasyClient> clients = Collections.synchronizedList(new LinkedList<>());\r\n+\r\n+    private volatile ConnectionMonitor connectionMonitor;\r\n+\r\n+    public RestProtocol() {\r\n+        super(WebApplicationException.class, ProcessingException.class);\r\n+    }\r\n+\r\n+    public void setHttpBinder(HttpBinder httpBinder) {\r\n+        serverFactory.setHttpBinder(httpBinder);\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getDefaultPort() {\r\n+        return DEFAULT_PORT;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected <T> Runnable doExport(T impl, Class<T> type, URL url) throws RpcException {\r\n+        String addr = getAddr(url);\r\n+        Class implClass = ApplicationModel.getProviderModel(url.getServiceKey()).getServiceInstance().getClass();\r\n+        RestProtocolServer server = (RestProtocolServer) serverMap.computeIfAbsent(addr, restServer -> {\r\n+            RestProtocolServer s = serverFactory.createServer(url.getParameter(SERVER_KEY, DEFAULT_SERVER));\r\n+            s.setAddress(url.getAddress());\r\n+            s.start(url);\r\n+            return s;\r\n+        });\r\n+\r\n+        String contextPath = getContextPath(url);\r\n+        if (\"servlet\".equalsIgnoreCase(url.getParameter(SERVER_KEY, DEFAULT_SERVER))) {\r\n+            ServletContext servletContext = ServletManager.getInstance().getServletContext(ServletManager.EXTERNAL_SERVER_PORT);\r\n+            if (servletContext == null) {\r\n+                throw new RpcException(\"No servlet context found. Since you are using server='servlet', \" +\r\n+                        \"make sure that you've configured \" + BootstrapListener.class.getName() + \" in web.xml\");\r\n+            }\r\n+            String webappPath = servletContext.getContextPath();\r\n+            if (StringUtils.isNotEmpty(webappPath)) {\r\n+                webappPath = webappPath.substring(1);\r\n+                if (!contextPath.startsWith(webappPath)) {\r\n+                    throw new RpcException(\"Since you are using server='servlet', \" +\r\n+                            \"make sure that the 'contextpath' property starts with the path of external webapp\");\r\n+                }\r\n+                contextPath = contextPath.substring(webappPath.length());\r\n+                if (contextPath.startsWith(\"/\")) {\r\n+                    contextPath = contextPath.substring(1);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        final Class resourceDef = GetRestful.getRootResourceClass(implClass) != null ? implClass : type;\r\n+\r\n+        server.deploy(resourceDef, impl, contextPath);\r\n+\r\n+        final RestProtocolServer s = server;\r\n+        return () -> {\r\n+            // TODO due to dubbo's current architecture,\r\n+            // it will be called from registry protocol in the shutdown process and won't appear in logs\r\n+            s.undeploy(resourceDef);\r\n+        };\r\n+    }\r\n+\r\n+    @Override\r\n+    protected <T> T doRefer(Class<T> serviceType, URL url) throws RpcException {\r\n+\r\n+        // TODO more configs to add\r\n+        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();\r\n+        // 20 is the default maxTotal of current PoolingClientConnectionManager\r\n+        connectionManager.setMaxTotal(url.getParameter(CONNECTIONS_KEY, HTTPCLIENTCONNECTIONMANAGER_MAXTOTAL));\r\n+        connectionManager.setDefaultMaxPerRoute(url.getParameter(CONNECTIONS_KEY, HTTPCLIENTCONNECTIONMANAGER_MAXPERROUTE));\r\n+\r\n+        if (connectionMonitor == null) {\r\n+            connectionMonitor = new ConnectionMonitor();\r\n+            connectionMonitor.start();\r\n+        }\r\n+        connectionMonitor.addConnectionManager(connectionManager);\r\n+        RequestConfig requestConfig = RequestConfig.custom()\r\n+                .setConnectTimeout(url.getParameter(CONNECT_TIMEOUT_KEY, DEFAULT_CONNECT_TIMEOUT))\r\n+                .setSocketTimeout(url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT))\r\n+                .build();\r\n+\r\n+        SocketConfig socketConfig = SocketConfig.custom()\r\n+                .setSoKeepAlive(true)\r\n+                .setTcpNoDelay(true)\r\n+                .build();\r\n+\r\n+        CloseableHttpClient httpClient = HttpClientBuilder.create()\r\n+                .setConnectionManager(connectionManager)\r\n+                .setKeepAliveStrategy((response, context) -> {\r\n+                    HeaderElementIterator it = new BasicHeaderElementIterator(response.headerIterator(HTTP.CONN_KEEP_ALIVE));\r\n+                    while (it.hasNext()) {\r\n+                        HeaderElement he = it.nextElement();\r\n+                        String param = he.getName();\r\n+                        String value = he.getValue();\r\n+                        if (value != null && param.equalsIgnoreCase(TIMEOUT_KEY)) {\r\n+                            return Long.parseLong(value) * 1000;\r\n+                        }\r\n+                    }\r\n+                    return HTTPCLIENT_KEEPALIVEDURATION;\r\n+                })\r\n+                .setDefaultRequestConfig(requestConfig)\r\n+                .setDefaultSocketConfig(socketConfig)\r\n+                .build();\r\n+\r\n+        ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient/*, localContext*/);\r\n+\r\n+        ResteasyClient client = new ResteasyClientBuilder().httpEngine(engine).build();\r\n+        clients.add(client);\r\n+\r\n+        client.register(RpcContextFilter.class);\r\n+        for (String clazz : COMMA_SPLIT_PATTERN.split(url.getParameter(EXTENSION_KEY, \"\"))) {\r\n+            if (!StringUtils.isEmpty(clazz)) {\r\n+                try {\r\n+                    client.register(Thread.currentThread().getContextClassLoader().loadClass(clazz.trim()));\r\n+                } catch (ClassNotFoundException e) {\r\n+                    throw new RpcException(\"Error loading JAX-RS extension class: \" + clazz.trim(), e);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        // TODO protocol\r\n+        ResteasyWebTarget target = client.target(\"http://\" + url.getHost() + \":\" + url.getPort() + \"/\" + getContextPath(url));\r\n+        return target.proxy(serviceType);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected int getErrorCode(Throwable e) {\r\n+        // TODO\r\n+        return super.getErrorCode(e);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void destroy() {\r\n+        super.destroy();\r\n+\r\n+        if (connectionMonitor != null) {\r\n+            connectionMonitor.shutdown();\r\n+        }\r\n+\r\n+        for (Map.Entry<String, ProtocolServer> entry : serverMap.entrySet()) {\r\n+            try {\r\n+                if (logger.isInfoEnabled()) {\r\n+                    logger.info(\"Closing the rest server at \" + entry.getKey());\r\n+                }\r\n+                entry.getValue().close();\r\n+            } catch (Throwable t) {\r\n+                logger.warn(\"Error closing rest server\", t);\r\n+            }\r\n+        }\r\n+        serverMap.clear();\r\n+\r\n+        if (logger.isInfoEnabled()) {\r\n+            logger.info(\"Closing rest clients\");\r\n+        }\r\n+        for (ResteasyClient client : clients) {\r\n+            try {\r\n+                client.close();\r\n+            } catch (Throwable t) {\r\n+                logger.warn(\"Error closing rest client\", t);\r\n+            }\r\n+        }\r\n+        clients.clear();\r\n+    }\r\n+\r\n+    /**\r\n+     *  getPath() will return: [contextpath + \"/\" +] path\r\n+     *  1. contextpath is empty if user does not set through ProtocolConfig or ProviderConfig\r\n+     *  2. path will never be empty, it's default value is the interface name.\r\n+     *\r\n+     * @return return path only if user has explicitly gave then a value.\r\n+     */\r\n+    protected String getContextPath(URL url) {\r\n+        String contextPath = url.getPath();\r\n+        if (contextPath != null) {\r\n+            if (contextPath.equalsIgnoreCase(url.getParameter(INTERFACE_KEY))) {\r\n+                return \"\";\r\n+            }\r\n+            if (contextPath.endsWith(url.getParameter(INTERFACE_KEY))) {\r\n+                contextPath = contextPath.substring(0, contextPath.lastIndexOf(url.getParameter(INTERFACE_KEY)));\r\n+            }\r\n+            return contextPath.endsWith(\"/\") ? contextPath.substring(0, contextPath.length() - 1) : contextPath;\r\n+        } else {\r\n+            return \"\";\r\n+        }\r\n+    }\r\n+\r\n+    protected class ConnectionMonitor extends Thread {\r\n+        private volatile boolean shutdown;\r\n+        private final List<PoolingHttpClientConnectionManager> connectionManagers = Collections.synchronizedList(new LinkedList<>());\r\n+\r\n+        public void addConnectionManager(PoolingHttpClientConnectionManager connectionManager) {\r\n+            connectionManagers.add(connectionManager);\r\n+        }\r\n+\r\n+        @Override\r\n+        public void run() {\r\n+            try {\r\n+                while (!shutdown) {\r\n+                    synchronized (this) {\r\n+                        wait(HTTPCLIENTCONNECTIONMANAGER_CLOSEWAITTIME_MS);\r\n+                        for (PoolingHttpClientConnectionManager connectionManager : connectionManagers) {\r\n+                            connectionManager.closeExpiredConnections();\r\n+                            connectionManager.closeIdleConnections(HTTPCLIENTCONNECTIONMANAGER_CLOSEIDLETIME_S, TimeUnit.SECONDS);\r\n+                        }\r\n+                    }\r\n+                }\r\n+            } catch (InterruptedException ex) {\r\n+                shutdown();\r\n+            }\r\n+        }\r\n+\r\n+        public void shutdown() {\r\n+            shutdown = true;\r\n+            connectionManagers.clear();\r\n+            synchronized (this) {\r\n+                notifyAll();\r\n+            }\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/rest/RestProtocolServer.java", "source2": "org/apache/dubbo/rpc/protocol/rest/RestProtocolServer.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,33 +1,33 @@\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.rpc.protocol.rest;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.rpc.ProtocolServer;\n-\n-public interface RestProtocolServer extends ProtocolServer {\n-\n-    void start(URL url);\n-\n-    /**\n-     * @param resourceDef it could be either resource interface or resource impl\n-     */\n-    void deploy(Class resourceDef, Object resourceInstance, String contextPath);\n-\n-    void undeploy(Class resourceDef);\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.rpc.protocol.rest;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.rpc.ProtocolServer;\r\n+\r\n+public interface RestProtocolServer extends ProtocolServer {\r\n+\r\n+    void start(URL url);\r\n+\r\n+    /**\r\n+     * @param resourceDef it could be either resource interface or resource impl\r\n+     */\r\n+    void deploy(Class resourceDef, Object resourceInstance, String contextPath);\r\n+\r\n+    void undeploy(Class resourceDef);\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/rest/RestServerFactory.java", "source2": "org/apache/dubbo/rpc/protocol/rest/RestServerFactory.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,44 +1,44 @@\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.rpc.protocol.rest;\n-\n-import org.apache.dubbo.remoting.http.HttpBinder;\n-\n-/**\n- * Only the server that implements servlet container\n- * could support something like @Context injection of servlet objects.\n- *\n- */\n-public class RestServerFactory {\n-\n-    private HttpBinder httpBinder;\n-\n-    public void setHttpBinder(HttpBinder httpBinder) {\n-        this.httpBinder = httpBinder;\n-    }\n-\n-    public RestProtocolServer createServer(String name) {\n-        // TODO move names to Constants\n-        if (\"servlet\".equalsIgnoreCase(name) || \"jetty\".equalsIgnoreCase(name) || \"tomcat\".equalsIgnoreCase(name)) {\n-            return new DubboHttpProtocolServer(httpBinder);\n-        } else if (\"netty\".equalsIgnoreCase(name)) {\n-            return new NettyRestProtocolServer();\n-        } else {\n-            throw new IllegalArgumentException(\"Unrecognized server name: \" + name);\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.rpc.protocol.rest;\r\n+\r\n+import org.apache.dubbo.remoting.http.HttpBinder;\r\n+\r\n+/**\r\n+ * Only the server that implements servlet container\r\n+ * could support something like @Context injection of servlet objects.\r\n+ *\r\n+ */\r\n+public class RestServerFactory {\r\n+\r\n+    private HttpBinder httpBinder;\r\n+\r\n+    public void setHttpBinder(HttpBinder httpBinder) {\r\n+        this.httpBinder = httpBinder;\r\n+    }\r\n+\r\n+    public RestProtocolServer createServer(String name) {\r\n+        // TODO move names to Constants\r\n+        if (\"servlet\".equalsIgnoreCase(name) || \"jetty\".equalsIgnoreCase(name) || \"tomcat\".equalsIgnoreCase(name)) {\r\n+            return new DubboHttpProtocolServer(httpBinder);\r\n+        } else if (\"netty\".equalsIgnoreCase(name)) {\r\n+            return new NettyRestProtocolServer();\r\n+        } else {\r\n+            throw new IllegalArgumentException(\"Unrecognized server name: \" + name);\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/rest/RpcContextFilter.java", "source2": "org/apache/dubbo/rpc/protocol/rest/RpcContextFilter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,106 +1,106 @@\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.rpc.protocol.rest;\n-\n-import org.apache.dubbo.common.utils.StringUtils;\n-import org.apache.dubbo.rpc.RpcContext;\n-\n-import org.jboss.resteasy.spi.ResteasyProviderFactory;\n-\n-import javax.annotation.Priority;\n-import javax.servlet.http.HttpServletRequest;\n-import javax.servlet.http.HttpServletResponse;\n-import javax.ws.rs.client.ClientRequestContext;\n-import javax.ws.rs.client.ClientRequestFilter;\n-import javax.ws.rs.container.ContainerRequestContext;\n-import javax.ws.rs.container.ContainerRequestFilter;\n-import java.io.IOException;\n-import java.nio.charset.StandardCharsets;\n-import java.util.Map;\n-\n-@Priority(Integer.MIN_VALUE + 1)\n-public class RpcContextFilter implements ContainerRequestFilter, ClientRequestFilter {\n-\n-    private static final String DUBBO_ATTACHMENT_HEADER = \"Dubbo-Attachments\";\n-\n-    // currently we use a single header to hold the attachments so that the total attachment size limit is about 8k\n-    private static final int MAX_HEADER_SIZE = 8 * 1024;\n-\n-    @Override\n-    public void filter(ContainerRequestContext requestContext) throws IOException {\n-        HttpServletRequest request = ResteasyProviderFactory.getContextData(HttpServletRequest.class);\n-        RpcContext.getContext().setRequest(request);\n-\n-        // this only works for servlet containers\n-        if (request != null && RpcContext.getContext().getRemoteAddress() == null) {\n-            RpcContext.getContext().setRemoteAddress(request.getRemoteAddr(), request.getRemotePort());\n-        }\n-\n-        RpcContext.getContext().setResponse(ResteasyProviderFactory.getContextData(HttpServletResponse.class));\n-\n-        String headers = requestContext.getHeaderString(DUBBO_ATTACHMENT_HEADER);\n-        if (headers != null) {\n-            for (String header : headers.split(\",\")) {\n-                int index = header.indexOf(\"=\");\n-                if (index > 0) {\n-                    String key = header.substring(0, index);\n-                    String value = header.substring(index + 1);\n-                    if (!StringUtils.isEmpty(key)) {\n-                        RpcContext.getContext().setAttachment(key.trim(), value.trim());\n-                    }\n-                }\n-            }\n-        }\n-    }\n-\n-    @Override\n-    public void filter(ClientRequestContext requestContext) throws IOException {\n-        int size = 0;\n-        for (Map.Entry<String, Object> entry : RpcContext.getContext().getObjectAttachments().entrySet()) {\n-            String key = entry.getKey();\n-            String value = (String) entry.getValue();\n-            if (illegalHttpHeaderKey(key) || illegalHttpHeaderValue(value)) {\n-                throw new IllegalArgumentException(\"The attachments of \" + RpcContext.class.getSimpleName() + \" must not contain ',' or '=' when using rest protocol\");\n-            }\n-\n-            // TODO for now we don't consider the differences of encoding and server limit\n-            if (value != null) {\n-                size += value.getBytes(StandardCharsets.UTF_8).length;\n-            }\n-            if (size > MAX_HEADER_SIZE) {\n-                throw new IllegalArgumentException(\"The attachments of \" + RpcContext.class.getSimpleName() + \" is too big\");\n-            }\n-\n-            String attachments = key + \"=\" + value;\n-            requestContext.getHeaders().add(DUBBO_ATTACHMENT_HEADER, attachments);\n-        }\n-    }\n-\n-    private boolean illegalHttpHeaderKey(String key) {\n-        if (StringUtils.isNotEmpty(key)) {\n-            return key.contains(\",\") || key.contains(\"=\");\n-        }\n-        return false;\n-    }\n-\n-    private boolean illegalHttpHeaderValue(String value) {\n-        if (StringUtils.isNotEmpty(value)) {\n-            return value.contains(\",\");\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.rpc.protocol.rest;\r\n+\r\n+import org.apache.dubbo.common.utils.StringUtils;\r\n+import org.apache.dubbo.rpc.RpcContext;\r\n+\r\n+import org.jboss.resteasy.spi.ResteasyProviderFactory;\r\n+\r\n+import javax.annotation.Priority;\r\n+import javax.servlet.http.HttpServletRequest;\r\n+import javax.servlet.http.HttpServletResponse;\r\n+import javax.ws.rs.client.ClientRequestContext;\r\n+import javax.ws.rs.client.ClientRequestFilter;\r\n+import javax.ws.rs.container.ContainerRequestContext;\r\n+import javax.ws.rs.container.ContainerRequestFilter;\r\n+import java.io.IOException;\r\n+import java.nio.charset.StandardCharsets;\r\n+import java.util.Map;\r\n+\r\n+@Priority(Integer.MIN_VALUE + 1)\r\n+public class RpcContextFilter implements ContainerRequestFilter, ClientRequestFilter {\r\n+\r\n+    private static final String DUBBO_ATTACHMENT_HEADER = \"Dubbo-Attachments\";\r\n+\r\n+    // currently we use a single header to hold the attachments so that the total attachment size limit is about 8k\r\n+    private static final int MAX_HEADER_SIZE = 8 * 1024;\r\n+\r\n+    @Override\r\n+    public void filter(ContainerRequestContext requestContext) throws IOException {\r\n+        HttpServletRequest request = ResteasyProviderFactory.getContextData(HttpServletRequest.class);\r\n+        RpcContext.getContext().setRequest(request);\r\n+\r\n+        // this only works for servlet containers\r\n+        if (request != null && RpcContext.getContext().getRemoteAddress() == null) {\r\n+            RpcContext.getContext().setRemoteAddress(request.getRemoteAddr(), request.getRemotePort());\r\n+        }\r\n+\r\n+        RpcContext.getContext().setResponse(ResteasyProviderFactory.getContextData(HttpServletResponse.class));\r\n+\r\n+        String headers = requestContext.getHeaderString(DUBBO_ATTACHMENT_HEADER);\r\n+        if (headers != null) {\r\n+            for (String header : headers.split(\",\")) {\r\n+                int index = header.indexOf(\"=\");\r\n+                if (index > 0) {\r\n+                    String key = header.substring(0, index);\r\n+                    String value = header.substring(index + 1);\r\n+                    if (!StringUtils.isEmpty(key)) {\r\n+                        RpcContext.getContext().setAttachment(key.trim(), value.trim());\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    public void filter(ClientRequestContext requestContext) throws IOException {\r\n+        int size = 0;\r\n+        for (Map.Entry<String, Object> entry : RpcContext.getContext().getObjectAttachments().entrySet()) {\r\n+            String key = entry.getKey();\r\n+            String value = (String) entry.getValue();\r\n+            if (illegalHttpHeaderKey(key) || illegalHttpHeaderValue(value)) {\r\n+                throw new IllegalArgumentException(\"The attachments of \" + RpcContext.class.getSimpleName() + \" must not contain ',' or '=' when using rest protocol\");\r\n+            }\r\n+\r\n+            // TODO for now we don't consider the differences of encoding and server limit\r\n+            if (value != null) {\r\n+                size += value.getBytes(StandardCharsets.UTF_8).length;\r\n+            }\r\n+            if (size > MAX_HEADER_SIZE) {\r\n+                throw new IllegalArgumentException(\"The attachments of \" + RpcContext.class.getSimpleName() + \" is too big\");\r\n+            }\r\n+\r\n+            String attachments = key + \"=\" + value;\r\n+            requestContext.getHeaders().add(DUBBO_ATTACHMENT_HEADER, attachments);\r\n+        }\r\n+    }\r\n+\r\n+    private boolean illegalHttpHeaderKey(String key) {\r\n+        if (StringUtils.isNotEmpty(key)) {\r\n+            return key.contains(\",\") || key.contains(\"=\");\r\n+        }\r\n+        return false;\r\n+    }\r\n+\r\n+    private boolean illegalHttpHeaderValue(String value) {\r\n+        if (StringUtils.isNotEmpty(value)) {\r\n+            return value.contains(\",\");\r\n+        }\r\n+        return false;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/rpc/protocol/rest/integration/swagger/DubboSwaggerService.java", "source2": "org/apache/dubbo/rpc/protocol/rest/integration/swagger/DubboSwaggerService.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,43 +1,43 @@\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.rpc.protocol.rest.integration.swagger;\n-\n-import com.fasterxml.jackson.core.JsonProcessingException;\n-\n-import javax.servlet.ServletConfig;\n-import javax.ws.rs.Consumes;\n-import javax.ws.rs.GET;\n-import javax.ws.rs.Path;\n-import javax.ws.rs.Produces;\n-import javax.ws.rs.core.Application;\n-import javax.ws.rs.core.Context;\n-import javax.ws.rs.core.HttpHeaders;\n-import javax.ws.rs.core.MediaType;\n-import javax.ws.rs.core.Response;\n-import javax.ws.rs.core.UriInfo;\n-\n-\n-@Path(\"dubbo\")\n-@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})\n-@Produces({MediaType.APPLICATION_JSON + \"; \" + \"charset=UTF-8\", MediaType.TEXT_XML + \"; \" + \"charset=UTF-8\"})\n-public interface DubboSwaggerService {\n-\n-    @GET\n-    @Path(\"swagger\")\n-    Response getListingJson(@Context Application app, @Context ServletConfig sc,\n-                            @Context HttpHeaders headers, @Context UriInfo uriInfo) throws JsonProcessingException;\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.rpc.protocol.rest.integration.swagger;\r\n+\r\n+import com.fasterxml.jackson.core.JsonProcessingException;\r\n+\r\n+import javax.servlet.ServletConfig;\r\n+import javax.ws.rs.Consumes;\r\n+import javax.ws.rs.GET;\r\n+import javax.ws.rs.Path;\r\n+import javax.ws.rs.Produces;\r\n+import javax.ws.rs.core.Application;\r\n+import javax.ws.rs.core.Context;\r\n+import javax.ws.rs.core.HttpHeaders;\r\n+import javax.ws.rs.core.MediaType;\r\n+import javax.ws.rs.core.Response;\r\n+import javax.ws.rs.core.UriInfo;\r\n+\r\n+\r\n+@Path(\"dubbo\")\r\n+@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})\r\n+@Produces({MediaType.APPLICATION_JSON + \"; \" + \"charset=UTF-8\", MediaType.TEXT_XML + \"; \" + \"charset=UTF-8\"})\r\n+public interface DubboSwaggerService {\r\n+\r\n+    @GET\r\n+    @Path(\"swagger\")\r\n+    Response getListingJson(@Context Application app, @Context ServletConfig sc,\r\n+                            @Context HttpHeaders headers, @Context UriInfo uriInfo) throws JsonProcessingException;\r\n }\n"}, {"source1": "org/apache/dubbo/rpc/protocol/rest/support/LoggingFilter.java", "source2": "org/apache/dubbo/rpc/protocol/rest/support/LoggingFilter.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,148 +1,148 @@\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.rpc.protocol.rest.support;\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-\n-import org.apache.commons.io.IOUtils;\n-\n-import javax.annotation.Priority;\n-import javax.ws.rs.WebApplicationException;\n-import javax.ws.rs.client.ClientRequestContext;\n-import javax.ws.rs.client.ClientRequestFilter;\n-import javax.ws.rs.client.ClientResponseContext;\n-import javax.ws.rs.client.ClientResponseFilter;\n-import javax.ws.rs.container.ContainerRequestContext;\n-import javax.ws.rs.container.ContainerRequestFilter;\n-import javax.ws.rs.container.ContainerResponseContext;\n-import javax.ws.rs.container.ContainerResponseFilter;\n-import javax.ws.rs.core.MultivaluedMap;\n-import javax.ws.rs.ext.ReaderInterceptor;\n-import javax.ws.rs.ext.ReaderInterceptorContext;\n-import javax.ws.rs.ext.WriterInterceptor;\n-import javax.ws.rs.ext.WriterInterceptorContext;\n-import java.io.ByteArrayInputStream;\n-import java.io.ByteArrayOutputStream;\n-import java.io.IOException;\n-import java.io.OutputStream;\n-import java.nio.charset.StandardCharsets;\n-import java.util.List;\n-import java.util.Map;\n-\n-/**\n- * This logging filter is not highly optimized for now\n- *\n- */\n-@Priority(Integer.MIN_VALUE)\n-public class LoggingFilter implements ContainerRequestFilter, ClientRequestFilter, ContainerResponseFilter, ClientResponseFilter, WriterInterceptor, ReaderInterceptor {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(LoggingFilter.class);\n-\n-    @Override\n-    public void filter(ClientRequestContext context) throws IOException {\n-        logHttpHeaders(context.getStringHeaders());\n-    }\n-\n-    @Override\n-    public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {\n-        logHttpHeaders(responseContext.getHeaders());\n-    }\n-\n-    @Override\n-    public void filter(ContainerRequestContext context) throws IOException {\n-        logHttpHeaders(context.getHeaders());\n-    }\n-\n-    @Override\n-    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {\n-        logHttpHeaders(responseContext.getStringHeaders());\n-    }\n-\n-    @Override\n-    public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException {\n-        byte[] buffer = IOUtils.toByteArray(context.getInputStream());\n-        logger.info(\"The contents of request body is: \\n\" + new String(buffer, StandardCharsets.UTF_8) + \"\\n\");\n-        context.setInputStream(new ByteArrayInputStream(buffer));\n-        return context.proceed();\n-    }\n-\n-    @Override\n-    public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {\n-        OutputStreamWrapper wrapper = new OutputStreamWrapper(context.getOutputStream());\n-        context.setOutputStream(wrapper);\n-        context.proceed();\n-        logger.info(\"The contents of response body is: \\n\" + new String(wrapper.getBytes(), StandardCharsets.UTF_8) + \"\\n\");\n-    }\n-\n-    protected void logHttpHeaders(MultivaluedMap<String, String> headers) {\n-        StringBuilder msg = new StringBuilder(\"The HTTP headers are: \\n\");\n-        for (Map.Entry<String, List<String>> entry : headers.entrySet()) {\n-            msg.append(entry.getKey()).append(\": \");\n-            for (int i = 0; i < entry.getValue().size(); i++) {\n-                msg.append(entry.getValue().get(i));\n-                if (i < entry.getValue().size() - 1) {\n-                    msg.append(\", \");\n-                }\n-            }\n-            msg.append(\"\\n\");\n-        }\n-        logger.info(msg.toString());\n-    }\n-\n-    protected static class OutputStreamWrapper extends OutputStream {\n-\n-        private final ByteArrayOutputStream buffer = new ByteArrayOutputStream();\n-        private final OutputStream output;\n-\n-        private OutputStreamWrapper(OutputStream output) {\n-            this.output = output;\n-        }\n-\n-        @Override\n-        public void write(int i) throws IOException {\n-            buffer.write(i);\n-            output.write(i);\n-        }\n-\n-        @Override\n-        public void write(byte[] b) throws IOException {\n-            buffer.write(b);\n-            output.write(b);\n-        }\n-\n-        @Override\n-        public void write(byte[] b, int off, int len) throws IOException {\n-            buffer.write(b, off, len);\n-            output.write(b, off, len);\n-        }\n-\n-        @Override\n-        public void flush() throws IOException {\n-            output.flush();\n-        }\n-\n-        @Override\n-        public void close() throws IOException {\n-            output.close();\n-        }\n-\n-        public byte[] getBytes() {\n-            return buffer.toByteArray();\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.rpc.protocol.rest.support;\r\n+\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+\r\n+import org.apache.commons.io.IOUtils;\r\n+\r\n+import javax.annotation.Priority;\r\n+import javax.ws.rs.WebApplicationException;\r\n+import javax.ws.rs.client.ClientRequestContext;\r\n+import javax.ws.rs.client.ClientRequestFilter;\r\n+import javax.ws.rs.client.ClientResponseContext;\r\n+import javax.ws.rs.client.ClientResponseFilter;\r\n+import javax.ws.rs.container.ContainerRequestContext;\r\n+import javax.ws.rs.container.ContainerRequestFilter;\r\n+import javax.ws.rs.container.ContainerResponseContext;\r\n+import javax.ws.rs.container.ContainerResponseFilter;\r\n+import javax.ws.rs.core.MultivaluedMap;\r\n+import javax.ws.rs.ext.ReaderInterceptor;\r\n+import javax.ws.rs.ext.ReaderInterceptorContext;\r\n+import javax.ws.rs.ext.WriterInterceptor;\r\n+import javax.ws.rs.ext.WriterInterceptorContext;\r\n+import java.io.ByteArrayInputStream;\r\n+import java.io.ByteArrayOutputStream;\r\n+import java.io.IOException;\r\n+import java.io.OutputStream;\r\n+import java.nio.charset.StandardCharsets;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+\r\n+/**\r\n+ * This logging filter is not highly optimized for now\r\n+ *\r\n+ */\r\n+@Priority(Integer.MIN_VALUE)\r\n+public class LoggingFilter implements ContainerRequestFilter, ClientRequestFilter, ContainerResponseFilter, ClientResponseFilter, WriterInterceptor, ReaderInterceptor {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(LoggingFilter.class);\r\n+\r\n+    @Override\r\n+    public void filter(ClientRequestContext context) throws IOException {\r\n+        logHttpHeaders(context.getStringHeaders());\r\n+    }\r\n+\r\n+    @Override\r\n+    public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {\r\n+        logHttpHeaders(responseContext.getHeaders());\r\n+    }\r\n+\r\n+    @Override\r\n+    public void filter(ContainerRequestContext context) throws IOException {\r\n+        logHttpHeaders(context.getHeaders());\r\n+    }\r\n+\r\n+    @Override\r\n+    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {\r\n+        logHttpHeaders(responseContext.getStringHeaders());\r\n+    }\r\n+\r\n+    @Override\r\n+    public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException {\r\n+        byte[] buffer = IOUtils.toByteArray(context.getInputStream());\r\n+        logger.info(\"The contents of request body is: \\n\" + new String(buffer, StandardCharsets.UTF_8) + \"\\n\");\r\n+        context.setInputStream(new ByteArrayInputStream(buffer));\r\n+        return context.proceed();\r\n+    }\r\n+\r\n+    @Override\r\n+    public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {\r\n+        OutputStreamWrapper wrapper = new OutputStreamWrapper(context.getOutputStream());\r\n+        context.setOutputStream(wrapper);\r\n+        context.proceed();\r\n+        logger.info(\"The contents of response body is: \\n\" + new String(wrapper.getBytes(), StandardCharsets.UTF_8) + \"\\n\");\r\n+    }\r\n+\r\n+    protected void logHttpHeaders(MultivaluedMap<String, String> headers) {\r\n+        StringBuilder msg = new StringBuilder(\"The HTTP headers are: \\n\");\r\n+        for (Map.Entry<String, List<String>> entry : headers.entrySet()) {\r\n+            msg.append(entry.getKey()).append(\": \");\r\n+            for (int i = 0; i < entry.getValue().size(); i++) {\r\n+                msg.append(entry.getValue().get(i));\r\n+                if (i < entry.getValue().size() - 1) {\r\n+                    msg.append(\", \");\r\n+                }\r\n+            }\r\n+            msg.append(\"\\n\");\r\n+        }\r\n+        logger.info(msg.toString());\r\n+    }\r\n+\r\n+    protected static class OutputStreamWrapper extends OutputStream {\r\n+\r\n+        private final ByteArrayOutputStream buffer = new ByteArrayOutputStream();\r\n+        private final OutputStream output;\r\n+\r\n+        private OutputStreamWrapper(OutputStream output) {\r\n+            this.output = output;\r\n+        }\r\n+\r\n+        @Override\r\n+        public void write(int i) throws IOException {\r\n+            buffer.write(i);\r\n+            output.write(i);\r\n+        }\r\n+\r\n+        @Override\r\n+        public void write(byte[] b) throws IOException {\r\n+            buffer.write(b);\r\n+            output.write(b);\r\n+        }\r\n+\r\n+        @Override\r\n+        public void write(byte[] b, int off, int len) throws IOException {\r\n+            buffer.write(b, off, len);\r\n+            output.write(b, off, len);\r\n+        }\r\n+\r\n+        @Override\r\n+        public void flush() throws IOException {\r\n+            output.flush();\r\n+        }\r\n+\r\n+        @Override\r\n+        public void close() throws IOException {\r\n+            output.close();\r\n+        }\r\n+\r\n+        public byte[] getBytes() {\r\n+            return buffer.toByteArray();\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-rpc-rest/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-rpc-rest/pom.xml", "unified_diff": null, "details": [{"source1": "META-INF/maven/org.apache.dubbo/dubbo-rpc-rest/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-rpc-rest/pom.xml", "comments": ["Ordering differences only"], "unified_diff": "@@ -81,26 +81,26 @@\n       <artifactId>netty-all</artifactId>\n     </dependency>\n     <dependency>\n       <groupId>io.swagger</groupId>\n       <artifactId>swagger-annotations</artifactId>\n       <exclusions>\n         <exclusion>\n-          <artifactId>jsr311-api</artifactId>\n           <groupId>javax.ws.rs</groupId>\n+          <artifactId>jsr311-api</artifactId>\n         </exclusion>\n       </exclusions>\n     </dependency>\n     <dependency>\n       <groupId>io.swagger</groupId>\n       <artifactId>swagger-jaxrs</artifactId>\n       <exclusions>\n         <exclusion>\n-          <artifactId>jsr311-api</artifactId>\n           <groupId>javax.ws.rs</groupId>\n+          <artifactId>jsr311-api</artifactId>\n         </exclusion>\n       </exclusions>\n     </dependency>\n     <dependency>\n       <groupId>org.apache.dubbo</groupId>\n       <artifactId>dubbo-serialization-jdk</artifactId>\n       <version>${project.parent.version}</version>\n"}]}]}
