{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,70 +1,70 @@\n-Zip file size: 191688 bytes, number of entries: 68\n+Zip file size: 195227 bytes, number of entries: 68\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/\n -rw----     2.0 fat      946 bX stor 70-Jan-01 00:00 META-INF/DEPENDENCIES\n -rw----     2.0 fat    11358 bX stor 70-Jan-01 00:00 META-INF/LICENSE\n -rw----     2.0 fat       25 bX stor 70-Jan-01 00:00 META-INF/MANIFEST.MF\n -rw----     2.0 fat      181 bX stor 70-Jan-01 00:00 META-INF/NOTICE\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/dubbo/internal/\n--rw----     2.0 fat      689 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.builder.TypeDefinitionBuilder\n--rw----     2.0 fat      869 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor\n--rw----     2.0 fat      314 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver\n+-rw----     2.0 fat      695 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.builder.TypeDefinitionBuilder\n+-rw----     2.0 fat      878 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor\n+-rw----     2.0 fat      316 bX stor 70-Jan-01 00:00 META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/\n -rw----     2.0 fat        0 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.properties\n--rw----     2.0 fat     6074 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml\n+-rw----     2.0 fat     5906 bX stor 70-Jan-01 00:00 META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 META-INF/services/\n--rw----     2.0 fat      185 bX stor 70-Jan-01 00:00 META-INF/services/javax.annotation.processing.Processor\n+-rw----     2.0 fat      187 bX stor 70-Jan-01 00:00 META-INF/services/javax.annotation.processing.Processor\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/\n--rw----     2.0 fat     3974 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java\n--rw----     2.0 fat     3729 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/ClassPathMetadataStorage.java\n--rw----     2.0 fat     2479 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/ServiceDefinitionMetadataAnnotationProcessor.java\n+-rw----     2.0 fat     4082 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java\n+-rw----     2.0 fat     3834 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/ClassPathMetadataStorage.java\n+-rw----     2.0 fat     2539 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/ServiceDefinitionMetadataAnnotationProcessor.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/\n--rw----     2.0 fat     1878 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/ArrayTypeDefinitionBuilder.java\n--rw----     2.0 fat     2553 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/CollectionTypeDefinitionBuilder.java\n--rw----     2.0 fat     1915 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/DeclaredTypeDefinitionBuilder.java\n--rw----     2.0 fat     2125 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/EnumTypeDefinitionBuilder.java\n--rw----     2.0 fat     2533 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/GeneralTypeDefinitionBuilder.java\n--rw----     2.0 fat     2498 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/MapTypeDefinitionBuilder.java\n--rw----     2.0 fat     2401 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/MethodDefinitionBuilder.java\n--rw----     2.0 fat     1755 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/PrimitiveTypeDefinitionBuilder.java\n--rw----     2.0 fat     2517 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/ServiceDefinitionBuilder.java\n--rw----     2.0 fat     1779 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/SimpleTypeDefinitionBuilder.java\n--rw----     2.0 fat     3836 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/TypeDefinitionBuilder.java\n+-rw----     2.0 fat     1928 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/ArrayTypeDefinitionBuilder.java\n+-rw----     2.0 fat     2614 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/CollectionTypeDefinitionBuilder.java\n+-rw----     2.0 fat     1964 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/DeclaredTypeDefinitionBuilder.java\n+-rw----     2.0 fat     2180 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/EnumTypeDefinitionBuilder.java\n+-rw----     2.0 fat     2598 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/GeneralTypeDefinitionBuilder.java\n+-rw----     2.0 fat     2560 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/MapTypeDefinitionBuilder.java\n+-rw----     2.0 fat     2454 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/MethodDefinitionBuilder.java\n+-rw----     2.0 fat     1802 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/PrimitiveTypeDefinitionBuilder.java\n+-rw----     2.0 fat     2573 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/ServiceDefinitionBuilder.java\n+-rw----     2.0 fat     1828 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/SimpleTypeDefinitionBuilder.java\n+-rw----     2.0 fat     3932 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/builder/TypeDefinitionBuilder.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/\n--rw----     2.0 fat     2583 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/AbstractAnnotatedMethodParameterProcessor.java\n--rw----     2.0 fat    13631 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/AbstractServiceRestMetadataResolver.java\n--rw----     2.0 fat     2443 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/AnnotatedMethodParameterProcessor.java\n--rw----     2.0 fat     7999 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/DefaultServiceRestMetadataResolver.java\n--rw----     2.0 fat     3662 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataAnnotationProcessor.java\n--rw----     2.0 fat     2210 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataResolver.java\n--rw----     2.0 fat     2438 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataStorage.java\n+-rw----     2.0 fat     2635 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/AbstractAnnotatedMethodParameterProcessor.java\n+-rw----     2.0 fat    13922 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/AbstractServiceRestMetadataResolver.java\n+-rw----     2.0 fat     2507 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/AnnotatedMethodParameterProcessor.java\n+-rw----     2.0 fat     8185 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/DefaultServiceRestMetadataResolver.java\n+-rw----     2.0 fat     3748 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataAnnotationProcessor.java\n+-rw----     2.0 fat     2265 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataResolver.java\n+-rw----     2.0 fat     2499 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataStorage.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/\n--rw----     2.0 fat     3030 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/DefaultValueParameterProcessor.java\n--rw----     2.0 fat     1388 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/FormParamParameterProcessor.java\n--rw----     2.0 fat     2380 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/HeaderParamParameterProcessor.java\n--rw----     2.0 fat     5230 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/JAXRSServiceRestMetadataResolver.java\n--rw----     2.0 fat     1396 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/MatrixParamParameterProcessor.java\n--rw----     2.0 fat     1913 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/ParamAnnotationParameterProcessor.java\n--rw----     2.0 fat     1392 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/QueryParamParameterProcessor.java\n+-rw----     2.0 fat     3105 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/DefaultValueParameterProcessor.java\n+-rw----     2.0 fat     1422 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/FormParamParameterProcessor.java\n+-rw----     2.0 fat     2431 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/HeaderParamParameterProcessor.java\n+-rw----     2.0 fat     5338 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/JAXRSServiceRestMetadataResolver.java\n+-rw----     2.0 fat     1430 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/MatrixParamParameterProcessor.java\n+-rw----     2.0 fat     1951 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/ParamAnnotationParameterProcessor.java\n+-rw----     2.0 fat     1426 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/QueryParamParameterProcessor.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/\n--rw----     2.0 fat     2975 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java\n--rw----     2.0 fat     1917 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestHeaderParameterProcessor.java\n--rw----     2.0 fat     1965 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestParamParameterProcessor.java\n--rw----     2.0 fat     7053 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/SpringMvcServiceRestMetadataResolver.java\n+-rw----     2.0 fat     3044 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java\n+-rw----     2.0 fat     1960 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestHeaderParameterProcessor.java\n+-rw----     2.0 fat     2009 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestParamParameterProcessor.java\n+-rw----     2.0 fat     7218 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/rest/springmvc/SpringMvcServiceRestMetadataResolver.java\n -rw----     2.0 fat        0 bx stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/\n--rw----     2.0 fat    11350 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/AnnotationUtils.java\n--rw----     2.0 fat     2692 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/ExecutableElementComparator.java\n--rw----     2.0 fat     6194 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/FieldUtils.java\n--rw----     2.0 fat     1468 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/LoggerUtils.java\n--rw----     2.0 fat     3507 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/MemberUtils.java\n--rw----     2.0 fat     7187 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/MethodUtils.java\n--rw----     2.0 fat     5018 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/ServiceAnnotationUtils.java\n--rw----     2.0 fat    15476 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java\n-68 files, 175110 bytes uncompressed, 175110 bytes compressed:  0.0%\n+-rw----     2.0 fat    11583 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/AnnotationUtils.java\n+-rw----     2.0 fat     2764 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/ExecutableElementComparator.java\n+-rw----     2.0 fat     6340 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/FieldUtils.java\n+-rw----     2.0 fat     1513 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/LoggerUtils.java\n+-rw----     2.0 fat     3601 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/MemberUtils.java\n+-rw----     2.0 fat     7343 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/MethodUtils.java\n+-rw----     2.0 fat     5155 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/ServiceAnnotationUtils.java\n+-rw----     2.0 fat    15875 bX stor 70-Jan-01 00:00 org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java\n+68 files, 178649 bytes uncompressed, 178649 bytes compressed:  0.0%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -194,3621 +194,3621 @@\n #\n 0332A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n 0332C   Length              0005 (5)\n 0332E   Flags               01 (1) 'Modification'\n 0332F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n 03333 PAYLOAD\n \n-035E4 DATA DESCRIPTOR       08074B50 (134695760)\n-035E8 CRC                   7D02909B (2097320091)\n-035EC Compressed Size       000002B1 (689)\n-035F0 Uncompressed Size     000002B1 (689)\n-\n-035F4 LOCAL HEADER #9       04034B50 (67324752)\n-035F8 Extract Zip Spec      14 (20) '2.0'\n-035F9 Extract OS            00 (0) 'MS-DOS'\n-035FA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-035FC Compression Method    0000 (0) 'Stored'\n-035FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03602 CRC                   00000000 (0)\n-03606 Compressed Size       00000000 (0)\n-0360A Uncompressed Size     00000000 (0)\n-0360E Filename Length       006E (110)\n-03610 Extra Length          0009 (9)\n-03612 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3612: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03680 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03682   Length              0005 (5)\n-03684   Flags               01 (1) 'Modification'\n-03685   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03689 PAYLOAD\n-\n-039EE DATA DESCRIPTOR       08074B50 (134695760)\n-039F2 CRC                   4B8794AA (1267176618)\n-039F6 Compressed Size       00000365 (869)\n-039FA Uncompressed Size     00000365 (869)\n-\n-039FE LOCAL HEADER #10      04034B50 (67324752)\n-03A02 Extract Zip Spec      14 (20) '2.0'\n-03A03 Extract OS            00 (0) 'MS-DOS'\n-03A04 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-03A06 Compression Method    0000 (0) 'Stored'\n-03A08 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03A0C CRC                   00000000 (0)\n-03A10 Compressed Size       00000000 (0)\n-03A14 Uncompressed Size     00000000 (0)\n-03A18 Filename Length       0068 (104)\n-03A1A Extra Length          0009 (9)\n-03A1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3A1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03A84 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03A86   Length              0005 (5)\n-03A88   Flags               01 (1) 'Modification'\n-03A89   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03A8D PAYLOAD\n-\n-03BC7 DATA DESCRIPTOR       08074B50 (134695760)\n-03BCB CRC                   26007615 (637564437)\n-03BCF Compressed Size       0000013A (314)\n-03BD3 Uncompressed Size     0000013A (314)\n-\n-03BD7 LOCAL HEADER #11      04034B50 (67324752)\n-03BDB Extract Zip Spec      14 (20) '2.0'\n-03BDC Extract OS            00 (0) 'MS-DOS'\n-03BDD General Purpose Flag  0000 (0)\n-03BDF Compression Method    0000 (0) 'Stored'\n-03BE1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03BE5 CRC                   00000000 (0)\n-03BE9 Compressed Size       00000000 (0)\n-03BED Uncompressed Size     00000000 (0)\n-03BF1 Filename Length       000F (15)\n-03BF3 Extra Length          0009 (9)\n-03BF5 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3BF5: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C04 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C06   Length              0005 (5)\n-03C08   Flags               01 (1) 'Modification'\n-03C09   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03C0D LOCAL HEADER #12      04034B50 (67324752)\n-03C11 Extract Zip Spec      14 (20) '2.0'\n-03C12 Extract OS            00 (0) 'MS-DOS'\n-03C13 General Purpose Flag  0000 (0)\n-03C15 Compression Method    0000 (0) 'Stored'\n-03C17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C1B CRC                   00000000 (0)\n-03C1F Compressed Size       00000000 (0)\n-03C23 Uncompressed Size     00000000 (0)\n-03C27 Filename Length       0020 (32)\n-03C29 Extra Length          0009 (9)\n-03C2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03C4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03C4D   Length              0005 (5)\n-03C4F   Flags               01 (1) 'Modification'\n-03C50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03C54 LOCAL HEADER #13      04034B50 (67324752)\n-03C58 Extract Zip Spec      14 (20) '2.0'\n-03C59 Extract OS            00 (0) 'MS-DOS'\n-03C5A General Purpose Flag  0000 (0)\n-03C5C Compression Method    0000 (0) 'Stored'\n-03C5E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03C62 CRC                   00000000 (0)\n-03C66 Compressed Size       00000000 (0)\n-03C6A Uncompressed Size     00000000 (0)\n-03C6E Filename Length       0039 (57)\n-03C70 Extra Length          0009 (9)\n-03C72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3C72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03CAB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03CAD   Length              0005 (5)\n-03CAF   Flags               01 (1) 'Modification'\n-03CB0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03CB4 LOCAL HEADER #14      04034B50 (67324752)\n-03CB8 Extract Zip Spec      14 (20) '2.0'\n-03CB9 Extract OS            00 (0) 'MS-DOS'\n-03CBA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-03CBC Compression Method    0000 (0) 'Stored'\n-03CBE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03CC2 CRC                   00000000 (0)\n-03CC6 Compressed Size       00000000 (0)\n-03CCA Uncompressed Size     00000000 (0)\n-03CCE Filename Length       0047 (71)\n-03CD0 Extra Length          0009 (9)\n-03CD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3CD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03D19 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03D1B   Length              0005 (5)\n-03D1D   Flags               01 (1) 'Modification'\n-03D1E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-03D22 DATA DESCRIPTOR       08074B50 (134695760)\n-03D26 CRC                   00000000 (0)\n-03D2A Compressed Size       00000000 (0)\n-03D2E Uncompressed Size     00000000 (0)\n-\n-03D32 LOCAL HEADER #15      04034B50 (67324752)\n-03D36 Extract Zip Spec      14 (20) '2.0'\n-03D37 Extract OS            00 (0) 'MS-DOS'\n-03D38 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-03D3A Compression Method    0000 (0) 'Stored'\n-03D3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-03D40 CRC                   00000000 (0)\n-03D44 Compressed Size       00000000 (0)\n-03D48 Uncompressed Size     00000000 (0)\n-03D4C Filename Length       0040 (64)\n-03D4E Extra Length          0009 (9)\n-03D50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x3D50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-03D90 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-03D92   Length              0005 (5)\n-03D94   Flags               01 (1) 'Modification'\n-03D95   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-03D99 PAYLOAD\n-\n-05553 DATA DESCRIPTOR       08074B50 (134695760)\n-05557 CRC                   E5DF924E (3856634446)\n-0555B Compressed Size       000017BA (6074)\n-0555F Uncompressed Size     000017BA (6074)\n-\n-05563 LOCAL HEADER #16      04034B50 (67324752)\n-05567 Extract Zip Spec      14 (20) '2.0'\n-05568 Extract OS            00 (0) 'MS-DOS'\n-05569 General Purpose Flag  0000 (0)\n-0556B Compression Method    0000 (0) 'Stored'\n-0556D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05571 CRC                   00000000 (0)\n-05575 Compressed Size       00000000 (0)\n-05579 Uncompressed Size     00000000 (0)\n-0557D Filename Length       0012 (18)\n-0557F Extra Length          0009 (9)\n-05581 Filename              'XXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5581: Filename 'XXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05593 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05595   Length              0005 (5)\n-05597   Flags               01 (1) 'Modification'\n-05598   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0559C LOCAL HEADER #17      04034B50 (67324752)\n-055A0 Extract Zip Spec      14 (20) '2.0'\n-055A1 Extract OS            00 (0) 'MS-DOS'\n-055A2 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-055A4 Compression Method    0000 (0) 'Stored'\n-055A6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-055AA CRC                   00000000 (0)\n-055AE Compressed Size       00000000 (0)\n-055B2 Uncompressed Size     00000000 (0)\n-055B6 Filename Length       0037 (55)\n-055B8 Extra Length          0009 (9)\n-055BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x55BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-055F1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-055F3   Length              0005 (5)\n-055F5   Flags               01 (1) 'Modification'\n-055F6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-055FA PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-                            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n-\n-056B3 DATA DESCRIPTOR       08074B50 (134695760)\n-056B7 CRC                   4D28F6B5 (1294530229)\n-056BB Compressed Size       000000B9 (185)\n-056BF Uncompressed Size     000000B9 (185)\n+035EA DATA DESCRIPTOR       08074B50 (134695760)\n+035EE CRC                   6A2B9F74 (1781243764)\n+035F2 Compressed Size       000002B7 (695)\n+035F6 Uncompressed Size     000002B7 (695)\n+\n+035FA LOCAL HEADER #9       04034B50 (67324752)\n+035FE Extract Zip Spec      14 (20) '2.0'\n+035FF Extract OS            00 (0) 'MS-DOS'\n+03600 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+03602 Compression Method    0000 (0) 'Stored'\n+03604 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03608 CRC                   00000000 (0)\n+0360C Compressed Size       00000000 (0)\n+03610 Uncompressed Size     00000000 (0)\n+03614 Filename Length       006E (110)\n+03616 Extra Length          0009 (9)\n+03618 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3618: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03686 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03688   Length              0005 (5)\n+0368A   Flags               01 (1) 'Modification'\n+0368B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0368F PAYLOAD\n+\n+039FD DATA DESCRIPTOR       08074B50 (134695760)\n+03A01 CRC                   64601D37 (1684020535)\n+03A05 Compressed Size       0000036E (878)\n+03A09 Uncompressed Size     0000036E (878)\n+\n+03A0D LOCAL HEADER #10      04034B50 (67324752)\n+03A11 Extract Zip Spec      14 (20) '2.0'\n+03A12 Extract OS            00 (0) 'MS-DOS'\n+03A13 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+03A15 Compression Method    0000 (0) 'Stored'\n+03A17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03A1B CRC                   00000000 (0)\n+03A1F Compressed Size       00000000 (0)\n+03A23 Uncompressed Size     00000000 (0)\n+03A27 Filename Length       0068 (104)\n+03A29 Extra Length          0009 (9)\n+03A2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3A2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03A93 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03A95   Length              0005 (5)\n+03A97   Flags               01 (1) 'Modification'\n+03A98   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03A9C PAYLOAD\n+\n+03BD8 DATA DESCRIPTOR       08074B50 (134695760)\n+03BDC CRC                   4EAEA219 (1320067609)\n+03BE0 Compressed Size       0000013C (316)\n+03BE4 Uncompressed Size     0000013C (316)\n+\n+03BE8 LOCAL HEADER #11      04034B50 (67324752)\n+03BEC Extract Zip Spec      14 (20) '2.0'\n+03BED Extract OS            00 (0) 'MS-DOS'\n+03BEE General Purpose Flag  0000 (0)\n+03BF0 Compression Method    0000 (0) 'Stored'\n+03BF2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03BF6 CRC                   00000000 (0)\n+03BFA Compressed Size       00000000 (0)\n+03BFE Uncompressed Size     00000000 (0)\n+03C02 Filename Length       000F (15)\n+03C04 Extra Length          0009 (9)\n+03C06 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C06: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03C15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03C17   Length              0005 (5)\n+03C19   Flags               01 (1) 'Modification'\n+03C1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03C1E LOCAL HEADER #12      04034B50 (67324752)\n+03C22 Extract Zip Spec      14 (20) '2.0'\n+03C23 Extract OS            00 (0) 'MS-DOS'\n+03C24 General Purpose Flag  0000 (0)\n+03C26 Compression Method    0000 (0) 'Stored'\n+03C28 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C2C CRC                   00000000 (0)\n+03C30 Compressed Size       00000000 (0)\n+03C34 Uncompressed Size     00000000 (0)\n+03C38 Filename Length       0020 (32)\n+03C3A Extra Length          0009 (9)\n+03C3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03C5C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03C5E   Length              0005 (5)\n+03C60   Flags               01 (1) 'Modification'\n+03C61   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03C65 LOCAL HEADER #13      04034B50 (67324752)\n+03C69 Extract Zip Spec      14 (20) '2.0'\n+03C6A Extract OS            00 (0) 'MS-DOS'\n+03C6B General Purpose Flag  0000 (0)\n+03C6D Compression Method    0000 (0) 'Stored'\n+03C6F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03C73 CRC                   00000000 (0)\n+03C77 Compressed Size       00000000 (0)\n+03C7B Uncompressed Size     00000000 (0)\n+03C7F Filename Length       0039 (57)\n+03C81 Extra Length          0009 (9)\n+03C83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3C83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03CBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03CBE   Length              0005 (5)\n+03CC0   Flags               01 (1) 'Modification'\n+03CC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03CC5 LOCAL HEADER #14      04034B50 (67324752)\n+03CC9 Extract Zip Spec      14 (20) '2.0'\n+03CCA Extract OS            00 (0) 'MS-DOS'\n+03CCB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+03CCD Compression Method    0000 (0) 'Stored'\n+03CCF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03CD3 CRC                   00000000 (0)\n+03CD7 Compressed Size       00000000 (0)\n+03CDB Uncompressed Size     00000000 (0)\n+03CDF Filename Length       0047 (71)\n+03CE1 Extra Length          0009 (9)\n+03CE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3CE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03D2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03D2C   Length              0005 (5)\n+03D2E   Flags               01 (1) 'Modification'\n+03D2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+03D33 DATA DESCRIPTOR       08074B50 (134695760)\n+03D37 CRC                   00000000 (0)\n+03D3B Compressed Size       00000000 (0)\n+03D3F Uncompressed Size     00000000 (0)\n+\n+03D43 LOCAL HEADER #15      04034B50 (67324752)\n+03D47 Extract Zip Spec      14 (20) '2.0'\n+03D48 Extract OS            00 (0) 'MS-DOS'\n+03D49 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+03D4B Compression Method    0000 (0) 'Stored'\n+03D4D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+03D51 CRC                   00000000 (0)\n+03D55 Compressed Size       00000000 (0)\n+03D59 Uncompressed Size     00000000 (0)\n+03D5D Filename Length       0040 (64)\n+03D5F Extra Length          0009 (9)\n+03D61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3D61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+03DA1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+03DA3   Length              0005 (5)\n+03DA5   Flags               01 (1) 'Modification'\n+03DA6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+03DAA PAYLOAD\n+\n+054BC DATA DESCRIPTOR       08074B50 (134695760)\n+054C0 CRC                   72E0714C (1927311692)\n+054C4 Compressed Size       00001712 (5906)\n+054C8 Uncompressed Size     00001712 (5906)\n+\n+054CC LOCAL HEADER #16      04034B50 (67324752)\n+054D0 Extract Zip Spec      14 (20) '2.0'\n+054D1 Extract OS            00 (0) 'MS-DOS'\n+054D2 General Purpose Flag  0000 (0)\n+054D4 Compression Method    0000 (0) 'Stored'\n+054D6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+054DA CRC                   00000000 (0)\n+054DE Compressed Size       00000000 (0)\n+054E2 Uncompressed Size     00000000 (0)\n+054E6 Filename Length       0012 (18)\n+054E8 Extra Length          0009 (9)\n+054EA Filename              'XXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x54EA: Filename 'XXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+054FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+054FE   Length              0005 (5)\n+05500   Flags               01 (1) 'Modification'\n+05501   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05505 LOCAL HEADER #17      04034B50 (67324752)\n+05509 Extract Zip Spec      14 (20) '2.0'\n+0550A Extract OS            00 (0) 'MS-DOS'\n+0550B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0550D Compression Method    0000 (0) 'Stored'\n+0550F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05513 CRC                   00000000 (0)\n+05517 Compressed Size       00000000 (0)\n+0551B Uncompressed Size     00000000 (0)\n+0551F Filename Length       0037 (55)\n+05521 Extra Length          0009 (9)\n+05523 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5523: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0555A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0555C   Length              0005 (5)\n+0555E   Flags               01 (1) 'Modification'\n+0555F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05563 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+                            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+\n+0561E DATA DESCRIPTOR       08074B50 (134695760)\n+05622 CRC                   258A92FD (629838589)\n+05626 Compressed Size       000000BB (187)\n+0562A Uncompressed Size     000000BB (187)\n+\n+0562E LOCAL HEADER #18      04034B50 (67324752)\n+05632 Extract Zip Spec      14 (20) '2.0'\n+05633 Extract OS            00 (0) 'MS-DOS'\n+05634 General Purpose Flag  0000 (0)\n+05636 Compression Method    0000 (0) 'Stored'\n+05638 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0563C CRC                   00000000 (0)\n+05640 Compressed Size       00000000 (0)\n+05644 Uncompressed Size     00000000 (0)\n+05648 Filename Length       0004 (4)\n+0564A Extra Length          0009 (9)\n+0564C Filename              'XXXX'\n+#\n+# WARNING: Offset 0x564C: Filename 'XXXX'\n+#          Zero length filename\n+#\n+05650 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05652   Length              0005 (5)\n+05654   Flags               01 (1) 'Modification'\n+05655   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05659 LOCAL HEADER #19      04034B50 (67324752)\n+0565D Extract Zip Spec      14 (20) '2.0'\n+0565E Extract OS            00 (0) 'MS-DOS'\n+0565F General Purpose Flag  0000 (0)\n+05661 Compression Method    0000 (0) 'Stored'\n+05663 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05667 CRC                   00000000 (0)\n+0566B Compressed Size       00000000 (0)\n+0566F Uncompressed Size     00000000 (0)\n+05673 Filename Length       000B (11)\n+05675 Extra Length          0009 (9)\n+05677 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5677: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05682 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05684   Length              0005 (5)\n+05686   Flags               01 (1) 'Modification'\n+05687   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0568B LOCAL HEADER #20      04034B50 (67324752)\n+0568F Extract Zip Spec      14 (20) '2.0'\n+05690 Extract OS            00 (0) 'MS-DOS'\n+05691 General Purpose Flag  0000 (0)\n+05693 Compression Method    0000 (0) 'Stored'\n+05695 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05699 CRC                   00000000 (0)\n+0569D Compressed Size       00000000 (0)\n+056A1 Uncompressed Size     00000000 (0)\n+056A5 Filename Length       0011 (17)\n+056A7 Extra Length          0009 (9)\n+056A9 Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x56A9: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+056BA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+056BC   Length              0005 (5)\n+056BE   Flags               01 (1) 'Modification'\n+056BF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n \n-056C3 LOCAL HEADER #18      04034B50 (67324752)\n+056C3 LOCAL HEADER #21      04034B50 (67324752)\n 056C7 Extract Zip Spec      14 (20) '2.0'\n 056C8 Extract OS            00 (0) 'MS-DOS'\n 056C9 General Purpose Flag  0000 (0)\n 056CB Compression Method    0000 (0) 'Stored'\n 056CD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n 056D1 CRC                   00000000 (0)\n 056D5 Compressed Size       00000000 (0)\n 056D9 Uncompressed Size     00000000 (0)\n-056DD Filename Length       0004 (4)\n+056DD Filename Length       001A (26)\n 056DF Extra Length          0009 (9)\n-056E1 Filename              'XXXX'\n+056E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x56E1: Filename 'XXXX'\n+# WARNING: Offset 0x56E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-056E5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-056E7   Length              0005 (5)\n-056E9   Flags               01 (1) 'Modification'\n-056EA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-056EE LOCAL HEADER #19      04034B50 (67324752)\n-056F2 Extract Zip Spec      14 (20) '2.0'\n-056F3 Extract OS            00 (0) 'MS-DOS'\n-056F4 General Purpose Flag  0000 (0)\n-056F6 Compression Method    0000 (0) 'Stored'\n-056F8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-056FC CRC                   00000000 (0)\n-05700 Compressed Size       00000000 (0)\n-05704 Uncompressed Size     00000000 (0)\n-05708 Filename Length       000B (11)\n-0570A Extra Length          0009 (9)\n-0570C Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x570C: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05717 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05719   Length              0005 (5)\n-0571B   Flags               01 (1) 'Modification'\n-0571C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05720 LOCAL HEADER #20      04034B50 (67324752)\n-05724 Extract Zip Spec      14 (20) '2.0'\n-05725 Extract OS            00 (0) 'MS-DOS'\n-05726 General Purpose Flag  0000 (0)\n-05728 Compression Method    0000 (0) 'Stored'\n-0572A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0572E CRC                   00000000 (0)\n-05732 Compressed Size       00000000 (0)\n-05736 Uncompressed Size     00000000 (0)\n-0573A Filename Length       0011 (17)\n-0573C Extra Length          0009 (9)\n-0573E Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x573E: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0574F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05751   Length              0005 (5)\n-05753   Flags               01 (1) 'Modification'\n-05754   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05758 LOCAL HEADER #21      04034B50 (67324752)\n-0575C Extract Zip Spec      14 (20) '2.0'\n-0575D Extract OS            00 (0) 'MS-DOS'\n-0575E General Purpose Flag  0000 (0)\n-05760 Compression Method    0000 (0) 'Stored'\n-05762 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-05766 CRC                   00000000 (0)\n-0576A Compressed Size       00000000 (0)\n-0576E Uncompressed Size     00000000 (0)\n-05772 Filename Length       001A (26)\n-05774 Extra Length          0009 (9)\n-05776 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5776: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05790 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05792   Length              0005 (5)\n-05794   Flags               01 (1) 'Modification'\n-05795   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-05799 LOCAL HEADER #22      04034B50 (67324752)\n-0579D Extract Zip Spec      14 (20) '2.0'\n-0579E Extract OS            00 (0) 'MS-DOS'\n-0579F General Purpose Flag  0000 (0)\n-057A1 Compression Method    0000 (0) 'Stored'\n-057A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-057A7 CRC                   00000000 (0)\n-057AB Compressed Size       00000000 (0)\n-057AF Uncompressed Size     00000000 (0)\n-057B3 Filename Length       0025 (37)\n-057B5 Extra Length          0009 (9)\n-057B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x57B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-057DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-057DE   Length              0005 (5)\n-057E0   Flags               01 (1) 'Modification'\n-057E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-057E5 LOCAL HEADER #23      04034B50 (67324752)\n-057E9 Extract Zip Spec      14 (20) '2.0'\n-057EA Extract OS            00 (0) 'MS-DOS'\n-057EB General Purpose Flag  0000 (0)\n-057ED Compression Method    0000 (0) 'Stored'\n-057EF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-057F3 CRC                   00000000 (0)\n-057F7 Compressed Size       00000000 (0)\n-057FB Uncompressed Size     00000000 (0)\n-057FF Filename Length       0030 (48)\n-05801 Extra Length          0009 (9)\n-05803 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x5803: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-05833 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-05835   Length              0005 (5)\n-05837   Flags               01 (1) 'Modification'\n-05838   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0583C LOCAL HEADER #24      04034B50 (67324752)\n-05840 Extract Zip Spec      14 (20) '2.0'\n-05841 Extract OS            00 (0) 'MS-DOS'\n-05842 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-05844 Compression Method    0000 (0) 'Stored'\n-05846 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0584A CRC                   00000000 (0)\n-0584E Compressed Size       00000000 (0)\n-05852 Uncompressed Size     00000000 (0)\n-05856 Filename Length       0057 (87)\n-05858 Extra Length          0009 (9)\n-0585A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x585A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-058B1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-058B3   Length              0005 (5)\n-058B5   Flags               01 (1) 'Modification'\n-058B6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-058BA PAYLOAD\n-\n-06840 DATA DESCRIPTOR       08074B50 (134695760)\n-06844 CRC                   CFBCCE03 (3485257219)\n-06848 Compressed Size       00000F86 (3974)\n-0684C Uncompressed Size     00000F86 (3974)\n-\n-06850 LOCAL HEADER #25      04034B50 (67324752)\n-06854 Extract Zip Spec      14 (20) '2.0'\n-06855 Extract OS            00 (0) 'MS-DOS'\n-06856 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-06858 Compression Method    0000 (0) 'Stored'\n-0685A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0685E CRC                   00000000 (0)\n-06862 Compressed Size       00000000 (0)\n-06866 Uncompressed Size     00000000 (0)\n-0686A Filename Length       004D (77)\n-0686C Extra Length          0009 (9)\n-0686E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x686E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-068BB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-068BD   Length              0005 (5)\n-068BF   Flags               01 (1) 'Modification'\n-068C0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-068C4 PAYLOAD\n-\n-07755 DATA DESCRIPTOR       08074B50 (134695760)\n-07759 CRC                   98FA0F9F (2566524831)\n-0775D Compressed Size       00000E91 (3729)\n-07761 Uncompressed Size     00000E91 (3729)\n-\n-07765 LOCAL HEADER #26      04034B50 (67324752)\n-07769 Extract Zip Spec      14 (20) '2.0'\n-0776A Extract OS            00 (0) 'MS-DOS'\n-0776B General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0776D Compression Method    0000 (0) 'Stored'\n-0776F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-07773 CRC                   00000000 (0)\n-07777 Compressed Size       00000000 (0)\n-0777B Uncompressed Size     00000000 (0)\n-0777F Filename Length       0061 (97)\n-07781 Extra Length          0009 (9)\n-07783 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x7783: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-077E4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-077E6   Length              0005 (5)\n-077E8   Flags               01 (1) 'Modification'\n-077E9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-077ED PAYLOAD\n-\n-0819C DATA DESCRIPTOR       08074B50 (134695760)\n-081A0 CRC                   2E3E715F (775844191)\n-081A4 Compressed Size       000009AF (2479)\n-081A8 Uncompressed Size     000009AF (2479)\n-\n-081AC LOCAL HEADER #27      04034B50 (67324752)\n-081B0 Extract Zip Spec      14 (20) '2.0'\n-081B1 Extract OS            00 (0) 'MS-DOS'\n-081B2 General Purpose Flag  0000 (0)\n-081B4 Compression Method    0000 (0) 'Stored'\n-081B6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-081BA CRC                   00000000 (0)\n-081BE Compressed Size       00000000 (0)\n-081C2 Uncompressed Size     00000000 (0)\n-081C6 Filename Length       0038 (56)\n-081C8 Extra Length          0009 (9)\n-081CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x81CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08202 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08204   Length              0005 (5)\n-08206   Flags               01 (1) 'Modification'\n-08207   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0820B LOCAL HEADER #28      04034B50 (67324752)\n-0820F Extract Zip Spec      14 (20) '2.0'\n-08210 Extract OS            00 (0) 'MS-DOS'\n-08211 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-08213 Compression Method    0000 (0) 'Stored'\n-08215 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-08219 CRC                   00000000 (0)\n-0821D Compressed Size       00000000 (0)\n-08221 Uncompressed Size     00000000 (0)\n-08225 Filename Length       0057 (87)\n-08227 Extra Length          0009 (9)\n-08229 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8229: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08280 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08282   Length              0005 (5)\n-08284   Flags               01 (1) 'Modification'\n-08285   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08289 PAYLOAD\n-\n-089DF DATA DESCRIPTOR       08074B50 (134695760)\n-089E3 CRC                   D9A5C573 (3651519859)\n-089E7 Compressed Size       00000756 (1878)\n-089EB Uncompressed Size     00000756 (1878)\n-\n-089EF LOCAL HEADER #29      04034B50 (67324752)\n-089F3 Extract Zip Spec      14 (20) '2.0'\n-089F4 Extract OS            00 (0) 'MS-DOS'\n-089F5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-089F7 Compression Method    0000 (0) 'Stored'\n-089F9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-089FD CRC                   00000000 (0)\n-08A01 Compressed Size       00000000 (0)\n-08A05 Uncompressed Size     00000000 (0)\n-08A09 Filename Length       005C (92)\n-08A0B Extra Length          0009 (9)\n-08A0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x8A0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-08A69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-08A6B   Length              0005 (5)\n-08A6D   Flags               01 (1) 'Modification'\n-08A6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-08A72 PAYLOAD\n-\n-0946B DATA DESCRIPTOR       08074B50 (134695760)\n-0946F CRC                   A2AE804F (2729345103)\n-09473 Compressed Size       000009F9 (2553)\n-09477 Uncompressed Size     000009F9 (2553)\n-\n-0947B LOCAL HEADER #30      04034B50 (67324752)\n-0947F Extract Zip Spec      14 (20) '2.0'\n-09480 Extract OS            00 (0) 'MS-DOS'\n-09481 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-09483 Compression Method    0000 (0) 'Stored'\n-09485 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09489 CRC                   00000000 (0)\n-0948D Compressed Size       00000000 (0)\n-09491 Uncompressed Size     00000000 (0)\n-09495 Filename Length       005A (90)\n-09497 Extra Length          0009 (9)\n-09499 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9499: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-094F3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-094F5   Length              0005 (5)\n-094F7   Flags               01 (1) 'Modification'\n-094F8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-094FC PAYLOAD\n-\n-09C77 DATA DESCRIPTOR       08074B50 (134695760)\n-09C7B CRC                   F33EC0CF (4080976079)\n-09C7F Compressed Size       0000077B (1915)\n-09C83 Uncompressed Size     0000077B (1915)\n-\n-09C87 LOCAL HEADER #31      04034B50 (67324752)\n-09C8B Extract Zip Spec      14 (20) '2.0'\n-09C8C Extract OS            00 (0) 'MS-DOS'\n-09C8D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-09C8F Compression Method    0000 (0) 'Stored'\n-09C91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-09C95 CRC                   00000000 (0)\n-09C99 Compressed Size       00000000 (0)\n-09C9D Uncompressed Size     00000000 (0)\n-09CA1 Filename Length       0056 (86)\n-09CA3 Extra Length          0009 (9)\n-09CA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x9CA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-09CFB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-09CFD   Length              0005 (5)\n-09CFF   Flags               01 (1) 'Modification'\n-09D00   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-09D04 PAYLOAD\n-\n-0A551 DATA DESCRIPTOR       08074B50 (134695760)\n-0A555 CRC                   4315772B (1125480235)\n-0A559 Compressed Size       0000084D (2125)\n-0A55D Uncompressed Size     0000084D (2125)\n-\n-0A561 LOCAL HEADER #32      04034B50 (67324752)\n-0A565 Extract Zip Spec      14 (20) '2.0'\n-0A566 Extract OS            00 (0) 'MS-DOS'\n-0A567 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0A569 Compression Method    0000 (0) 'Stored'\n-0A56B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0A56F CRC                   00000000 (0)\n-0A573 Compressed Size       00000000 (0)\n-0A577 Uncompressed Size     00000000 (0)\n-0A57B Filename Length       0059 (89)\n-0A57D Extra Length          0009 (9)\n-0A57F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xA57F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0A5D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0A5DA   Length              0005 (5)\n-0A5DC   Flags               01 (1) 'Modification'\n-0A5DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0A5E1 PAYLOAD\n-\n-0AFC6 DATA DESCRIPTOR       08074B50 (134695760)\n-0AFCA CRC                   9303FD8F (2466512271)\n-0AFCE Compressed Size       000009E5 (2533)\n-0AFD2 Uncompressed Size     000009E5 (2533)\n-\n-0AFD6 LOCAL HEADER #33      04034B50 (67324752)\n-0AFDA Extract Zip Spec      14 (20) '2.0'\n-0AFDB Extract OS            00 (0) 'MS-DOS'\n-0AFDC General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0AFDE Compression Method    0000 (0) 'Stored'\n-0AFE0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0AFE4 CRC                   00000000 (0)\n-0AFE8 Compressed Size       00000000 (0)\n-0AFEC Uncompressed Size     00000000 (0)\n-0AFF0 Filename Length       0055 (85)\n-0AFF2 Extra Length          0009 (9)\n-0AFF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xAFF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0B049 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0B04B   Length              0005 (5)\n-0B04D   Flags               01 (1) 'Modification'\n-0B04E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0B052 PAYLOAD\n-\n-0BA14 DATA DESCRIPTOR       08074B50 (134695760)\n-0BA18 CRC                   243129AC (607201708)\n-0BA1C Compressed Size       000009C2 (2498)\n-0BA20 Uncompressed Size     000009C2 (2498)\n-\n-0BA24 LOCAL HEADER #34      04034B50 (67324752)\n-0BA28 Extract Zip Spec      14 (20) '2.0'\n-0BA29 Extract OS            00 (0) 'MS-DOS'\n-0BA2A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0BA2C Compression Method    0000 (0) 'Stored'\n-0BA2E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0BA32 CRC                   00000000 (0)\n-0BA36 Compressed Size       00000000 (0)\n-0BA3A Uncompressed Size     00000000 (0)\n-0BA3E Filename Length       0054 (84)\n-0BA40 Extra Length          0009 (9)\n-0BA42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xBA42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0BA96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0BA98   Length              0005 (5)\n-0BA9A   Flags               01 (1) 'Modification'\n-0BA9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0BA9F PAYLOAD\n-\n-0C400 DATA DESCRIPTOR       08074B50 (134695760)\n-0C404 CRC                   82B7884A (2193066058)\n-0C408 Compressed Size       00000961 (2401)\n-0C40C Uncompressed Size     00000961 (2401)\n-\n-0C410 LOCAL HEADER #35      04034B50 (67324752)\n-0C414 Extract Zip Spec      14 (20) '2.0'\n-0C415 Extract OS            00 (0) 'MS-DOS'\n-0C416 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0C418 Compression Method    0000 (0) 'Stored'\n-0C41A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0C41E CRC                   00000000 (0)\n-0C422 Compressed Size       00000000 (0)\n-0C426 Uncompressed Size     00000000 (0)\n-0C42A Filename Length       005B (91)\n-0C42C Extra Length          0009 (9)\n-0C42E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xC42E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0C489 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0C48B   Length              0005 (5)\n-0C48D   Flags               01 (1) 'Modification'\n-0C48E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0C492 PAYLOAD\n-\n-0CB6D DATA DESCRIPTOR       08074B50 (134695760)\n-0CB71 CRC                   0F671EAE (258416302)\n-0CB75 Compressed Size       000006DB (1755)\n-0CB79 Uncompressed Size     000006DB (1755)\n-\n-0CB7D LOCAL HEADER #36      04034B50 (67324752)\n-0CB81 Extract Zip Spec      14 (20) '2.0'\n-0CB82 Extract OS            00 (0) 'MS-DOS'\n-0CB83 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0CB85 Compression Method    0000 (0) 'Stored'\n-0CB87 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0CB8B CRC                   00000000 (0)\n-0CB8F Compressed Size       00000000 (0)\n-0CB93 Uncompressed Size     00000000 (0)\n-0CB97 Filename Length       0055 (85)\n-0CB99 Extra Length          0009 (9)\n-0CB9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xCB9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0CBF0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0CBF2   Length              0005 (5)\n-0CBF4   Flags               01 (1) 'Modification'\n-0CBF5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0CBF9 PAYLOAD\n-\n-0D5CE DATA DESCRIPTOR       08074B50 (134695760)\n-0D5D2 CRC                   14082F15 (336080661)\n-0D5D6 Compressed Size       000009D5 (2517)\n-0D5DA Uncompressed Size     000009D5 (2517)\n-\n-0D5DE LOCAL HEADER #37      04034B50 (67324752)\n-0D5E2 Extract Zip Spec      14 (20) '2.0'\n-0D5E3 Extract OS            00 (0) 'MS-DOS'\n-0D5E4 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0D5E6 Compression Method    0000 (0) 'Stored'\n-0D5E8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0D5EC CRC                   00000000 (0)\n-0D5F0 Compressed Size       00000000 (0)\n-0D5F4 Uncompressed Size     00000000 (0)\n-0D5F8 Filename Length       0058 (88)\n-0D5FA Extra Length          0009 (9)\n-0D5FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xD5FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0D654 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0D656   Length              0005 (5)\n-0D658   Flags               01 (1) 'Modification'\n-0D659   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0D65D PAYLOAD\n-\n-0DD50 DATA DESCRIPTOR       08074B50 (134695760)\n-0DD54 CRC                   3F334AFC (1060326140)\n-0DD58 Compressed Size       000006F3 (1779)\n-0DD5C Uncompressed Size     000006F3 (1779)\n-\n-0DD60 LOCAL HEADER #38      04034B50 (67324752)\n-0DD64 Extract Zip Spec      14 (20) '2.0'\n-0DD65 Extract OS            00 (0) 'MS-DOS'\n-0DD66 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0DD68 Compression Method    0000 (0) 'Stored'\n-0DD6A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0DD6E CRC                   00000000 (0)\n-0DD72 Compressed Size       00000000 (0)\n-0DD76 Uncompressed Size     00000000 (0)\n-0DD7A Filename Length       0052 (82)\n-0DD7C Extra Length          0009 (9)\n-0DD7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xDD7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0DDD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0DDD2   Length              0005 (5)\n-0DDD4   Flags               01 (1) 'Modification'\n-0DDD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0DDD9 PAYLOAD\n-\n-0ECD5 DATA DESCRIPTOR       08074B50 (134695760)\n-0ECD9 CRC                   D56FC3BA (3580871610)\n-0ECDD Compressed Size       00000EFC (3836)\n-0ECE1 Uncompressed Size     00000EFC (3836)\n-\n-0ECE5 LOCAL HEADER #39      04034B50 (67324752)\n-0ECE9 Extract Zip Spec      14 (20) '2.0'\n-0ECEA Extract OS            00 (0) 'MS-DOS'\n-0ECEB General Purpose Flag  0000 (0)\n-0ECED Compression Method    0000 (0) 'Stored'\n-0ECEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0ECF3 CRC                   00000000 (0)\n-0ECF7 Compressed Size       00000000 (0)\n-0ECFB Uncompressed Size     00000000 (0)\n-0ECFF Filename Length       0035 (53)\n-0ED01 Extra Length          0009 (9)\n-0ED03 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xED03: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0ED38 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0ED3A   Length              0005 (5)\n-0ED3C   Flags               01 (1) 'Modification'\n-0ED3D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-0ED41 LOCAL HEADER #40      04034B50 (67324752)\n-0ED45 Extract Zip Spec      14 (20) '2.0'\n-0ED46 Extract OS            00 (0) 'MS-DOS'\n-0ED47 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0ED49 Compression Method    0000 (0) 'Stored'\n-0ED4B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0ED4F CRC                   00000000 (0)\n-0ED53 Compressed Size       00000000 (0)\n-0ED57 Uncompressed Size     00000000 (0)\n-0ED5B Filename Length       0063 (99)\n-0ED5D Extra Length          0009 (9)\n-0ED5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xED5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0EDC2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0EDC4   Length              0005 (5)\n-0EDC6   Flags               01 (1) 'Modification'\n-0EDC7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0EDCB PAYLOAD\n-\n-0F7E2 DATA DESCRIPTOR       08074B50 (134695760)\n-0F7E6 CRC                   C0B7814F (3233251663)\n-0F7EA Compressed Size       00000A17 (2583)\n-0F7EE Uncompressed Size     00000A17 (2583)\n-\n-0F7F2 LOCAL HEADER #41      04034B50 (67324752)\n-0F7F6 Extract Zip Spec      14 (20) '2.0'\n-0F7F7 Extract OS            00 (0) 'MS-DOS'\n-0F7F8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-0F7FA Compression Method    0000 (0) 'Stored'\n-0F7FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-0F800 CRC                   00000000 (0)\n-0F804 Compressed Size       00000000 (0)\n-0F808 Uncompressed Size     00000000 (0)\n-0F80C Filename Length       005D (93)\n-0F80E Extra Length          0009 (9)\n-0F810 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0xF810: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-0F86D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-0F86F   Length              0005 (5)\n-0F871   Flags               01 (1) 'Modification'\n-0F872   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-0F876 PAYLOAD\n-\n-12DB5 DATA DESCRIPTOR       08074B50 (134695760)\n-12DB9 CRC                   E5A77ED4 (3852959444)\n-12DBD Compressed Size       0000353F (13631)\n-12DC1 Uncompressed Size     0000353F (13631)\n-\n-12DC5 LOCAL HEADER #42      04034B50 (67324752)\n-12DC9 Extract Zip Spec      14 (20) '2.0'\n-12DCA Extract OS            00 (0) 'MS-DOS'\n-12DCB General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-12DCD Compression Method    0000 (0) 'Stored'\n-12DCF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-12DD3 CRC                   00000000 (0)\n-12DD7 Compressed Size       00000000 (0)\n-12DDB Uncompressed Size     00000000 (0)\n-12DDF Filename Length       005B (91)\n-12DE1 Extra Length          0009 (9)\n-12DE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x12DE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-12E3E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-12E40   Length              0005 (5)\n-12E42   Flags               01 (1) 'Modification'\n-12E43   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-12E47 PAYLOAD\n-\n-137D2 DATA DESCRIPTOR       08074B50 (134695760)\n-137D6 CRC                   E9A44E2B (3919859243)\n-137DA Compressed Size       0000098B (2443)\n-137DE Uncompressed Size     0000098B (2443)\n-\n-137E2 LOCAL HEADER #43      04034B50 (67324752)\n-137E6 Extract Zip Spec      14 (20) '2.0'\n-137E7 Extract OS            00 (0) 'MS-DOS'\n-137E8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-137EA Compression Method    0000 (0) 'Stored'\n-137EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-137F0 CRC                   00000000 (0)\n-137F4 Compressed Size       00000000 (0)\n-137F8 Uncompressed Size     00000000 (0)\n-137FC Filename Length       005C (92)\n-137FE Extra Length          0009 (9)\n-13800 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x13800: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1385C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1385E   Length              0005 (5)\n-13860   Flags               01 (1) 'Modification'\n-13861   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-13865 PAYLOAD\n-\n-157A4 DATA DESCRIPTOR       08074B50 (134695760)\n-157A8 CRC                   55F65FD4 (1442209748)\n-157AC Compressed Size       00001F3F (7999)\n-157B0 Uncompressed Size     00001F3F (7999)\n-\n-157B4 LOCAL HEADER #44      04034B50 (67324752)\n-157B8 Extract Zip Spec      14 (20) '2.0'\n-157B9 Extract OS            00 (0) 'MS-DOS'\n-157BA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-157BC Compression Method    0000 (0) 'Stored'\n-157BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-157C2 CRC                   00000000 (0)\n-157C6 Compressed Size       00000000 (0)\n-157CA Uncompressed Size     00000000 (0)\n-157CE Filename Length       0060 (96)\n-157D0 Extra Length          0009 (9)\n-157D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x157D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-15832 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-15834   Length              0005 (5)\n-15836   Flags               01 (1) 'Modification'\n-15837   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1583B PAYLOAD\n-\n-16689 DATA DESCRIPTOR       08074B50 (134695760)\n-1668D CRC                   08A2B33B (144880443)\n-16691 Compressed Size       00000E4E (3662)\n-16695 Uncompressed Size     00000E4E (3662)\n-\n-16699 LOCAL HEADER #45      04034B50 (67324752)\n-1669D Extract Zip Spec      14 (20) '2.0'\n-1669E Extract OS            00 (0) 'MS-DOS'\n-1669F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-166A1 Compression Method    0000 (0) 'Stored'\n-166A3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-166A7 CRC                   00000000 (0)\n-166AB Compressed Size       00000000 (0)\n-166AF Uncompressed Size     00000000 (0)\n-166B3 Filename Length       0055 (85)\n-166B5 Extra Length          0009 (9)\n-166B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x166B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1670C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1670E   Length              0005 (5)\n-16710   Flags               01 (1) 'Modification'\n-16711   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-16715 PAYLOAD\n-\n-16FB7 DATA DESCRIPTOR       08074B50 (134695760)\n-16FBB CRC                   6E775F76 (1853316982)\n-16FBF Compressed Size       000008A2 (2210)\n-16FC3 Uncompressed Size     000008A2 (2210)\n-\n-16FC7 LOCAL HEADER #46      04034B50 (67324752)\n-16FCB Extract Zip Spec      14 (20) '2.0'\n-16FCC Extract OS            00 (0) 'MS-DOS'\n-16FCD General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-16FCF Compression Method    0000 (0) 'Stored'\n-16FD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-16FD5 CRC                   00000000 (0)\n-16FD9 Compressed Size       00000000 (0)\n-16FDD Uncompressed Size     00000000 (0)\n-16FE1 Filename Length       0054 (84)\n-16FE3 Extra Length          0009 (9)\n-16FE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x16FE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17039 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1703B   Length              0005 (5)\n-1703D   Flags               01 (1) 'Modification'\n-1703E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17042 PAYLOAD\n-\n-179C8 DATA DESCRIPTOR       08074B50 (134695760)\n-179CC CRC                   AD40460E (2906670606)\n-179D0 Compressed Size       00000986 (2438)\n-179D4 Uncompressed Size     00000986 (2438)\n-\n-179D8 LOCAL HEADER #47      04034B50 (67324752)\n-179DC Extract Zip Spec      14 (20) '2.0'\n-179DD Extract OS            00 (0) 'MS-DOS'\n-179DE General Purpose Flag  0000 (0)\n-179E0 Compression Method    0000 (0) 'Stored'\n-179E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-179E6 CRC                   00000000 (0)\n-179EA Compressed Size       00000000 (0)\n-179EE Uncompressed Size     00000000 (0)\n-179F2 Filename Length       003B (59)\n-179F4 Extra Length          0009 (9)\n-179F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x179F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17A31 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17A33   Length              0005 (5)\n-17A35   Flags               01 (1) 'Modification'\n-17A36   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-17A3A LOCAL HEADER #48      04034B50 (67324752)\n-17A3E Extract Zip Spec      14 (20) '2.0'\n-17A3F Extract OS            00 (0) 'MS-DOS'\n-17A40 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-17A42 Compression Method    0000 (0) 'Stored'\n-17A44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-17A48 CRC                   00000000 (0)\n-17A4C Compressed Size       00000000 (0)\n-17A50 Uncompressed Size     00000000 (0)\n-17A54 Filename Length       005E (94)\n-17A56 Extra Length          0009 (9)\n-17A58 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x17A58: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-17AB6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-17AB8   Length              0005 (5)\n-17ABA   Flags               01 (1) 'Modification'\n-17ABB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-17ABF PAYLOAD\n-\n-18695 DATA DESCRIPTOR       08074B50 (134695760)\n-18699 CRC                   C7D687E1 (3352725473)\n-1869D Compressed Size       00000BD6 (3030)\n-186A1 Uncompressed Size     00000BD6 (3030)\n-\n-186A5 LOCAL HEADER #49      04034B50 (67324752)\n-186A9 Extract Zip Spec      14 (20) '2.0'\n-186AA Extract OS            00 (0) 'MS-DOS'\n-186AB General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-186AD Compression Method    0000 (0) 'Stored'\n-186AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-186B3 CRC                   00000000 (0)\n-186B7 Compressed Size       00000000 (0)\n-186BB Uncompressed Size     00000000 (0)\n-186BF Filename Length       005B (91)\n-186C1 Extra Length          0009 (9)\n-186C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x186C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1871E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18720   Length              0005 (5)\n-18722   Flags               01 (1) 'Modification'\n-18723   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-18727 PAYLOAD\n-\n-18C93 DATA DESCRIPTOR       08074B50 (134695760)\n-18C97 CRC                   34169900 (873896192)\n-18C9B Compressed Size       0000056C (1388)\n-18C9F Uncompressed Size     0000056C (1388)\n-\n-18CA3 LOCAL HEADER #50      04034B50 (67324752)\n-18CA7 Extract Zip Spec      14 (20) '2.0'\n-18CA8 Extract OS            00 (0) 'MS-DOS'\n-18CA9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-18CAB Compression Method    0000 (0) 'Stored'\n-18CAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-18CB1 CRC                   00000000 (0)\n-18CB5 Compressed Size       00000000 (0)\n-18CB9 Uncompressed Size     00000000 (0)\n-18CBD Filename Length       005D (93)\n-18CBF Extra Length          0009 (9)\n-18CC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x18CC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-18D1E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-18D20   Length              0005 (5)\n-18D22   Flags               01 (1) 'Modification'\n-18D23   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-18D27 PAYLOAD\n-\n-19673 DATA DESCRIPTOR       08074B50 (134695760)\n-19677 CRC                   6C26EEDA (1814490842)\n-1967B Compressed Size       0000094C (2380)\n-1967F Uncompressed Size     0000094C (2380)\n-\n-19683 LOCAL HEADER #51      04034B50 (67324752)\n-19687 Extract Zip Spec      14 (20) '2.0'\n-19688 Extract OS            00 (0) 'MS-DOS'\n-19689 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1968B Compression Method    0000 (0) 'Stored'\n-1968D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-19691 CRC                   00000000 (0)\n-19695 Compressed Size       00000000 (0)\n-19699 Uncompressed Size     00000000 (0)\n-1969D Filename Length       0060 (96)\n-1969F Extra Length          0009 (9)\n-196A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x196A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-19701 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-19703   Length              0005 (5)\n-19705   Flags               01 (1) 'Modification'\n-19706   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1970A PAYLOAD\n-\n-1AB78 DATA DESCRIPTOR       08074B50 (134695760)\n-1AB7C CRC                   3E0DDE77 (1041096311)\n-1AB80 Compressed Size       0000146E (5230)\n-1AB84 Uncompressed Size     0000146E (5230)\n-\n-1AB88 LOCAL HEADER #52      04034B50 (67324752)\n-1AB8C Extract Zip Spec      14 (20) '2.0'\n-1AB8D Extract OS            00 (0) 'MS-DOS'\n-1AB8E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1AB90 Compression Method    0000 (0) 'Stored'\n-1AB92 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1AB96 CRC                   00000000 (0)\n-1AB9A Compressed Size       00000000 (0)\n-1AB9E Uncompressed Size     00000000 (0)\n-1ABA2 Filename Length       005D (93)\n-1ABA4 Extra Length          0009 (9)\n-1ABA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1ABA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1AC03 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1AC05   Length              0005 (5)\n-1AC07   Flags               01 (1) 'Modification'\n-1AC08   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1AC0C PAYLOAD\n-\n-1B180 DATA DESCRIPTOR       08074B50 (134695760)\n-1B184 CRC                   FFC4205D (4291043421)\n-1B188 Compressed Size       00000574 (1396)\n-1B18C Uncompressed Size     00000574 (1396)\n-\n-1B190 LOCAL HEADER #53      04034B50 (67324752)\n-1B194 Extract Zip Spec      14 (20) '2.0'\n-1B195 Extract OS            00 (0) 'MS-DOS'\n-1B196 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1B198 Compression Method    0000 (0) 'Stored'\n-1B19A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1B19E CRC                   00000000 (0)\n-1B1A2 Compressed Size       00000000 (0)\n-1B1A6 Uncompressed Size     00000000 (0)\n-1B1AA Filename Length       0061 (97)\n-1B1AC Extra Length          0009 (9)\n-1B1AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B1AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1B20F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1B211   Length              0005 (5)\n-1B213   Flags               01 (1) 'Modification'\n-1B214   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1B218 PAYLOAD\n-\n-1B991 DATA DESCRIPTOR       08074B50 (134695760)\n-1B995 CRC                   4DBBA4A0 (1304143008)\n-1B999 Compressed Size       00000779 (1913)\n-1B99D Uncompressed Size     00000779 (1913)\n-\n-1B9A1 LOCAL HEADER #54      04034B50 (67324752)\n-1B9A5 Extract Zip Spec      14 (20) '2.0'\n-1B9A6 Extract OS            00 (0) 'MS-DOS'\n-1B9A7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1B9A9 Compression Method    0000 (0) 'Stored'\n-1B9AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1B9AF CRC                   00000000 (0)\n-1B9B3 Compressed Size       00000000 (0)\n-1B9B7 Uncompressed Size     00000000 (0)\n-1B9BB Filename Length       005C (92)\n-1B9BD Extra Length          0009 (9)\n-1B9BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1B9BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1BA1B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1BA1D   Length              0005 (5)\n-1BA1F   Flags               01 (1) 'Modification'\n-1BA20   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1BA24 PAYLOAD\n-\n-1BF94 DATA DESCRIPTOR       08074B50 (134695760)\n-1BF98 CRC                   DB349372 (3677655922)\n-1BF9C Compressed Size       00000570 (1392)\n-1BFA0 Uncompressed Size     00000570 (1392)\n-\n-1BFA4 LOCAL HEADER #55      04034B50 (67324752)\n-1BFA8 Extract Zip Spec      14 (20) '2.0'\n-1BFA9 Extract OS            00 (0) 'MS-DOS'\n-1BFAA General Purpose Flag  0000 (0)\n-1BFAC Compression Method    0000 (0) 'Stored'\n-1BFAE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1BFB2 CRC                   00000000 (0)\n-1BFB6 Compressed Size       00000000 (0)\n-1BFBA Uncompressed Size     00000000 (0)\n-1BFBE Filename Length       003F (63)\n-1BFC0 Extra Length          0009 (9)\n-1BFC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1BFC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1C001 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1C003   Length              0005 (5)\n-1C005   Flags               01 (1) 'Modification'\n-1C006   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1C00A LOCAL HEADER #56      04034B50 (67324752)\n-1C00E Extract Zip Spec      14 (20) '2.0'\n-1C00F Extract OS            00 (0) 'MS-DOS'\n-1C010 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1C012 Compression Method    0000 (0) 'Stored'\n-1C014 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1C018 CRC                   00000000 (0)\n-1C01C Compressed Size       00000000 (0)\n-1C020 Uncompressed Size     00000000 (0)\n-1C024 Filename Length       006F (111)\n-1C026 Extra Length          0009 (9)\n-1C028 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1C028: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1C097 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1C099   Length              0005 (5)\n-1C09B   Flags               01 (1) 'Modification'\n-1C09C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1C0A0 PAYLOAD\n-\n-1CC3F DATA DESCRIPTOR       08074B50 (134695760)\n-1CC43 CRC                   8BDD0458 (2346517592)\n-1CC47 Compressed Size       00000B9F (2975)\n-1CC4B Uncompressed Size     00000B9F (2975)\n-\n-1CC4F LOCAL HEADER #57      04034B50 (67324752)\n-1CC53 Extract Zip Spec      14 (20) '2.0'\n-1CC54 Extract OS            00 (0) 'MS-DOS'\n-1CC55 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1CC57 Compression Method    0000 (0) 'Stored'\n-1CC59 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1CC5D CRC                   00000000 (0)\n-1CC61 Compressed Size       00000000 (0)\n-1CC65 Uncompressed Size     00000000 (0)\n-1CC69 Filename Length       0063 (99)\n-1CC6B Extra Length          0009 (9)\n-1CC6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1CC6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1CCD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1CCD2   Length              0005 (5)\n-1CCD4   Flags               01 (1) 'Modification'\n-1CCD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1CCD9 PAYLOAD\n-\n-1D456 DATA DESCRIPTOR       08074B50 (134695760)\n-1D45A CRC                   B306B850 (3003562064)\n-1D45E Compressed Size       0000077D (1917)\n-1D462 Uncompressed Size     0000077D (1917)\n-\n-1D466 LOCAL HEADER #58      04034B50 (67324752)\n-1D46A Extract Zip Spec      14 (20) '2.0'\n-1D46B Extract OS            00 (0) 'MS-DOS'\n-1D46C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1D46E Compression Method    0000 (0) 'Stored'\n-1D470 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1D474 CRC                   00000000 (0)\n-1D478 Compressed Size       00000000 (0)\n-1D47C Uncompressed Size     00000000 (0)\n-1D480 Filename Length       0062 (98)\n-1D482 Extra Length          0009 (9)\n-1D484 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1D484: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1D4E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1D4E8   Length              0005 (5)\n-1D4EA   Flags               01 (1) 'Modification'\n-1D4EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1D4EF PAYLOAD\n-\n-1DC9C DATA DESCRIPTOR       08074B50 (134695760)\n-1DCA0 CRC                   CD8B5D37 (3448462647)\n-1DCA4 Compressed Size       000007AD (1965)\n-1DCA8 Uncompressed Size     000007AD (1965)\n-\n-1DCAC LOCAL HEADER #59      04034B50 (67324752)\n-1DCB0 Extract Zip Spec      14 (20) '2.0'\n-1DCB1 Extract OS            00 (0) 'MS-DOS'\n-1DCB2 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1DCB4 Compression Method    0000 (0) 'Stored'\n-1DCB6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1DCBA CRC                   00000000 (0)\n-1DCBE Compressed Size       00000000 (0)\n-1DCC2 Uncompressed Size     00000000 (0)\n-1DCC6 Filename Length       0068 (104)\n-1DCC8 Extra Length          0009 (9)\n-1DCCA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1DCCA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1DD32 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1DD34   Length              0005 (5)\n-1DD36   Flags               01 (1) 'Modification'\n-1DD37   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1DD3B PAYLOAD\n-\n-1F8C8 DATA DESCRIPTOR       08074B50 (134695760)\n-1F8CC CRC                   95BEC86B (2512308331)\n-1F8D0 Compressed Size       00001B8D (7053)\n-1F8D4 Uncompressed Size     00001B8D (7053)\n-\n-1F8D8 LOCAL HEADER #60      04034B50 (67324752)\n-1F8DC Extract Zip Spec      14 (20) '2.0'\n-1F8DD Extract OS            00 (0) 'MS-DOS'\n-1F8DE General Purpose Flag  0000 (0)\n-1F8E0 Compression Method    0000 (0) 'Stored'\n-1F8E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1F8E6 CRC                   00000000 (0)\n-1F8EA Compressed Size       00000000 (0)\n-1F8EE Uncompressed Size     00000000 (0)\n-1F8F2 Filename Length       0035 (53)\n-1F8F4 Extra Length          0009 (9)\n-1F8F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1F8F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1F92B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1F92D   Length              0005 (5)\n-1F92F   Flags               01 (1) 'Modification'\n-1F930   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-1F934 LOCAL HEADER #61      04034B50 (67324752)\n-1F938 Extract Zip Spec      14 (20) '2.0'\n-1F939 Extract OS            00 (0) 'MS-DOS'\n-1F93A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-1F93C Compression Method    0000 (0) 'Stored'\n-1F93E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-1F942 CRC                   00000000 (0)\n-1F946 Compressed Size       00000000 (0)\n-1F94A Uncompressed Size     00000000 (0)\n-1F94E Filename Length       0049 (73)\n-1F950 Extra Length          0009 (9)\n-1F952 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x1F952: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-1F99B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-1F99D   Length              0005 (5)\n-1F99F   Flags               01 (1) 'Modification'\n-1F9A0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-1F9A4 PAYLOAD\n-\n-225FA DATA DESCRIPTOR       08074B50 (134695760)\n-225FE CRC                   D216B32B (3524703019)\n-22602 Compressed Size       00002C56 (11350)\n-22606 Uncompressed Size     00002C56 (11350)\n-\n-2260A LOCAL HEADER #62      04034B50 (67324752)\n-2260E Extract Zip Spec      14 (20) '2.0'\n-2260F Extract OS            00 (0) 'MS-DOS'\n-22610 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-22612 Compression Method    0000 (0) 'Stored'\n-22614 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-22618 CRC                   00000000 (0)\n-2261C Compressed Size       00000000 (0)\n-22620 Uncompressed Size     00000000 (0)\n-22624 Filename Length       0055 (85)\n-22626 Extra Length          0009 (9)\n-22628 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x22628: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2267D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2267F   Length              0005 (5)\n-22681   Flags               01 (1) 'Modification'\n-22682   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-22686 PAYLOAD\n-\n-2310A DATA DESCRIPTOR       08074B50 (134695760)\n-2310E CRC                   94E29DCE (2497879502)\n-23112 Compressed Size       00000A84 (2692)\n-23116 Uncompressed Size     00000A84 (2692)\n-\n-2311A LOCAL HEADER #63      04034B50 (67324752)\n-2311E Extract Zip Spec      14 (20) '2.0'\n-2311F Extract OS            00 (0) 'MS-DOS'\n-23120 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-23122 Compression Method    0000 (0) 'Stored'\n-23124 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-23128 CRC                   00000000 (0)\n-2312C Compressed Size       00000000 (0)\n-23130 Uncompressed Size     00000000 (0)\n-23134 Filename Length       0044 (68)\n-23136 Extra Length          0009 (9)\n-23138 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x23138: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2317C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2317E   Length              0005 (5)\n-23180   Flags               01 (1) 'Modification'\n-23181   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-23185 PAYLOAD\n-\n-249B7 DATA DESCRIPTOR       08074B50 (134695760)\n-249BB CRC                   650D189A (1695357082)\n-249BF Compressed Size       00001832 (6194)\n-249C3 Uncompressed Size     00001832 (6194)\n-\n-249C7 LOCAL HEADER #64      04034B50 (67324752)\n-249CB Extract Zip Spec      14 (20) '2.0'\n-249CC Extract OS            00 (0) 'MS-DOS'\n-249CD General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-249CF Compression Method    0000 (0) 'Stored'\n-249D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-249D5 CRC                   00000000 (0)\n-249D9 Compressed Size       00000000 (0)\n-249DD Uncompressed Size     00000000 (0)\n-249E1 Filename Length       0045 (69)\n-249E3 Extra Length          0009 (9)\n-249E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x249E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-24A2A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-24A2C   Length              0005 (5)\n-24A2E   Flags               01 (1) 'Modification'\n-24A2F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-24A33 PAYLOAD\n-\n-24FEF DATA DESCRIPTOR       08074B50 (134695760)\n-24FF3 CRC                   4BF9C614 (1274660372)\n-24FF7 Compressed Size       000005BC (1468)\n-24FFB Uncompressed Size     000005BC (1468)\n-\n-24FFF LOCAL HEADER #65      04034B50 (67324752)\n-25003 Extract Zip Spec      14 (20) '2.0'\n-25004 Extract OS            00 (0) 'MS-DOS'\n-25005 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-25007 Compression Method    0000 (0) 'Stored'\n-25009 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2500D CRC                   00000000 (0)\n-25011 Compressed Size       00000000 (0)\n-25015 Uncompressed Size     00000000 (0)\n-25019 Filename Length       0045 (69)\n-2501B Extra Length          0009 (9)\n-2501D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2501D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-25062 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-25064   Length              0005 (5)\n-25066   Flags               01 (1) 'Modification'\n-25067   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-2506B PAYLOAD\n-\n-25E1E DATA DESCRIPTOR       08074B50 (134695760)\n-25E22 CRC                   78DAF5DB (2027615707)\n-25E26 Compressed Size       00000DB3 (3507)\n-25E2A Uncompressed Size     00000DB3 (3507)\n-\n-25E2E LOCAL HEADER #66      04034B50 (67324752)\n-25E32 Extract Zip Spec      14 (20) '2.0'\n-25E33 Extract OS            00 (0) 'MS-DOS'\n-25E34 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-25E36 Compression Method    0000 (0) 'Stored'\n-25E38 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-25E3C CRC                   00000000 (0)\n-25E40 Compressed Size       00000000 (0)\n-25E44 Uncompressed Size     00000000 (0)\n-25E48 Filename Length       0045 (69)\n-25E4A Extra Length          0009 (9)\n-25E4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x25E4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-25E91 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-25E93   Length              0005 (5)\n-25E95   Flags               01 (1) 'Modification'\n-25E96   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-25E9A PAYLOAD\n-\n-27AAD DATA DESCRIPTOR       08074B50 (134695760)\n-27AB1 CRC                   F812A548 (4161971528)\n-27AB5 Compressed Size       00001C13 (7187)\n-27AB9 Uncompressed Size     00001C13 (7187)\n-\n-27ABD LOCAL HEADER #67      04034B50 (67324752)\n-27AC1 Extract Zip Spec      14 (20) '2.0'\n-27AC2 Extract OS            00 (0) 'MS-DOS'\n-27AC3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-27AC5 Compression Method    0000 (0) 'Stored'\n-27AC7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-27ACB CRC                   00000000 (0)\n-27ACF Compressed Size       00000000 (0)\n-27AD3 Uncompressed Size     00000000 (0)\n-27AD7 Filename Length       0050 (80)\n-27AD9 Extra Length          0009 (9)\n-27ADB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x27ADB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-27B2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-27B2D   Length              0005 (5)\n-27B2F   Flags               01 (1) 'Modification'\n-27B30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-27B34 PAYLOAD\n-\n-28ECE DATA DESCRIPTOR       08074B50 (134695760)\n-28ED2 CRC                   D5E82AF6 (3588762358)\n-28ED6 Compressed Size       0000139A (5018)\n-28EDA Uncompressed Size     0000139A (5018)\n-\n-28EDE LOCAL HEADER #68      04034B50 (67324752)\n-28EE2 Extract Zip Spec      14 (20) '2.0'\n-28EE3 Extract OS            00 (0) 'MS-DOS'\n-28EE4 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-28EE6 Compression Method    0000 (0) 'Stored'\n-28EE8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-28EEC CRC                   00000000 (0)\n-28EF0 Compressed Size       00000000 (0)\n-28EF4 Uncompressed Size     00000000 (0)\n-28EF8 Filename Length       0043 (67)\n-28EFA Extra Length          0009 (9)\n-28EFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x28EFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-28F3F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-28F41   Length              0005 (5)\n-28F43   Flags               01 (1) 'Modification'\n-28F44   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-28F48 PAYLOAD\n-\n-2CBBC DATA DESCRIPTOR       08074B50 (134695760)\n-2CBC0 CRC                   CA23CF9D (3391344541)\n-2CBC4 Compressed Size       00003C74 (15476)\n-2CBC8 Uncompressed Size     00003C74 (15476)\n-\n-2CBCC CENTRAL HEADER #1     02014B50 (33639248)\n-2CBD0 Created Zip Spec      14 (20) '2.0'\n-2CBD1 Created OS            00 (0) 'MS-DOS'\n-2CBD2 Extract Zip Spec      14 (20) '2.0'\n-2CBD3 Extract OS            00 (0) 'MS-DOS'\n-2CBD4 General Purpose Flag  0000 (0)\n-2CBD6 Compression Method    0000 (0) 'Stored'\n-2CBD8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CBDC CRC                   00000000 (0)\n-2CBE0 Compressed Size       00000000 (0)\n-2CBE4 Uncompressed Size     00000000 (0)\n-2CBE8 Filename Length       0009 (9)\n-2CBEA Extra Length          0009 (9)\n-2CBEC Comment Length        0000 (0)\n-2CBEE Disk Start            0000 (0)\n-2CBF0 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2CBF2 Ext File Attributes   00000000 (0)\n-2CBF6 Local Header Offset   00000000 (0)\n-2CBFA Filename              'XXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CBFA: Filename 'XXXXXXXXX'\n-#          Zero length filename\n-#\n-2CC03 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CC05   Length              0005 (5)\n-2CC07   Flags               01 (1) 'Modification'\n-2CC08   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2CC0C CENTRAL HEADER #2     02014B50 (33639248)\n-2CC10 Created Zip Spec      14 (20) '2.0'\n-2CC11 Created OS            00 (0) 'MS-DOS'\n-2CC12 Extract Zip Spec      14 (20) '2.0'\n-2CC13 Extract OS            00 (0) 'MS-DOS'\n-2CC14 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2CC16 Compression Method    0000 (0) 'Stored'\n-2CC18 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CC1C CRC                   36418401 (910263297)\n-2CC20 Compressed Size       000003B2 (946)\n-2CC24 Uncompressed Size     000003B2 (946)\n-2CC28 Filename Length       0015 (21)\n-2CC2A Extra Length          0009 (9)\n-2CC2C Comment Length        0000 (0)\n-2CC2E Disk Start            0000 (0)\n-2CC30 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2CC32 Ext File Attributes   00000000 (0)\n-2CC36 Local Header Offset   00000030 (48)\n-2CC3A Filename              'XXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CC3A: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2CC4F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CC51   Length              0005 (5)\n-2CC53   Flags               01 (1) 'Modification'\n-2CC54   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2CC58 CENTRAL HEADER #3     02014B50 (33639248)\n-2CC5C Created Zip Spec      14 (20) '2.0'\n-2CC5D Created OS            00 (0) 'MS-DOS'\n-2CC5E Extract Zip Spec      14 (20) '2.0'\n-2CC5F Extract OS            00 (0) 'MS-DOS'\n-2CC60 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2CC62 Compression Method    0000 (0) 'Stored'\n-2CC64 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CC68 CRC                   86E2B4B4 (2263004340)\n-2CC6C Compressed Size       00002C5E (11358)\n-2CC70 Uncompressed Size     00002C5E (11358)\n-2CC74 Filename Length       0010 (16)\n-2CC76 Extra Length          0009 (9)\n-2CC78 Comment Length        0000 (0)\n-2CC7A Disk Start            0000 (0)\n-2CC7C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2CC7E Ext File Attributes   00000000 (0)\n-2CC82 Local Header Offset   0000042E (1070)\n-2CC86 Filename              'XXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CC86: Filename 'XXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2CC96 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CC98   Length              0005 (5)\n-2CC9A   Flags               01 (1) 'Modification'\n-2CC9B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2CC9F CENTRAL HEADER #4     02014B50 (33639248)\n-2CCA3 Created Zip Spec      14 (20) '2.0'\n-2CCA4 Created OS            00 (0) 'MS-DOS'\n-2CCA5 Extract Zip Spec      14 (20) '2.0'\n-2CCA6 Extract OS            00 (0) 'MS-DOS'\n-2CCA7 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2CCA9 Compression Method    0000 (0) 'Stored'\n-2CCAB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CCAF CRC                   EE027FB2 (3993141170)\n-2CCB3 Compressed Size       00000019 (25)\n-2CCB7 Uncompressed Size     00000019 (25)\n-2CCBB Filename Length       0014 (20)\n-2CCBD Extra Length          0009 (9)\n-2CCBF Comment Length        0000 (0)\n-2CCC1 Disk Start            0000 (0)\n-2CCC3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2CCC5 Ext File Attributes   00000000 (0)\n-2CCC9 Local Header Offset   000030D3 (12499)\n-2CCCD Filename              'XXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CCCD: Filename 'XXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2CCE1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CCE3   Length              0005 (5)\n-2CCE5   Flags               01 (1) 'Modification'\n-2CCE6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2CCEA CENTRAL HEADER #5     02014B50 (33639248)\n-2CCEE Created Zip Spec      14 (20) '2.0'\n-2CCEF Created OS            00 (0) 'MS-DOS'\n-2CCF0 Extract Zip Spec      14 (20) '2.0'\n-2CCF1 Extract OS            00 (0) 'MS-DOS'\n-2CCF2 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2CCF4 Compression Method    0000 (0) 'Stored'\n-2CCF6 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CCFA CRC                   C4D5E30C (3302351628)\n-2CCFE Compressed Size       000000B5 (181)\n-2CD02 Uncompressed Size     000000B5 (181)\n-2CD06 Filename Length       000F (15)\n-2CD08 Extra Length          0009 (9)\n-2CD0A Comment Length        0000 (0)\n-2CD0C Disk Start            0000 (0)\n-2CD0E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2CD10 Ext File Attributes   00000000 (0)\n-2CD14 Local Header Offset   00003137 (12599)\n-2CD18 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CD18: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2CD27 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CD29   Length              0005 (5)\n-2CD2B   Flags               01 (1) 'Modification'\n-2CD2C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2CD30 CENTRAL HEADER #6     02014B50 (33639248)\n-2CD34 Created Zip Spec      14 (20) '2.0'\n-2CD35 Created OS            00 (0) 'MS-DOS'\n-2CD36 Extract Zip Spec      14 (20) '2.0'\n-2CD37 Extract OS            00 (0) 'MS-DOS'\n-2CD38 General Purpose Flag  0000 (0)\n-2CD3A Compression Method    0000 (0) 'Stored'\n-2CD3C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CD40 CRC                   00000000 (0)\n-2CD44 Compressed Size       00000000 (0)\n-2CD48 Uncompressed Size     00000000 (0)\n-2CD4C Filename Length       000F (15)\n-2CD4E Extra Length          0009 (9)\n-2CD50 Comment Length        0000 (0)\n-2CD52 Disk Start            0000 (0)\n-2CD54 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2CD56 Ext File Attributes   00000000 (0)\n-2CD5A Local Header Offset   00003232 (12850)\n-2CD5E Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CD5E: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2CD6D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CD6F   Length              0005 (5)\n-2CD71   Flags               01 (1) 'Modification'\n-2CD72   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2CD76 CENTRAL HEADER #7     02014B50 (33639248)\n-2CD7A Created Zip Spec      14 (20) '2.0'\n-2CD7B Created OS            00 (0) 'MS-DOS'\n-2CD7C Extract Zip Spec      14 (20) '2.0'\n-2CD7D Extract OS            00 (0) 'MS-DOS'\n-2CD7E General Purpose Flag  0000 (0)\n-2CD80 Compression Method    0000 (0) 'Stored'\n-2CD82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CD86 CRC                   00000000 (0)\n-2CD8A Compressed Size       00000000 (0)\n-2CD8E Uncompressed Size     00000000 (0)\n-2CD92 Filename Length       0018 (24)\n-2CD94 Extra Length          0009 (9)\n-2CD96 Comment Length        0000 (0)\n-2CD98 Disk Start            0000 (0)\n-2CD9A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2CD9C Ext File Attributes   00000000 (0)\n-2CDA0 Local Header Offset   00003268 (12904)\n-2CDA4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CDA4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2CDBC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CDBE   Length              0005 (5)\n-2CDC0   Flags               01 (1) 'Modification'\n-2CDC1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2CDC5 CENTRAL HEADER #8     02014B50 (33639248)\n-2CDC9 Created Zip Spec      14 (20) '2.0'\n-2CDCA Created OS            00 (0) 'MS-DOS'\n-2CDCB Extract Zip Spec      14 (20) '2.0'\n-2CDCC Extract OS            00 (0) 'MS-DOS'\n-2CDCD General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2CDCF Compression Method    0000 (0) 'Stored'\n-2CDD1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CDD5 CRC                   7D02909B (2097320091)\n-2CDD9 Compressed Size       000002B1 (689)\n-2CDDD Uncompressed Size     000002B1 (689)\n-2CDE1 Filename Length       0065 (101)\n-2CDE3 Extra Length          0009 (9)\n-2CDE5 Comment Length        0000 (0)\n-2CDE7 Disk Start            0000 (0)\n-2CDE9 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2CDEB Ext File Attributes   00000000 (0)\n-2CDEF Local Header Offset   000032A7 (12967)\n-2CDF3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CDF3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2CE58 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CE5A   Length              0005 (5)\n-2CE5C   Flags               01 (1) 'Modification'\n-2CE5D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2CE61 CENTRAL HEADER #9     02014B50 (33639248)\n-2CE65 Created Zip Spec      14 (20) '2.0'\n-2CE66 Created OS            00 (0) 'MS-DOS'\n-2CE67 Extract Zip Spec      14 (20) '2.0'\n-2CE68 Extract OS            00 (0) 'MS-DOS'\n-2CE69 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2CE6B Compression Method    0000 (0) 'Stored'\n-2CE6D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CE71 CRC                   4B8794AA (1267176618)\n-2CE75 Compressed Size       00000365 (869)\n-2CE79 Uncompressed Size     00000365 (869)\n-2CE7D Filename Length       006E (110)\n-2CE7F Extra Length          0009 (9)\n-2CE81 Comment Length        0000 (0)\n-2CE83 Disk Start            0000 (0)\n-2CE85 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2CE87 Ext File Attributes   00000000 (0)\n-2CE8B Local Header Offset   000035F4 (13812)\n-2CE8F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CE8F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2CEFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CEFF   Length              0005 (5)\n-2CF01   Flags               01 (1) 'Modification'\n-2CF02   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2CF06 CENTRAL HEADER #10    02014B50 (33639248)\n-2CF0A Created Zip Spec      14 (20) '2.0'\n-2CF0B Created OS            00 (0) 'MS-DOS'\n-2CF0C Extract Zip Spec      14 (20) '2.0'\n-2CF0D Extract OS            00 (0) 'MS-DOS'\n-2CF0E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2CF10 Compression Method    0000 (0) 'Stored'\n-2CF12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CF16 CRC                   26007615 (637564437)\n-2CF1A Compressed Size       0000013A (314)\n-2CF1E Uncompressed Size     0000013A (314)\n-2CF22 Filename Length       0068 (104)\n-2CF24 Extra Length          0009 (9)\n-2CF26 Comment Length        0000 (0)\n-2CF28 Disk Start            0000 (0)\n-2CF2A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2CF2C Ext File Attributes   00000000 (0)\n-2CF30 Local Header Offset   000039FE (14846)\n-2CF34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CF34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2CF9C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CF9E   Length              0005 (5)\n-2CFA0   Flags               01 (1) 'Modification'\n-2CFA1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2CFA5 CENTRAL HEADER #11    02014B50 (33639248)\n-2CFA9 Created Zip Spec      14 (20) '2.0'\n-2CFAA Created OS            00 (0) 'MS-DOS'\n-2CFAB Extract Zip Spec      14 (20) '2.0'\n-2CFAC Extract OS            00 (0) 'MS-DOS'\n-2CFAD General Purpose Flag  0000 (0)\n-2CFAF Compression Method    0000 (0) 'Stored'\n-2CFB1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CFB5 CRC                   00000000 (0)\n-2CFB9 Compressed Size       00000000 (0)\n-2CFBD Uncompressed Size     00000000 (0)\n-2CFC1 Filename Length       000F (15)\n-2CFC3 Extra Length          0009 (9)\n-2CFC5 Comment Length        0000 (0)\n-2CFC7 Disk Start            0000 (0)\n-2CFC9 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2CFCB Ext File Attributes   00000000 (0)\n-2CFCF Local Header Offset   00003BD7 (15319)\n-2CFD3 Filename              'XXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2CFD3: Filename 'XXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2CFE2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2CFE4   Length              0005 (5)\n-2CFE6   Flags               01 (1) 'Modification'\n-2CFE7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2CFEB CENTRAL HEADER #12    02014B50 (33639248)\n-2CFEF Created Zip Spec      14 (20) '2.0'\n-2CFF0 Created OS            00 (0) 'MS-DOS'\n-2CFF1 Extract Zip Spec      14 (20) '2.0'\n-2CFF2 Extract OS            00 (0) 'MS-DOS'\n-2CFF3 General Purpose Flag  0000 (0)\n-2CFF5 Compression Method    0000 (0) 'Stored'\n-2CFF7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2CFFB CRC                   00000000 (0)\n-2CFFF Compressed Size       00000000 (0)\n-2D003 Uncompressed Size     00000000 (0)\n-2D007 Filename Length       0020 (32)\n-2D009 Extra Length          0009 (9)\n-2D00B Comment Length        0000 (0)\n-2D00D Disk Start            0000 (0)\n-2D00F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D011 Ext File Attributes   00000000 (0)\n-2D015 Local Header Offset   00003C0D (15373)\n-2D019 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D019: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D039 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D03B   Length              0005 (5)\n-2D03D   Flags               01 (1) 'Modification'\n-2D03E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D042 CENTRAL HEADER #13    02014B50 (33639248)\n-2D046 Created Zip Spec      14 (20) '2.0'\n-2D047 Created OS            00 (0) 'MS-DOS'\n-2D048 Extract Zip Spec      14 (20) '2.0'\n-2D049 Extract OS            00 (0) 'MS-DOS'\n-2D04A General Purpose Flag  0000 (0)\n-2D04C Compression Method    0000 (0) 'Stored'\n-2D04E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D052 CRC                   00000000 (0)\n-2D056 Compressed Size       00000000 (0)\n-2D05A Uncompressed Size     00000000 (0)\n-2D05E Filename Length       0039 (57)\n-2D060 Extra Length          0009 (9)\n-2D062 Comment Length        0000 (0)\n-2D064 Disk Start            0000 (0)\n-2D066 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D068 Ext File Attributes   00000000 (0)\n-2D06C Local Header Offset   00003C54 (15444)\n-2D070 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D070: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D0A9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D0AB   Length              0005 (5)\n-2D0AD   Flags               01 (1) 'Modification'\n-2D0AE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D0B2 CENTRAL HEADER #14    02014B50 (33639248)\n-2D0B6 Created Zip Spec      14 (20) '2.0'\n-2D0B7 Created OS            00 (0) 'MS-DOS'\n-2D0B8 Extract Zip Spec      14 (20) '2.0'\n-2D0B9 Extract OS            00 (0) 'MS-DOS'\n-2D0BA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D0BC Compression Method    0000 (0) 'Stored'\n-2D0BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D0C2 CRC                   00000000 (0)\n-2D0C6 Compressed Size       00000000 (0)\n-2D0CA Uncompressed Size     00000000 (0)\n-2D0CE Filename Length       0047 (71)\n-2D0D0 Extra Length          0009 (9)\n-2D0D2 Comment Length        0000 (0)\n-2D0D4 Disk Start            0000 (0)\n-2D0D6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D0D8 Ext File Attributes   00000000 (0)\n-2D0DC Local Header Offset   00003CB4 (15540)\n-2D0E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D0E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D127 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D129   Length              0005 (5)\n-2D12B   Flags               01 (1) 'Modification'\n-2D12C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D130 CENTRAL HEADER #15    02014B50 (33639248)\n-2D134 Created Zip Spec      14 (20) '2.0'\n-2D135 Created OS            00 (0) 'MS-DOS'\n-2D136 Extract Zip Spec      14 (20) '2.0'\n-2D137 Extract OS            00 (0) 'MS-DOS'\n-2D138 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D13A Compression Method    0000 (0) 'Stored'\n-2D13C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D140 CRC                   E5DF924E (3856634446)\n-2D144 Compressed Size       000017BA (6074)\n-2D148 Uncompressed Size     000017BA (6074)\n-2D14C Filename Length       0040 (64)\n-2D14E Extra Length          0009 (9)\n-2D150 Comment Length        0000 (0)\n-2D152 Disk Start            0000 (0)\n-2D154 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D156 Ext File Attributes   00000000 (0)\n-2D15A Local Header Offset   00003D32 (15666)\n-2D15E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D15E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D19E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D1A0   Length              0005 (5)\n-2D1A2   Flags               01 (1) 'Modification'\n-2D1A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D1A7 CENTRAL HEADER #16    02014B50 (33639248)\n-2D1AB Created Zip Spec      14 (20) '2.0'\n-2D1AC Created OS            00 (0) 'MS-DOS'\n-2D1AD Extract Zip Spec      14 (20) '2.0'\n-2D1AE Extract OS            00 (0) 'MS-DOS'\n-2D1AF General Purpose Flag  0000 (0)\n-2D1B1 Compression Method    0000 (0) 'Stored'\n-2D1B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D1B7 CRC                   00000000 (0)\n-2D1BB Compressed Size       00000000 (0)\n-2D1BF Uncompressed Size     00000000 (0)\n-2D1C3 Filename Length       0012 (18)\n-2D1C5 Extra Length          0009 (9)\n-2D1C7 Comment Length        0000 (0)\n-2D1C9 Disk Start            0000 (0)\n-2D1CB Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D1CD Ext File Attributes   00000000 (0)\n-2D1D1 Local Header Offset   00005563 (21859)\n-2D1D5 Filename              'XXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D1D5: Filename 'XXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D1E7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D1E9   Length              0005 (5)\n-2D1EB   Flags               01 (1) 'Modification'\n-2D1EC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D1F0 CENTRAL HEADER #17    02014B50 (33639248)\n-2D1F4 Created Zip Spec      14 (20) '2.0'\n-2D1F5 Created OS            00 (0) 'MS-DOS'\n-2D1F6 Extract Zip Spec      14 (20) '2.0'\n-2D1F7 Extract OS            00 (0) 'MS-DOS'\n-2D1F8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D1FA Compression Method    0000 (0) 'Stored'\n-2D1FC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D200 CRC                   4D28F6B5 (1294530229)\n-2D204 Compressed Size       000000B9 (185)\n-2D208 Uncompressed Size     000000B9 (185)\n-2D20C Filename Length       0037 (55)\n-2D20E Extra Length          0009 (9)\n-2D210 Comment Length        0000 (0)\n-2D212 Disk Start            0000 (0)\n-2D214 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D216 Ext File Attributes   00000000 (0)\n-2D21A Local Header Offset   0000559C (21916)\n-2D21E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D21E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D255 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D257   Length              0005 (5)\n-2D259   Flags               01 (1) 'Modification'\n-2D25A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D25E CENTRAL HEADER #18    02014B50 (33639248)\n-2D262 Created Zip Spec      14 (20) '2.0'\n-2D263 Created OS            00 (0) 'MS-DOS'\n-2D264 Extract Zip Spec      14 (20) '2.0'\n-2D265 Extract OS            00 (0) 'MS-DOS'\n-2D266 General Purpose Flag  0000 (0)\n-2D268 Compression Method    0000 (0) 'Stored'\n-2D26A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D26E CRC                   00000000 (0)\n-2D272 Compressed Size       00000000 (0)\n-2D276 Uncompressed Size     00000000 (0)\n-2D27A Filename Length       0004 (4)\n-2D27C Extra Length          0009 (9)\n-2D27E Comment Length        0000 (0)\n-2D280 Disk Start            0000 (0)\n-2D282 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D284 Ext File Attributes   00000000 (0)\n-2D288 Local Header Offset   000056C3 (22211)\n-2D28C Filename              'XXXX'\n-#\n-# WARNING: Offset 0x2D28C: Filename 'XXXX'\n-#          Zero length filename\n-#\n-2D290 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D292   Length              0005 (5)\n-2D294   Flags               01 (1) 'Modification'\n-2D295   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D299 CENTRAL HEADER #19    02014B50 (33639248)\n-2D29D Created Zip Spec      14 (20) '2.0'\n-2D29E Created OS            00 (0) 'MS-DOS'\n-2D29F Extract Zip Spec      14 (20) '2.0'\n-2D2A0 Extract OS            00 (0) 'MS-DOS'\n-2D2A1 General Purpose Flag  0000 (0)\n-2D2A3 Compression Method    0000 (0) 'Stored'\n-2D2A5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D2A9 CRC                   00000000 (0)\n-2D2AD Compressed Size       00000000 (0)\n-2D2B1 Uncompressed Size     00000000 (0)\n-2D2B5 Filename Length       000B (11)\n-2D2B7 Extra Length          0009 (9)\n-2D2B9 Comment Length        0000 (0)\n-2D2BB Disk Start            0000 (0)\n-2D2BD Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D2BF Ext File Attributes   00000000 (0)\n-2D2C3 Local Header Offset   000056EE (22254)\n-2D2C7 Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D2C7: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D2D2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D2D4   Length              0005 (5)\n-2D2D6   Flags               01 (1) 'Modification'\n-2D2D7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D2DB CENTRAL HEADER #20    02014B50 (33639248)\n-2D2DF Created Zip Spec      14 (20) '2.0'\n-2D2E0 Created OS            00 (0) 'MS-DOS'\n-2D2E1 Extract Zip Spec      14 (20) '2.0'\n-2D2E2 Extract OS            00 (0) 'MS-DOS'\n-2D2E3 General Purpose Flag  0000 (0)\n-2D2E5 Compression Method    0000 (0) 'Stored'\n-2D2E7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D2EB CRC                   00000000 (0)\n-2D2EF Compressed Size       00000000 (0)\n-2D2F3 Uncompressed Size     00000000 (0)\n-2D2F7 Filename Length       0011 (17)\n-2D2F9 Extra Length          0009 (9)\n-2D2FB Comment Length        0000 (0)\n-2D2FD Disk Start            0000 (0)\n-2D2FF Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D301 Ext File Attributes   00000000 (0)\n-2D305 Local Header Offset   00005720 (22304)\n-2D309 Filename              'XXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D309: Filename 'XXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D31A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D31C   Length              0005 (5)\n-2D31E   Flags               01 (1) 'Modification'\n-2D31F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D323 CENTRAL HEADER #21    02014B50 (33639248)\n-2D327 Created Zip Spec      14 (20) '2.0'\n-2D328 Created OS            00 (0) 'MS-DOS'\n-2D329 Extract Zip Spec      14 (20) '2.0'\n-2D32A Extract OS            00 (0) 'MS-DOS'\n-2D32B General Purpose Flag  0000 (0)\n-2D32D Compression Method    0000 (0) 'Stored'\n-2D32F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D333 CRC                   00000000 (0)\n-2D337 Compressed Size       00000000 (0)\n-2D33B Uncompressed Size     00000000 (0)\n-2D33F Filename Length       001A (26)\n-2D341 Extra Length          0009 (9)\n-2D343 Comment Length        0000 (0)\n-2D345 Disk Start            0000 (0)\n-2D347 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D349 Ext File Attributes   00000000 (0)\n-2D34D Local Header Offset   00005758 (22360)\n-2D351 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D351: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D36B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D36D   Length              0005 (5)\n-2D36F   Flags               01 (1) 'Modification'\n-2D370   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D374 CENTRAL HEADER #22    02014B50 (33639248)\n-2D378 Created Zip Spec      14 (20) '2.0'\n-2D379 Created OS            00 (0) 'MS-DOS'\n-2D37A Extract Zip Spec      14 (20) '2.0'\n-2D37B Extract OS            00 (0) 'MS-DOS'\n-2D37C General Purpose Flag  0000 (0)\n-2D37E Compression Method    0000 (0) 'Stored'\n-2D380 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D384 CRC                   00000000 (0)\n-2D388 Compressed Size       00000000 (0)\n-2D38C Uncompressed Size     00000000 (0)\n-2D390 Filename Length       0025 (37)\n-2D392 Extra Length          0009 (9)\n-2D394 Comment Length        0000 (0)\n-2D396 Disk Start            0000 (0)\n-2D398 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D39A Ext File Attributes   00000000 (0)\n-2D39E Local Header Offset   00005799 (22425)\n-2D3A2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D3A2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D3C7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D3C9   Length              0005 (5)\n-2D3CB   Flags               01 (1) 'Modification'\n-2D3CC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D3D0 CENTRAL HEADER #23    02014B50 (33639248)\n-2D3D4 Created Zip Spec      14 (20) '2.0'\n-2D3D5 Created OS            00 (0) 'MS-DOS'\n-2D3D6 Extract Zip Spec      14 (20) '2.0'\n-2D3D7 Extract OS            00 (0) 'MS-DOS'\n-2D3D8 General Purpose Flag  0000 (0)\n-2D3DA Compression Method    0000 (0) 'Stored'\n-2D3DC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D3E0 CRC                   00000000 (0)\n-2D3E4 Compressed Size       00000000 (0)\n-2D3E8 Uncompressed Size     00000000 (0)\n-2D3EC Filename Length       0030 (48)\n-2D3EE Extra Length          0009 (9)\n-2D3F0 Comment Length        0000 (0)\n-2D3F2 Disk Start            0000 (0)\n-2D3F4 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D3F6 Ext File Attributes   00000000 (0)\n-2D3FA Local Header Offset   000057E5 (22501)\n-2D3FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D3FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D42E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D430   Length              0005 (5)\n-2D432   Flags               01 (1) 'Modification'\n-2D433   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D437 CENTRAL HEADER #24    02014B50 (33639248)\n-2D43B Created Zip Spec      14 (20) '2.0'\n-2D43C Created OS            00 (0) 'MS-DOS'\n-2D43D Extract Zip Spec      14 (20) '2.0'\n-2D43E Extract OS            00 (0) 'MS-DOS'\n-2D43F General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D441 Compression Method    0000 (0) 'Stored'\n-2D443 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D447 CRC                   CFBCCE03 (3485257219)\n-2D44B Compressed Size       00000F86 (3974)\n-2D44F Uncompressed Size     00000F86 (3974)\n-2D453 Filename Length       0057 (87)\n-2D455 Extra Length          0009 (9)\n-2D457 Comment Length        0000 (0)\n-2D459 Disk Start            0000 (0)\n-2D45B Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D45D Ext File Attributes   00000000 (0)\n-2D461 Local Header Offset   0000583C (22588)\n-2D465 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D465: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D4BC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D4BE   Length              0005 (5)\n-2D4C0   Flags               01 (1) 'Modification'\n-2D4C1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D4C5 CENTRAL HEADER #25    02014B50 (33639248)\n-2D4C9 Created Zip Spec      14 (20) '2.0'\n-2D4CA Created OS            00 (0) 'MS-DOS'\n-2D4CB Extract Zip Spec      14 (20) '2.0'\n-2D4CC Extract OS            00 (0) 'MS-DOS'\n-2D4CD General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D4CF Compression Method    0000 (0) 'Stored'\n-2D4D1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D4D5 CRC                   98FA0F9F (2566524831)\n-2D4D9 Compressed Size       00000E91 (3729)\n-2D4DD Uncompressed Size     00000E91 (3729)\n-2D4E1 Filename Length       004D (77)\n-2D4E3 Extra Length          0009 (9)\n-2D4E5 Comment Length        0000 (0)\n-2D4E7 Disk Start            0000 (0)\n-2D4E9 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D4EB Ext File Attributes   00000000 (0)\n-2D4EF Local Header Offset   00006850 (26704)\n-2D4F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D4F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D540 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D542   Length              0005 (5)\n-2D544   Flags               01 (1) 'Modification'\n-2D545   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D549 CENTRAL HEADER #26    02014B50 (33639248)\n-2D54D Created Zip Spec      14 (20) '2.0'\n-2D54E Created OS            00 (0) 'MS-DOS'\n-2D54F Extract Zip Spec      14 (20) '2.0'\n-2D550 Extract OS            00 (0) 'MS-DOS'\n-2D551 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D553 Compression Method    0000 (0) 'Stored'\n-2D555 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D559 CRC                   2E3E715F (775844191)\n-2D55D Compressed Size       000009AF (2479)\n-2D561 Uncompressed Size     000009AF (2479)\n-2D565 Filename Length       0061 (97)\n-2D567 Extra Length          0009 (9)\n-2D569 Comment Length        0000 (0)\n-2D56B Disk Start            0000 (0)\n-2D56D Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D56F Ext File Attributes   00000000 (0)\n-2D573 Local Header Offset   00007765 (30565)\n-2D577 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D577: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D5D8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D5DA   Length              0005 (5)\n-2D5DC   Flags               01 (1) 'Modification'\n-2D5DD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D5E1 CENTRAL HEADER #27    02014B50 (33639248)\n-2D5E5 Created Zip Spec      14 (20) '2.0'\n-2D5E6 Created OS            00 (0) 'MS-DOS'\n-2D5E7 Extract Zip Spec      14 (20) '2.0'\n-2D5E8 Extract OS            00 (0) 'MS-DOS'\n-2D5E9 General Purpose Flag  0000 (0)\n-2D5EB Compression Method    0000 (0) 'Stored'\n-2D5ED Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D5F1 CRC                   00000000 (0)\n-2D5F5 Compressed Size       00000000 (0)\n-2D5F9 Uncompressed Size     00000000 (0)\n-2D5FD Filename Length       0038 (56)\n-2D5FF Extra Length          0009 (9)\n-2D601 Comment Length        0000 (0)\n-2D603 Disk Start            0000 (0)\n-2D605 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D607 Ext File Attributes   00000000 (0)\n-2D60B Local Header Offset   000081AC (33196)\n-2D60F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D60F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D647 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D649   Length              0005 (5)\n-2D64B   Flags               01 (1) 'Modification'\n-2D64C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D650 CENTRAL HEADER #28    02014B50 (33639248)\n-2D654 Created Zip Spec      14 (20) '2.0'\n-2D655 Created OS            00 (0) 'MS-DOS'\n-2D656 Extract Zip Spec      14 (20) '2.0'\n-2D657 Extract OS            00 (0) 'MS-DOS'\n-2D658 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D65A Compression Method    0000 (0) 'Stored'\n-2D65C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D660 CRC                   D9A5C573 (3651519859)\n-2D664 Compressed Size       00000756 (1878)\n-2D668 Uncompressed Size     00000756 (1878)\n-2D66C Filename Length       0057 (87)\n-2D66E Extra Length          0009 (9)\n-2D670 Comment Length        0000 (0)\n-2D672 Disk Start            0000 (0)\n-2D674 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D676 Ext File Attributes   00000000 (0)\n-2D67A Local Header Offset   0000820B (33291)\n-2D67E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D67E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D6D5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D6D7   Length              0005 (5)\n-2D6D9   Flags               01 (1) 'Modification'\n-2D6DA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D6DE CENTRAL HEADER #29    02014B50 (33639248)\n-2D6E2 Created Zip Spec      14 (20) '2.0'\n-2D6E3 Created OS            00 (0) 'MS-DOS'\n-2D6E4 Extract Zip Spec      14 (20) '2.0'\n-2D6E5 Extract OS            00 (0) 'MS-DOS'\n-2D6E6 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D6E8 Compression Method    0000 (0) 'Stored'\n-2D6EA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D6EE CRC                   A2AE804F (2729345103)\n-2D6F2 Compressed Size       000009F9 (2553)\n-2D6F6 Uncompressed Size     000009F9 (2553)\n-2D6FA Filename Length       005C (92)\n-2D6FC Extra Length          0009 (9)\n-2D6FE Comment Length        0000 (0)\n-2D700 Disk Start            0000 (0)\n-2D702 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D704 Ext File Attributes   00000000 (0)\n-2D708 Local Header Offset   000089EF (35311)\n-2D70C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D70C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D768 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D76A   Length              0005 (5)\n-2D76C   Flags               01 (1) 'Modification'\n-2D76D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D771 CENTRAL HEADER #30    02014B50 (33639248)\n-2D775 Created Zip Spec      14 (20) '2.0'\n-2D776 Created OS            00 (0) 'MS-DOS'\n-2D777 Extract Zip Spec      14 (20) '2.0'\n-2D778 Extract OS            00 (0) 'MS-DOS'\n-2D779 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D77B Compression Method    0000 (0) 'Stored'\n-2D77D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D781 CRC                   F33EC0CF (4080976079)\n-2D785 Compressed Size       0000077B (1915)\n-2D789 Uncompressed Size     0000077B (1915)\n-2D78D Filename Length       005A (90)\n-2D78F Extra Length          0009 (9)\n-2D791 Comment Length        0000 (0)\n-2D793 Disk Start            0000 (0)\n-2D795 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D797 Ext File Attributes   00000000 (0)\n-2D79B Local Header Offset   0000947B (38011)\n-2D79F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D79F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D7F9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D7FB   Length              0005 (5)\n-2D7FD   Flags               01 (1) 'Modification'\n-2D7FE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D802 CENTRAL HEADER #31    02014B50 (33639248)\n-2D806 Created Zip Spec      14 (20) '2.0'\n-2D807 Created OS            00 (0) 'MS-DOS'\n-2D808 Extract Zip Spec      14 (20) '2.0'\n-2D809 Extract OS            00 (0) 'MS-DOS'\n-2D80A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D80C Compression Method    0000 (0) 'Stored'\n-2D80E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D812 CRC                   4315772B (1125480235)\n-2D816 Compressed Size       0000084D (2125)\n-2D81A Uncompressed Size     0000084D (2125)\n-2D81E Filename Length       0056 (86)\n-2D820 Extra Length          0009 (9)\n-2D822 Comment Length        0000 (0)\n-2D824 Disk Start            0000 (0)\n-2D826 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D828 Ext File Attributes   00000000 (0)\n-2D82C Local Header Offset   00009C87 (40071)\n-2D830 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D830: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D886 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D888   Length              0005 (5)\n-2D88A   Flags               01 (1) 'Modification'\n-2D88B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D88F CENTRAL HEADER #32    02014B50 (33639248)\n-2D893 Created Zip Spec      14 (20) '2.0'\n-2D894 Created OS            00 (0) 'MS-DOS'\n-2D895 Extract Zip Spec      14 (20) '2.0'\n-2D896 Extract OS            00 (0) 'MS-DOS'\n-2D897 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D899 Compression Method    0000 (0) 'Stored'\n-2D89B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D89F CRC                   9303FD8F (2466512271)\n-2D8A3 Compressed Size       000009E5 (2533)\n-2D8A7 Uncompressed Size     000009E5 (2533)\n-2D8AB Filename Length       0059 (89)\n-2D8AD Extra Length          0009 (9)\n-2D8AF Comment Length        0000 (0)\n-2D8B1 Disk Start            0000 (0)\n-2D8B3 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D8B5 Ext File Attributes   00000000 (0)\n-2D8B9 Local Header Offset   0000A561 (42337)\n-2D8BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D8BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D916 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D918   Length              0005 (5)\n-2D91A   Flags               01 (1) 'Modification'\n-2D91B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D91F CENTRAL HEADER #33    02014B50 (33639248)\n-2D923 Created Zip Spec      14 (20) '2.0'\n-2D924 Created OS            00 (0) 'MS-DOS'\n-2D925 Extract Zip Spec      14 (20) '2.0'\n-2D926 Extract OS            00 (0) 'MS-DOS'\n-2D927 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D929 Compression Method    0000 (0) 'Stored'\n-2D92B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D92F CRC                   243129AC (607201708)\n-2D933 Compressed Size       000009C2 (2498)\n-2D937 Uncompressed Size     000009C2 (2498)\n-2D93B Filename Length       0055 (85)\n-2D93D Extra Length          0009 (9)\n-2D93F Comment Length        0000 (0)\n-2D941 Disk Start            0000 (0)\n-2D943 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D945 Ext File Attributes   00000000 (0)\n-2D949 Local Header Offset   0000AFD6 (45014)\n-2D94D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D94D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2D9A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2D9A4   Length              0005 (5)\n-2D9A6   Flags               01 (1) 'Modification'\n-2D9A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2D9AB CENTRAL HEADER #34    02014B50 (33639248)\n-2D9AF Created Zip Spec      14 (20) '2.0'\n-2D9B0 Created OS            00 (0) 'MS-DOS'\n-2D9B1 Extract Zip Spec      14 (20) '2.0'\n-2D9B2 Extract OS            00 (0) 'MS-DOS'\n-2D9B3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2D9B5 Compression Method    0000 (0) 'Stored'\n-2D9B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2D9BB CRC                   82B7884A (2193066058)\n-2D9BF Compressed Size       00000961 (2401)\n-2D9C3 Uncompressed Size     00000961 (2401)\n-2D9C7 Filename Length       0054 (84)\n-2D9C9 Extra Length          0009 (9)\n-2D9CB Comment Length        0000 (0)\n-2D9CD Disk Start            0000 (0)\n-2D9CF Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2D9D1 Ext File Attributes   00000000 (0)\n-2D9D5 Local Header Offset   0000BA24 (47652)\n-2D9D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2D9D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DA2D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DA2F   Length              0005 (5)\n-2DA31   Flags               01 (1) 'Modification'\n-2DA32   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DA36 CENTRAL HEADER #35    02014B50 (33639248)\n-2DA3A Created Zip Spec      14 (20) '2.0'\n-2DA3B Created OS            00 (0) 'MS-DOS'\n-2DA3C Extract Zip Spec      14 (20) '2.0'\n-2DA3D Extract OS            00 (0) 'MS-DOS'\n-2DA3E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DA40 Compression Method    0000 (0) 'Stored'\n-2DA42 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DA46 CRC                   0F671EAE (258416302)\n-2DA4A Compressed Size       000006DB (1755)\n-2DA4E Uncompressed Size     000006DB (1755)\n-2DA52 Filename Length       005B (91)\n-2DA54 Extra Length          0009 (9)\n-2DA56 Comment Length        0000 (0)\n-2DA58 Disk Start            0000 (0)\n-2DA5A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2DA5C Ext File Attributes   00000000 (0)\n-2DA60 Local Header Offset   0000C410 (50192)\n-2DA64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DA64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DABF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DAC1   Length              0005 (5)\n-2DAC3   Flags               01 (1) 'Modification'\n-2DAC4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DAC8 CENTRAL HEADER #36    02014B50 (33639248)\n-2DACC Created Zip Spec      14 (20) '2.0'\n-2DACD Created OS            00 (0) 'MS-DOS'\n-2DACE Extract Zip Spec      14 (20) '2.0'\n-2DACF Extract OS            00 (0) 'MS-DOS'\n-2DAD0 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DAD2 Compression Method    0000 (0) 'Stored'\n-2DAD4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DAD8 CRC                   14082F15 (336080661)\n-2DADC Compressed Size       000009D5 (2517)\n-2DAE0 Uncompressed Size     000009D5 (2517)\n-2DAE4 Filename Length       0055 (85)\n-2DAE6 Extra Length          0009 (9)\n-2DAE8 Comment Length        0000 (0)\n-2DAEA Disk Start            0000 (0)\n-2DAEC Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2DAEE Ext File Attributes   00000000 (0)\n-2DAF2 Local Header Offset   0000CB7D (52093)\n-2DAF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DAF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DB4B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DB4D   Length              0005 (5)\n-2DB4F   Flags               01 (1) 'Modification'\n-2DB50   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DB54 CENTRAL HEADER #37    02014B50 (33639248)\n-2DB58 Created Zip Spec      14 (20) '2.0'\n-2DB59 Created OS            00 (0) 'MS-DOS'\n-2DB5A Extract Zip Spec      14 (20) '2.0'\n-2DB5B Extract OS            00 (0) 'MS-DOS'\n-2DB5C General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DB5E Compression Method    0000 (0) 'Stored'\n-2DB60 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DB64 CRC                   3F334AFC (1060326140)\n-2DB68 Compressed Size       000006F3 (1779)\n-2DB6C Uncompressed Size     000006F3 (1779)\n-2DB70 Filename Length       0058 (88)\n-2DB72 Extra Length          0009 (9)\n-2DB74 Comment Length        0000 (0)\n-2DB76 Disk Start            0000 (0)\n-2DB78 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2DB7A Ext File Attributes   00000000 (0)\n-2DB7E Local Header Offset   0000D5DE (54750)\n-2DB82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DB82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DBDA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DBDC   Length              0005 (5)\n-2DBDE   Flags               01 (1) 'Modification'\n-2DBDF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DBE3 CENTRAL HEADER #38    02014B50 (33639248)\n-2DBE7 Created Zip Spec      14 (20) '2.0'\n-2DBE8 Created OS            00 (0) 'MS-DOS'\n-2DBE9 Extract Zip Spec      14 (20) '2.0'\n-2DBEA Extract OS            00 (0) 'MS-DOS'\n-2DBEB General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DBED Compression Method    0000 (0) 'Stored'\n-2DBEF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DBF3 CRC                   D56FC3BA (3580871610)\n-2DBF7 Compressed Size       00000EFC (3836)\n-2DBFB Uncompressed Size     00000EFC (3836)\n-2DBFF Filename Length       0052 (82)\n-2DC01 Extra Length          0009 (9)\n-2DC03 Comment Length        0000 (0)\n-2DC05 Disk Start            0000 (0)\n-2DC07 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2DC09 Ext File Attributes   00000000 (0)\n-2DC0D Local Header Offset   0000DD60 (56672)\n-2DC11 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DC11: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DC63 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DC65   Length              0005 (5)\n-2DC67   Flags               01 (1) 'Modification'\n-2DC68   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DC6C CENTRAL HEADER #39    02014B50 (33639248)\n-2DC70 Created Zip Spec      14 (20) '2.0'\n-2DC71 Created OS            00 (0) 'MS-DOS'\n-2DC72 Extract Zip Spec      14 (20) '2.0'\n-2DC73 Extract OS            00 (0) 'MS-DOS'\n-2DC74 General Purpose Flag  0000 (0)\n-2DC76 Compression Method    0000 (0) 'Stored'\n-2DC78 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DC7C CRC                   00000000 (0)\n-2DC80 Compressed Size       00000000 (0)\n-2DC84 Uncompressed Size     00000000 (0)\n-2DC88 Filename Length       0035 (53)\n-2DC8A Extra Length          0009 (9)\n-2DC8C Comment Length        0000 (0)\n-2DC8E Disk Start            0000 (0)\n-2DC90 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2DC92 Ext File Attributes   00000000 (0)\n-2DC96 Local Header Offset   0000ECE5 (60645)\n-2DC9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DC9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DCCF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DCD1   Length              0005 (5)\n-2DCD3   Flags               01 (1) 'Modification'\n-2DCD4   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DCD8 CENTRAL HEADER #40    02014B50 (33639248)\n-2DCDC Created Zip Spec      14 (20) '2.0'\n-2DCDD Created OS            00 (0) 'MS-DOS'\n-2DCDE Extract Zip Spec      14 (20) '2.0'\n-2DCDF Extract OS            00 (0) 'MS-DOS'\n-2DCE0 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DCE2 Compression Method    0000 (0) 'Stored'\n-2DCE4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DCE8 CRC                   C0B7814F (3233251663)\n-2DCEC Compressed Size       00000A17 (2583)\n-2DCF0 Uncompressed Size     00000A17 (2583)\n-2DCF4 Filename Length       0063 (99)\n-2DCF6 Extra Length          0009 (9)\n-2DCF8 Comment Length        0000 (0)\n-2DCFA Disk Start            0000 (0)\n-2DCFC Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2DCFE Ext File Attributes   00000000 (0)\n-2DD02 Local Header Offset   0000ED41 (60737)\n-2DD06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DD06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DD69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DD6B   Length              0005 (5)\n-2DD6D   Flags               01 (1) 'Modification'\n-2DD6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DD72 CENTRAL HEADER #41    02014B50 (33639248)\n-2DD76 Created Zip Spec      14 (20) '2.0'\n-2DD77 Created OS            00 (0) 'MS-DOS'\n-2DD78 Extract Zip Spec      14 (20) '2.0'\n-2DD79 Extract OS            00 (0) 'MS-DOS'\n-2DD7A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DD7C Compression Method    0000 (0) 'Stored'\n-2DD7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DD82 CRC                   E5A77ED4 (3852959444)\n-2DD86 Compressed Size       0000353F (13631)\n-2DD8A Uncompressed Size     0000353F (13631)\n-2DD8E Filename Length       005D (93)\n-2DD90 Extra Length          0009 (9)\n-2DD92 Comment Length        0000 (0)\n-2DD94 Disk Start            0000 (0)\n-2DD96 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2DD98 Ext File Attributes   00000000 (0)\n-2DD9C Local Header Offset   0000F7F2 (63474)\n-2DDA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DDA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DDFD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DDFF   Length              0005 (5)\n-2DE01   Flags               01 (1) 'Modification'\n-2DE02   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DE06 CENTRAL HEADER #42    02014B50 (33639248)\n-2DE0A Created Zip Spec      14 (20) '2.0'\n-2DE0B Created OS            00 (0) 'MS-DOS'\n-2DE0C Extract Zip Spec      14 (20) '2.0'\n-2DE0D Extract OS            00 (0) 'MS-DOS'\n-2DE0E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DE10 Compression Method    0000 (0) 'Stored'\n-2DE12 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DE16 CRC                   E9A44E2B (3919859243)\n-2DE1A Compressed Size       0000098B (2443)\n-2DE1E Uncompressed Size     0000098B (2443)\n-2DE22 Filename Length       005B (91)\n-2DE24 Extra Length          0009 (9)\n-2DE26 Comment Length        0000 (0)\n-2DE28 Disk Start            0000 (0)\n-2DE2A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2DE2C Ext File Attributes   00000000 (0)\n-2DE30 Local Header Offset   00012DC5 (77253)\n-2DE34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DE34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DE8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DE91   Length              0005 (5)\n-2DE93   Flags               01 (1) 'Modification'\n-2DE94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DE98 CENTRAL HEADER #43    02014B50 (33639248)\n-2DE9C Created Zip Spec      14 (20) '2.0'\n-2DE9D Created OS            00 (0) 'MS-DOS'\n-2DE9E Extract Zip Spec      14 (20) '2.0'\n-2DE9F Extract OS            00 (0) 'MS-DOS'\n-2DEA0 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DEA2 Compression Method    0000 (0) 'Stored'\n-2DEA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DEA8 CRC                   55F65FD4 (1442209748)\n-2DEAC Compressed Size       00001F3F (7999)\n-2DEB0 Uncompressed Size     00001F3F (7999)\n-2DEB4 Filename Length       005C (92)\n-2DEB6 Extra Length          0009 (9)\n-2DEB8 Comment Length        0000 (0)\n-2DEBA Disk Start            0000 (0)\n-2DEBC Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2DEBE Ext File Attributes   00000000 (0)\n-2DEC2 Local Header Offset   000137E2 (79842)\n-2DEC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DEC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DF22 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DF24   Length              0005 (5)\n-2DF26   Flags               01 (1) 'Modification'\n-2DF27   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DF2B CENTRAL HEADER #44    02014B50 (33639248)\n-2DF2F Created Zip Spec      14 (20) '2.0'\n-2DF30 Created OS            00 (0) 'MS-DOS'\n-2DF31 Extract Zip Spec      14 (20) '2.0'\n-2DF32 Extract OS            00 (0) 'MS-DOS'\n-2DF33 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DF35 Compression Method    0000 (0) 'Stored'\n-2DF37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DF3B CRC                   08A2B33B (144880443)\n-2DF3F Compressed Size       00000E4E (3662)\n-2DF43 Uncompressed Size     00000E4E (3662)\n-2DF47 Filename Length       0060 (96)\n-2DF49 Extra Length          0009 (9)\n-2DF4B Comment Length        0000 (0)\n-2DF4D Disk Start            0000 (0)\n-2DF4F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2DF51 Ext File Attributes   00000000 (0)\n-2DF55 Local Header Offset   000157B4 (87988)\n-2DF59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DF59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2DFB9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2DFBB   Length              0005 (5)\n-2DFBD   Flags               01 (1) 'Modification'\n-2DFBE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2DFC2 CENTRAL HEADER #45    02014B50 (33639248)\n-2DFC6 Created Zip Spec      14 (20) '2.0'\n-2DFC7 Created OS            00 (0) 'MS-DOS'\n-2DFC8 Extract Zip Spec      14 (20) '2.0'\n-2DFC9 Extract OS            00 (0) 'MS-DOS'\n-2DFCA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2DFCC Compression Method    0000 (0) 'Stored'\n-2DFCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2DFD2 CRC                   6E775F76 (1853316982)\n-2DFD6 Compressed Size       000008A2 (2210)\n-2DFDA Uncompressed Size     000008A2 (2210)\n-2DFDE Filename Length       0055 (85)\n-2DFE0 Extra Length          0009 (9)\n-2DFE2 Comment Length        0000 (0)\n-2DFE4 Disk Start            0000 (0)\n-2DFE6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2DFE8 Ext File Attributes   00000000 (0)\n-2DFEC Local Header Offset   00016699 (91801)\n-2DFF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2DFF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E045 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E047   Length              0005 (5)\n-2E049   Flags               01 (1) 'Modification'\n-2E04A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E04E CENTRAL HEADER #46    02014B50 (33639248)\n-2E052 Created Zip Spec      14 (20) '2.0'\n-2E053 Created OS            00 (0) 'MS-DOS'\n-2E054 Extract Zip Spec      14 (20) '2.0'\n-2E055 Extract OS            00 (0) 'MS-DOS'\n-2E056 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E058 Compression Method    0000 (0) 'Stored'\n-2E05A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E05E CRC                   AD40460E (2906670606)\n-2E062 Compressed Size       00000986 (2438)\n-2E066 Uncompressed Size     00000986 (2438)\n-2E06A Filename Length       0054 (84)\n-2E06C Extra Length          0009 (9)\n-2E06E Comment Length        0000 (0)\n-2E070 Disk Start            0000 (0)\n-2E072 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E074 Ext File Attributes   00000000 (0)\n-2E078 Local Header Offset   00016FC7 (94151)\n-2E07C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E07C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E0D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E0D2   Length              0005 (5)\n-2E0D4   Flags               01 (1) 'Modification'\n-2E0D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E0D9 CENTRAL HEADER #47    02014B50 (33639248)\n-2E0DD Created Zip Spec      14 (20) '2.0'\n-2E0DE Created OS            00 (0) 'MS-DOS'\n-2E0DF Extract Zip Spec      14 (20) '2.0'\n-2E0E0 Extract OS            00 (0) 'MS-DOS'\n-2E0E1 General Purpose Flag  0000 (0)\n-2E0E3 Compression Method    0000 (0) 'Stored'\n-2E0E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E0E9 CRC                   00000000 (0)\n-2E0ED Compressed Size       00000000 (0)\n-2E0F1 Uncompressed Size     00000000 (0)\n-2E0F5 Filename Length       003B (59)\n-2E0F7 Extra Length          0009 (9)\n-2E0F9 Comment Length        0000 (0)\n-2E0FB Disk Start            0000 (0)\n-2E0FD Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E0FF Ext File Attributes   00000000 (0)\n-2E103 Local Header Offset   000179D8 (96728)\n-2E107 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E107: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E142 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E144   Length              0005 (5)\n-2E146   Flags               01 (1) 'Modification'\n-2E147   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E14B CENTRAL HEADER #48    02014B50 (33639248)\n-2E14F Created Zip Spec      14 (20) '2.0'\n-2E150 Created OS            00 (0) 'MS-DOS'\n-2E151 Extract Zip Spec      14 (20) '2.0'\n-2E152 Extract OS            00 (0) 'MS-DOS'\n-2E153 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E155 Compression Method    0000 (0) 'Stored'\n-2E157 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E15B CRC                   C7D687E1 (3352725473)\n-2E15F Compressed Size       00000BD6 (3030)\n-2E163 Uncompressed Size     00000BD6 (3030)\n-2E167 Filename Length       005E (94)\n-2E169 Extra Length          0009 (9)\n-2E16B Comment Length        0000 (0)\n-2E16D Disk Start            0000 (0)\n-2E16F Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E171 Ext File Attributes   00000000 (0)\n-2E175 Local Header Offset   00017A3A (96826)\n-2E179 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E179: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E1D7 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E1D9   Length              0005 (5)\n-2E1DB   Flags               01 (1) 'Modification'\n-2E1DC   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E1E0 CENTRAL HEADER #49    02014B50 (33639248)\n-2E1E4 Created Zip Spec      14 (20) '2.0'\n-2E1E5 Created OS            00 (0) 'MS-DOS'\n-2E1E6 Extract Zip Spec      14 (20) '2.0'\n-2E1E7 Extract OS            00 (0) 'MS-DOS'\n-2E1E8 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E1EA Compression Method    0000 (0) 'Stored'\n-2E1EC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E1F0 CRC                   34169900 (873896192)\n-2E1F4 Compressed Size       0000056C (1388)\n-2E1F8 Uncompressed Size     0000056C (1388)\n-2E1FC Filename Length       005B (91)\n-2E1FE Extra Length          0009 (9)\n-2E200 Comment Length        0000 (0)\n-2E202 Disk Start            0000 (0)\n-2E204 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E206 Ext File Attributes   00000000 (0)\n-2E20A Local Header Offset   000186A5 (100005)\n-2E20E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E20E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E269 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E26B   Length              0005 (5)\n-2E26D   Flags               01 (1) 'Modification'\n-2E26E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E272 CENTRAL HEADER #50    02014B50 (33639248)\n-2E276 Created Zip Spec      14 (20) '2.0'\n-2E277 Created OS            00 (0) 'MS-DOS'\n-2E278 Extract Zip Spec      14 (20) '2.0'\n-2E279 Extract OS            00 (0) 'MS-DOS'\n-2E27A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E27C Compression Method    0000 (0) 'Stored'\n-2E27E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E282 CRC                   6C26EEDA (1814490842)\n-2E286 Compressed Size       0000094C (2380)\n-2E28A Uncompressed Size     0000094C (2380)\n-2E28E Filename Length       005D (93)\n-2E290 Extra Length          0009 (9)\n-2E292 Comment Length        0000 (0)\n-2E294 Disk Start            0000 (0)\n-2E296 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E298 Ext File Attributes   00000000 (0)\n-2E29C Local Header Offset   00018CA3 (101539)\n-2E2A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E2A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E2FD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E2FF   Length              0005 (5)\n-2E301   Flags               01 (1) 'Modification'\n-2E302   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E306 CENTRAL HEADER #51    02014B50 (33639248)\n-2E30A Created Zip Spec      14 (20) '2.0'\n-2E30B Created OS            00 (0) 'MS-DOS'\n-2E30C Extract Zip Spec      14 (20) '2.0'\n-2E30D Extract OS            00 (0) 'MS-DOS'\n-2E30E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E310 Compression Method    0000 (0) 'Stored'\n-2E312 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E316 CRC                   3E0DDE77 (1041096311)\n-2E31A Compressed Size       0000146E (5230)\n-2E31E Uncompressed Size     0000146E (5230)\n-2E322 Filename Length       0060 (96)\n-2E324 Extra Length          0009 (9)\n-2E326 Comment Length        0000 (0)\n-2E328 Disk Start            0000 (0)\n-2E32A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E32C Ext File Attributes   00000000 (0)\n-2E330 Local Header Offset   00019683 (104067)\n-2E334 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E334: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E394 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E396   Length              0005 (5)\n-2E398   Flags               01 (1) 'Modification'\n-2E399   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E39D CENTRAL HEADER #52    02014B50 (33639248)\n-2E3A1 Created Zip Spec      14 (20) '2.0'\n-2E3A2 Created OS            00 (0) 'MS-DOS'\n-2E3A3 Extract Zip Spec      14 (20) '2.0'\n-2E3A4 Extract OS            00 (0) 'MS-DOS'\n-2E3A5 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E3A7 Compression Method    0000 (0) 'Stored'\n-2E3A9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E3AD CRC                   FFC4205D (4291043421)\n-2E3B1 Compressed Size       00000574 (1396)\n-2E3B5 Uncompressed Size     00000574 (1396)\n-2E3B9 Filename Length       005D (93)\n-2E3BB Extra Length          0009 (9)\n-2E3BD Comment Length        0000 (0)\n-2E3BF Disk Start            0000 (0)\n-2E3C1 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E3C3 Ext File Attributes   00000000 (0)\n-2E3C7 Local Header Offset   0001AB88 (109448)\n-2E3CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E3CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E428 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E42A   Length              0005 (5)\n-2E42C   Flags               01 (1) 'Modification'\n-2E42D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E431 CENTRAL HEADER #53    02014B50 (33639248)\n-2E435 Created Zip Spec      14 (20) '2.0'\n-2E436 Created OS            00 (0) 'MS-DOS'\n-2E437 Extract Zip Spec      14 (20) '2.0'\n-2E438 Extract OS            00 (0) 'MS-DOS'\n-2E439 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E43B Compression Method    0000 (0) 'Stored'\n-2E43D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E441 CRC                   4DBBA4A0 (1304143008)\n-2E445 Compressed Size       00000779 (1913)\n-2E449 Uncompressed Size     00000779 (1913)\n-2E44D Filename Length       0061 (97)\n-2E44F Extra Length          0009 (9)\n-2E451 Comment Length        0000 (0)\n-2E453 Disk Start            0000 (0)\n-2E455 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E457 Ext File Attributes   00000000 (0)\n-2E45B Local Header Offset   0001B190 (110992)\n-2E45F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E45F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E4C0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E4C2   Length              0005 (5)\n-2E4C4   Flags               01 (1) 'Modification'\n-2E4C5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E4C9 CENTRAL HEADER #54    02014B50 (33639248)\n-2E4CD Created Zip Spec      14 (20) '2.0'\n-2E4CE Created OS            00 (0) 'MS-DOS'\n-2E4CF Extract Zip Spec      14 (20) '2.0'\n-2E4D0 Extract OS            00 (0) 'MS-DOS'\n-2E4D1 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E4D3 Compression Method    0000 (0) 'Stored'\n-2E4D5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E4D9 CRC                   DB349372 (3677655922)\n-2E4DD Compressed Size       00000570 (1392)\n-2E4E1 Uncompressed Size     00000570 (1392)\n-2E4E5 Filename Length       005C (92)\n-2E4E7 Extra Length          0009 (9)\n-2E4E9 Comment Length        0000 (0)\n-2E4EB Disk Start            0000 (0)\n-2E4ED Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E4EF Ext File Attributes   00000000 (0)\n-2E4F3 Local Header Offset   0001B9A1 (113057)\n-2E4F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E4F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E553 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E555   Length              0005 (5)\n-2E557   Flags               01 (1) 'Modification'\n-2E558   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E55C CENTRAL HEADER #55    02014B50 (33639248)\n-2E560 Created Zip Spec      14 (20) '2.0'\n-2E561 Created OS            00 (0) 'MS-DOS'\n-2E562 Extract Zip Spec      14 (20) '2.0'\n-2E563 Extract OS            00 (0) 'MS-DOS'\n-2E564 General Purpose Flag  0000 (0)\n-2E566 Compression Method    0000 (0) 'Stored'\n-2E568 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E56C CRC                   00000000 (0)\n-2E570 Compressed Size       00000000 (0)\n-2E574 Uncompressed Size     00000000 (0)\n-2E578 Filename Length       003F (63)\n-2E57A Extra Length          0009 (9)\n-2E57C Comment Length        0000 (0)\n-2E57E Disk Start            0000 (0)\n-2E580 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E582 Ext File Attributes   00000000 (0)\n-2E586 Local Header Offset   0001BFA4 (114596)\n-2E58A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E58A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E5C9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E5CB   Length              0005 (5)\n-2E5CD   Flags               01 (1) 'Modification'\n-2E5CE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E5D2 CENTRAL HEADER #56    02014B50 (33639248)\n-2E5D6 Created Zip Spec      14 (20) '2.0'\n-2E5D7 Created OS            00 (0) 'MS-DOS'\n-2E5D8 Extract Zip Spec      14 (20) '2.0'\n-2E5D9 Extract OS            00 (0) 'MS-DOS'\n-2E5DA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E5DC Compression Method    0000 (0) 'Stored'\n-2E5DE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E5E2 CRC                   8BDD0458 (2346517592)\n-2E5E6 Compressed Size       00000B9F (2975)\n-2E5EA Uncompressed Size     00000B9F (2975)\n-2E5EE Filename Length       006F (111)\n-2E5F0 Extra Length          0009 (9)\n-2E5F2 Comment Length        0000 (0)\n-2E5F4 Disk Start            0000 (0)\n-2E5F6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E5F8 Ext File Attributes   00000000 (0)\n-2E5FC Local Header Offset   0001C00A (114698)\n-2E600 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E600: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E66F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E671   Length              0005 (5)\n-2E673   Flags               01 (1) 'Modification'\n-2E674   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E678 CENTRAL HEADER #57    02014B50 (33639248)\n-2E67C Created Zip Spec      14 (20) '2.0'\n-2E67D Created OS            00 (0) 'MS-DOS'\n-2E67E Extract Zip Spec      14 (20) '2.0'\n-2E67F Extract OS            00 (0) 'MS-DOS'\n-2E680 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E682 Compression Method    0000 (0) 'Stored'\n-2E684 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E688 CRC                   B306B850 (3003562064)\n-2E68C Compressed Size       0000077D (1917)\n-2E690 Uncompressed Size     0000077D (1917)\n-2E694 Filename Length       0063 (99)\n-2E696 Extra Length          0009 (9)\n-2E698 Comment Length        0000 (0)\n-2E69A Disk Start            0000 (0)\n-2E69C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E69E Ext File Attributes   00000000 (0)\n-2E6A2 Local Header Offset   0001CC4F (117839)\n-2E6A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E6A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E709 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E70B   Length              0005 (5)\n-2E70D   Flags               01 (1) 'Modification'\n-2E70E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E712 CENTRAL HEADER #58    02014B50 (33639248)\n-2E716 Created Zip Spec      14 (20) '2.0'\n-2E717 Created OS            00 (0) 'MS-DOS'\n-2E718 Extract Zip Spec      14 (20) '2.0'\n-2E719 Extract OS            00 (0) 'MS-DOS'\n-2E71A General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E71C Compression Method    0000 (0) 'Stored'\n-2E71E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E722 CRC                   CD8B5D37 (3448462647)\n-2E726 Compressed Size       000007AD (1965)\n-2E72A Uncompressed Size     000007AD (1965)\n-2E72E Filename Length       0062 (98)\n-2E730 Extra Length          0009 (9)\n-2E732 Comment Length        0000 (0)\n-2E734 Disk Start            0000 (0)\n-2E736 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E738 Ext File Attributes   00000000 (0)\n-2E73C Local Header Offset   0001D466 (119910)\n-2E740 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E740: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E7A2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E7A4   Length              0005 (5)\n-2E7A6   Flags               01 (1) 'Modification'\n-2E7A7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E7AB CENTRAL HEADER #59    02014B50 (33639248)\n-2E7AF Created Zip Spec      14 (20) '2.0'\n-2E7B0 Created OS            00 (0) 'MS-DOS'\n-2E7B1 Extract Zip Spec      14 (20) '2.0'\n-2E7B2 Extract OS            00 (0) 'MS-DOS'\n-2E7B3 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E7B5 Compression Method    0000 (0) 'Stored'\n-2E7B7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E7BB CRC                   95BEC86B (2512308331)\n-2E7BF Compressed Size       00001B8D (7053)\n-2E7C3 Uncompressed Size     00001B8D (7053)\n-2E7C7 Filename Length       0068 (104)\n-2E7C9 Extra Length          0009 (9)\n-2E7CB Comment Length        0000 (0)\n-2E7CD Disk Start            0000 (0)\n-2E7CF Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E7D1 Ext File Attributes   00000000 (0)\n-2E7D5 Local Header Offset   0001DCAC (122028)\n-2E7D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E7D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E841 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E843   Length              0005 (5)\n-2E845   Flags               01 (1) 'Modification'\n-2E846   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E84A CENTRAL HEADER #60    02014B50 (33639248)\n-2E84E Created Zip Spec      14 (20) '2.0'\n-2E84F Created OS            00 (0) 'MS-DOS'\n-2E850 Extract Zip Spec      14 (20) '2.0'\n-2E851 Extract OS            00 (0) 'MS-DOS'\n-2E852 General Purpose Flag  0000 (0)\n-2E854 Compression Method    0000 (0) 'Stored'\n-2E856 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E85A CRC                   00000000 (0)\n-2E85E Compressed Size       00000000 (0)\n-2E862 Uncompressed Size     00000000 (0)\n-2E866 Filename Length       0035 (53)\n-2E868 Extra Length          0009 (9)\n-2E86A Comment Length        0000 (0)\n-2E86C Disk Start            0000 (0)\n-2E86E Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E870 Ext File Attributes   00000000 (0)\n-2E874 Local Header Offset   0001F8D8 (129240)\n-2E878 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E878: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E8AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E8AF   Length              0005 (5)\n-2E8B1   Flags               01 (1) 'Modification'\n-2E8B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E8B6 CENTRAL HEADER #61    02014B50 (33639248)\n-2E8BA Created Zip Spec      14 (20) '2.0'\n-2E8BB Created OS            00 (0) 'MS-DOS'\n-2E8BC Extract Zip Spec      14 (20) '2.0'\n-2E8BD Extract OS            00 (0) 'MS-DOS'\n-2E8BE General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E8C0 Compression Method    0000 (0) 'Stored'\n-2E8C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E8C6 CRC                   D216B32B (3524703019)\n-2E8CA Compressed Size       00002C56 (11350)\n-2E8CE Uncompressed Size     00002C56 (11350)\n-2E8D2 Filename Length       0049 (73)\n-2E8D4 Extra Length          0009 (9)\n-2E8D6 Comment Length        0000 (0)\n-2E8D8 Disk Start            0000 (0)\n-2E8DA Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E8DC Ext File Attributes   00000000 (0)\n-2E8E0 Local Header Offset   0001F934 (129332)\n-2E8E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E8E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E92D Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E92F   Length              0005 (5)\n-2E931   Flags               01 (1) 'Modification'\n-2E932   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E936 CENTRAL HEADER #62    02014B50 (33639248)\n-2E93A Created Zip Spec      14 (20) '2.0'\n-2E93B Created OS            00 (0) 'MS-DOS'\n-2E93C Extract Zip Spec      14 (20) '2.0'\n-2E93D Extract OS            00 (0) 'MS-DOS'\n-2E93E General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E940 Compression Method    0000 (0) 'Stored'\n-2E942 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E946 CRC                   94E29DCE (2497879502)\n-2E94A Compressed Size       00000A84 (2692)\n-2E94E Uncompressed Size     00000A84 (2692)\n-2E952 Filename Length       0055 (85)\n-2E954 Extra Length          0009 (9)\n-2E956 Comment Length        0000 (0)\n-2E958 Disk Start            0000 (0)\n-2E95A Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E95C Ext File Attributes   00000000 (0)\n-2E960 Local Header Offset   0002260A (140810)\n-2E964 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E964: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2E9B9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2E9BB   Length              0005 (5)\n-2E9BD   Flags               01 (1) 'Modification'\n-2E9BE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2E9C2 CENTRAL HEADER #63    02014B50 (33639248)\n-2E9C6 Created Zip Spec      14 (20) '2.0'\n-2E9C7 Created OS            00 (0) 'MS-DOS'\n-2E9C8 Extract Zip Spec      14 (20) '2.0'\n-2E9C9 Extract OS            00 (0) 'MS-DOS'\n-2E9CA General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2E9CC Compression Method    0000 (0) 'Stored'\n-2E9CE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2E9D2 CRC                   650D189A (1695357082)\n-2E9D6 Compressed Size       00001832 (6194)\n-2E9DA Uncompressed Size     00001832 (6194)\n-2E9DE Filename Length       0044 (68)\n-2E9E0 Extra Length          0009 (9)\n-2E9E2 Comment Length        0000 (0)\n-2E9E4 Disk Start            0000 (0)\n-2E9E6 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2E9E8 Ext File Attributes   00000000 (0)\n-2E9EC Local Header Offset   0002311A (143642)\n-2E9F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2E9F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2EA34 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2EA36   Length              0005 (5)\n-2EA38   Flags               01 (1) 'Modification'\n-2EA39   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2EA3D CENTRAL HEADER #64    02014B50 (33639248)\n-2EA41 Created Zip Spec      14 (20) '2.0'\n-2EA42 Created OS            00 (0) 'MS-DOS'\n-2EA43 Extract Zip Spec      14 (20) '2.0'\n-2EA44 Extract OS            00 (0) 'MS-DOS'\n-2EA45 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2EA47 Compression Method    0000 (0) 'Stored'\n-2EA49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2EA4D CRC                   4BF9C614 (1274660372)\n-2EA51 Compressed Size       000005BC (1468)\n-2EA55 Uncompressed Size     000005BC (1468)\n-2EA59 Filename Length       0045 (69)\n-2EA5B Extra Length          0009 (9)\n-2EA5D Comment Length        0000 (0)\n-2EA5F Disk Start            0000 (0)\n-2EA61 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2EA63 Ext File Attributes   00000000 (0)\n-2EA67 Local Header Offset   000249C7 (149959)\n-2EA6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2EA6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2EAB0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2EAB2   Length              0005 (5)\n-2EAB4   Flags               01 (1) 'Modification'\n-2EAB5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2EAB9 CENTRAL HEADER #65    02014B50 (33639248)\n-2EABD Created Zip Spec      14 (20) '2.0'\n-2EABE Created OS            00 (0) 'MS-DOS'\n-2EABF Extract Zip Spec      14 (20) '2.0'\n-2EAC0 Extract OS            00 (0) 'MS-DOS'\n-2EAC1 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2EAC3 Compression Method    0000 (0) 'Stored'\n-2EAC5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2EAC9 CRC                   78DAF5DB (2027615707)\n-2EACD Compressed Size       00000DB3 (3507)\n-2EAD1 Uncompressed Size     00000DB3 (3507)\n-2EAD5 Filename Length       0045 (69)\n-2EAD7 Extra Length          0009 (9)\n-2EAD9 Comment Length        0000 (0)\n-2EADB Disk Start            0000 (0)\n-2EADD Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2EADF Ext File Attributes   00000000 (0)\n-2EAE3 Local Header Offset   00024FFF (151551)\n-2EAE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2EAE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2EB2C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2EB2E   Length              0005 (5)\n-2EB30   Flags               01 (1) 'Modification'\n-2EB31   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2EB35 CENTRAL HEADER #66    02014B50 (33639248)\n-2EB39 Created Zip Spec      14 (20) '2.0'\n-2EB3A Created OS            00 (0) 'MS-DOS'\n-2EB3B Extract Zip Spec      14 (20) '2.0'\n-2EB3C Extract OS            00 (0) 'MS-DOS'\n-2EB3D General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2EB3F Compression Method    0000 (0) 'Stored'\n-2EB41 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2EB45 CRC                   F812A548 (4161971528)\n-2EB49 Compressed Size       00001C13 (7187)\n-2EB4D Uncompressed Size     00001C13 (7187)\n-2EB51 Filename Length       0045 (69)\n-2EB53 Extra Length          0009 (9)\n-2EB55 Comment Length        0000 (0)\n-2EB57 Disk Start            0000 (0)\n-2EB59 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2EB5B Ext File Attributes   00000000 (0)\n-2EB5F Local Header Offset   00025E2E (155182)\n-2EB63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2EB63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2EBA8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2EBAA   Length              0005 (5)\n-2EBAC   Flags               01 (1) 'Modification'\n-2EBAD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2EBB1 CENTRAL HEADER #67    02014B50 (33639248)\n-2EBB5 Created Zip Spec      14 (20) '2.0'\n-2EBB6 Created OS            00 (0) 'MS-DOS'\n-2EBB7 Extract Zip Spec      14 (20) '2.0'\n-2EBB8 Extract OS            00 (0) 'MS-DOS'\n-2EBB9 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2EBBB Compression Method    0000 (0) 'Stored'\n-2EBBD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2EBC1 CRC                   D5E82AF6 (3588762358)\n-2EBC5 Compressed Size       0000139A (5018)\n-2EBC9 Uncompressed Size     0000139A (5018)\n-2EBCD Filename Length       0050 (80)\n-2EBCF Extra Length          0009 (9)\n-2EBD1 Comment Length        0000 (0)\n-2EBD3 Disk Start            0000 (0)\n-2EBD5 Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2EBD7 Ext File Attributes   00000000 (0)\n-2EBDB Local Header Offset   00027ABD (162493)\n-2EBDF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2EBDF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2EC2F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2EC31   Length              0005 (5)\n-2EC33   Flags               01 (1) 'Modification'\n-2EC34   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2EC38 CENTRAL HEADER #68    02014B50 (33639248)\n-2EC3C Created Zip Spec      14 (20) '2.0'\n-2EC3D Created OS            00 (0) 'MS-DOS'\n-2EC3E Extract Zip Spec      14 (20) '2.0'\n-2EC3F Extract OS            00 (0) 'MS-DOS'\n-2EC40 General Purpose Flag  0008 (8)\n-      [Bit  3]              1 'Streamed'\n-2EC42 Compression Method    0000 (0) 'Stored'\n-2EC44 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n-2EC48 CRC                   CA23CF9D (3391344541)\n-2EC4C Compressed Size       00003C74 (15476)\n-2EC50 Uncompressed Size     00003C74 (15476)\n-2EC54 Filename Length       0043 (67)\n-2EC56 Extra Length          0009 (9)\n-2EC58 Comment Length        0000 (0)\n-2EC5A Disk Start            0000 (0)\n-2EC5C Int File Attributes   0000 (0)\n-      [Bit 0]               0 'Binary Data'\n-2EC5E Ext File Attributes   00000000 (0)\n-2EC62 Local Header Offset   00028EDE (167646)\n-2EC66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x2EC66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n-#          Zero length filename\n-#\n-2ECA9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n-2ECAB   Length              0005 (5)\n-2ECAD   Flags               01 (1) 'Modification'\n-2ECAE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n-\n-2ECB2 END CENTRAL HEADER    06054B50 (101010256)\n-2ECB6 Number of this disk   0000 (0)\n-2ECB8 Central Dir Disk no   0000 (0)\n-2ECBA Entries in this disk  0044 (68)\n-2ECBC Total Entries         0044 (68)\n-2ECBE Size of Central Dir   000020E6 (8422)\n-2ECC2 Offset to Central Dir 0002CBCC (183244)\n-2ECC6 Comment Length        0000 (0)\n+056FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+056FD   Length              0005 (5)\n+056FF   Flags               01 (1) 'Modification'\n+05700   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05704 LOCAL HEADER #22      04034B50 (67324752)\n+05708 Extract Zip Spec      14 (20) '2.0'\n+05709 Extract OS            00 (0) 'MS-DOS'\n+0570A General Purpose Flag  0000 (0)\n+0570C Compression Method    0000 (0) 'Stored'\n+0570E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+05712 CRC                   00000000 (0)\n+05716 Compressed Size       00000000 (0)\n+0571A Uncompressed Size     00000000 (0)\n+0571E Filename Length       0025 (37)\n+05720 Extra Length          0009 (9)\n+05722 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x5722: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+05747 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+05749   Length              0005 (5)\n+0574B   Flags               01 (1) 'Modification'\n+0574C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+05750 LOCAL HEADER #23      04034B50 (67324752)\n+05754 Extract Zip Spec      14 (20) '2.0'\n+05755 Extract OS            00 (0) 'MS-DOS'\n+05756 General Purpose Flag  0000 (0)\n+05758 Compression Method    0000 (0) 'Stored'\n+0575A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0575E CRC                   00000000 (0)\n+05762 Compressed Size       00000000 (0)\n+05766 Uncompressed Size     00000000 (0)\n+0576A Filename Length       0030 (48)\n+0576C Extra Length          0009 (9)\n+0576E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x576E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0579E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+057A0   Length              0005 (5)\n+057A2   Flags               01 (1) 'Modification'\n+057A3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+057A7 LOCAL HEADER #24      04034B50 (67324752)\n+057AB Extract Zip Spec      14 (20) '2.0'\n+057AC Extract OS            00 (0) 'MS-DOS'\n+057AD General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+057AF Compression Method    0000 (0) 'Stored'\n+057B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+057B5 CRC                   00000000 (0)\n+057B9 Compressed Size       00000000 (0)\n+057BD Uncompressed Size     00000000 (0)\n+057C1 Filename Length       0057 (87)\n+057C3 Extra Length          0009 (9)\n+057C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x57C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0581C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0581E   Length              0005 (5)\n+05820   Flags               01 (1) 'Modification'\n+05821   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+05825 PAYLOAD\n+\n+06817 DATA DESCRIPTOR       08074B50 (134695760)\n+0681B CRC                   EDE26CAC (3991039148)\n+0681F Compressed Size       00000FF2 (4082)\n+06823 Uncompressed Size     00000FF2 (4082)\n+\n+06827 LOCAL HEADER #25      04034B50 (67324752)\n+0682B Extract Zip Spec      14 (20) '2.0'\n+0682C Extract OS            00 (0) 'MS-DOS'\n+0682D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0682F Compression Method    0000 (0) 'Stored'\n+06831 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+06835 CRC                   00000000 (0)\n+06839 Compressed Size       00000000 (0)\n+0683D Uncompressed Size     00000000 (0)\n+06841 Filename Length       004D (77)\n+06843 Extra Length          0009 (9)\n+06845 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x6845: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+06892 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+06894   Length              0005 (5)\n+06896   Flags               01 (1) 'Modification'\n+06897   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0689B PAYLOAD\n+\n+07795 DATA DESCRIPTOR       08074B50 (134695760)\n+07799 CRC                   28829ABF (679647935)\n+0779D Compressed Size       00000EFA (3834)\n+077A1 Uncompressed Size     00000EFA (3834)\n+\n+077A5 LOCAL HEADER #26      04034B50 (67324752)\n+077A9 Extract Zip Spec      14 (20) '2.0'\n+077AA Extract OS            00 (0) 'MS-DOS'\n+077AB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+077AD Compression Method    0000 (0) 'Stored'\n+077AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+077B3 CRC                   00000000 (0)\n+077B7 Compressed Size       00000000 (0)\n+077BB Uncompressed Size     00000000 (0)\n+077BF Filename Length       0061 (97)\n+077C1 Extra Length          0009 (9)\n+077C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x77C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+07824 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+07826   Length              0005 (5)\n+07828   Flags               01 (1) 'Modification'\n+07829   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0782D PAYLOAD\n+\n+08218 DATA DESCRIPTOR       08074B50 (134695760)\n+0821C CRC                   E1E2CA9A (3789736602)\n+08220 Compressed Size       000009EB (2539)\n+08224 Uncompressed Size     000009EB (2539)\n+\n+08228 LOCAL HEADER #27      04034B50 (67324752)\n+0822C Extract Zip Spec      14 (20) '2.0'\n+0822D Extract OS            00 (0) 'MS-DOS'\n+0822E General Purpose Flag  0000 (0)\n+08230 Compression Method    0000 (0) 'Stored'\n+08232 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08236 CRC                   00000000 (0)\n+0823A Compressed Size       00000000 (0)\n+0823E Uncompressed Size     00000000 (0)\n+08242 Filename Length       0038 (56)\n+08244 Extra Length          0009 (9)\n+08246 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8246: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0827E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08280   Length              0005 (5)\n+08282   Flags               01 (1) 'Modification'\n+08283   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+08287 LOCAL HEADER #28      04034B50 (67324752)\n+0828B Extract Zip Spec      14 (20) '2.0'\n+0828C Extract OS            00 (0) 'MS-DOS'\n+0828D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0828F Compression Method    0000 (0) 'Stored'\n+08291 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08295 CRC                   00000000 (0)\n+08299 Compressed Size       00000000 (0)\n+0829D Uncompressed Size     00000000 (0)\n+082A1 Filename Length       0057 (87)\n+082A3 Extra Length          0009 (9)\n+082A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x82A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+082FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+082FE   Length              0005 (5)\n+08300   Flags               01 (1) 'Modification'\n+08301   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08305 PAYLOAD\n+\n+08A8D DATA DESCRIPTOR       08074B50 (134695760)\n+08A91 CRC                   31BAA9F2 (834316786)\n+08A95 Compressed Size       00000788 (1928)\n+08A99 Uncompressed Size     00000788 (1928)\n+\n+08A9D LOCAL HEADER #29      04034B50 (67324752)\n+08AA1 Extract Zip Spec      14 (20) '2.0'\n+08AA2 Extract OS            00 (0) 'MS-DOS'\n+08AA3 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+08AA5 Compression Method    0000 (0) 'Stored'\n+08AA7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+08AAB CRC                   00000000 (0)\n+08AAF Compressed Size       00000000 (0)\n+08AB3 Uncompressed Size     00000000 (0)\n+08AB7 Filename Length       005C (92)\n+08AB9 Extra Length          0009 (9)\n+08ABB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x8ABB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+08B17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+08B19   Length              0005 (5)\n+08B1B   Flags               01 (1) 'Modification'\n+08B1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+08B20 PAYLOAD\n+\n+09556 DATA DESCRIPTOR       08074B50 (134695760)\n+0955A CRC                   CA7A5ADF (3397016287)\n+0955E Compressed Size       00000A36 (2614)\n+09562 Uncompressed Size     00000A36 (2614)\n+\n+09566 LOCAL HEADER #30      04034B50 (67324752)\n+0956A Extract Zip Spec      14 (20) '2.0'\n+0956B Extract OS            00 (0) 'MS-DOS'\n+0956C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0956E Compression Method    0000 (0) 'Stored'\n+09570 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09574 CRC                   00000000 (0)\n+09578 Compressed Size       00000000 (0)\n+0957C Uncompressed Size     00000000 (0)\n+09580 Filename Length       005A (90)\n+09582 Extra Length          0009 (9)\n+09584 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9584: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+095DE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+095E0   Length              0005 (5)\n+095E2   Flags               01 (1) 'Modification'\n+095E3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+095E7 PAYLOAD\n+\n+09D93 DATA DESCRIPTOR       08074B50 (134695760)\n+09D97 CRC                   9F81DA8D (2676087437)\n+09D9B Compressed Size       000007AC (1964)\n+09D9F Uncompressed Size     000007AC (1964)\n+\n+09DA3 LOCAL HEADER #31      04034B50 (67324752)\n+09DA7 Extract Zip Spec      14 (20) '2.0'\n+09DA8 Extract OS            00 (0) 'MS-DOS'\n+09DA9 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+09DAB Compression Method    0000 (0) 'Stored'\n+09DAD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+09DB1 CRC                   00000000 (0)\n+09DB5 Compressed Size       00000000 (0)\n+09DB9 Uncompressed Size     00000000 (0)\n+09DBD Filename Length       0056 (86)\n+09DBF Extra Length          0009 (9)\n+09DC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x9DC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+09E17 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+09E19   Length              0005 (5)\n+09E1B   Flags               01 (1) 'Modification'\n+09E1C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+09E20 PAYLOAD\n+\n+0A6A4 DATA DESCRIPTOR       08074B50 (134695760)\n+0A6A8 CRC                   F865F474 (4167431284)\n+0A6AC Compressed Size       00000884 (2180)\n+0A6B0 Uncompressed Size     00000884 (2180)\n+\n+0A6B4 LOCAL HEADER #32      04034B50 (67324752)\n+0A6B8 Extract Zip Spec      14 (20) '2.0'\n+0A6B9 Extract OS            00 (0) 'MS-DOS'\n+0A6BA General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0A6BC Compression Method    0000 (0) 'Stored'\n+0A6BE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0A6C2 CRC                   00000000 (0)\n+0A6C6 Compressed Size       00000000 (0)\n+0A6CA Uncompressed Size     00000000 (0)\n+0A6CE Filename Length       0059 (89)\n+0A6D0 Extra Length          0009 (9)\n+0A6D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xA6D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0A72B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0A72D   Length              0005 (5)\n+0A72F   Flags               01 (1) 'Modification'\n+0A730   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0A734 PAYLOAD\n+\n+0B15A DATA DESCRIPTOR       08074B50 (134695760)\n+0B15E CRC                   3B8200F2 (998375666)\n+0B162 Compressed Size       00000A26 (2598)\n+0B166 Uncompressed Size     00000A26 (2598)\n+\n+0B16A LOCAL HEADER #33      04034B50 (67324752)\n+0B16E Extract Zip Spec      14 (20) '2.0'\n+0B16F Extract OS            00 (0) 'MS-DOS'\n+0B170 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0B172 Compression Method    0000 (0) 'Stored'\n+0B174 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0B178 CRC                   00000000 (0)\n+0B17C Compressed Size       00000000 (0)\n+0B180 Uncompressed Size     00000000 (0)\n+0B184 Filename Length       0055 (85)\n+0B186 Extra Length          0009 (9)\n+0B188 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xB188: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0B1DD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0B1DF   Length              0005 (5)\n+0B1E1   Flags               01 (1) 'Modification'\n+0B1E2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0B1E6 PAYLOAD\n+\n+0BBE6 DATA DESCRIPTOR       08074B50 (134695760)\n+0BBEA CRC                   D0E79628 (3504838184)\n+0BBEE Compressed Size       00000A00 (2560)\n+0BBF2 Uncompressed Size     00000A00 (2560)\n+\n+0BBF6 LOCAL HEADER #34      04034B50 (67324752)\n+0BBFA Extract Zip Spec      14 (20) '2.0'\n+0BBFB Extract OS            00 (0) 'MS-DOS'\n+0BBFC General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0BBFE Compression Method    0000 (0) 'Stored'\n+0BC00 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0BC04 CRC                   00000000 (0)\n+0BC08 Compressed Size       00000000 (0)\n+0BC0C Uncompressed Size     00000000 (0)\n+0BC10 Filename Length       0054 (84)\n+0BC12 Extra Length          0009 (9)\n+0BC14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xBC14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0BC68 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0BC6A   Length              0005 (5)\n+0BC6C   Flags               01 (1) 'Modification'\n+0BC6D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0BC71 PAYLOAD\n+\n+0C607 DATA DESCRIPTOR       08074B50 (134695760)\n+0C60B CRC                   83EF7907 (2213509383)\n+0C60F Compressed Size       00000996 (2454)\n+0C613 Uncompressed Size     00000996 (2454)\n+\n+0C617 LOCAL HEADER #35      04034B50 (67324752)\n+0C61B Extract Zip Spec      14 (20) '2.0'\n+0C61C Extract OS            00 (0) 'MS-DOS'\n+0C61D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0C61F Compression Method    0000 (0) 'Stored'\n+0C621 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0C625 CRC                   00000000 (0)\n+0C629 Compressed Size       00000000 (0)\n+0C62D Uncompressed Size     00000000 (0)\n+0C631 Filename Length       005B (91)\n+0C633 Extra Length          0009 (9)\n+0C635 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xC635: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0C690 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0C692   Length              0005 (5)\n+0C694   Flags               01 (1) 'Modification'\n+0C695   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0C699 PAYLOAD\n+\n+0CDA3 DATA DESCRIPTOR       08074B50 (134695760)\n+0CDA7 CRC                   DC4AAC43 (3695881283)\n+0CDAB Compressed Size       0000070A (1802)\n+0CDAF Uncompressed Size     0000070A (1802)\n+\n+0CDB3 LOCAL HEADER #36      04034B50 (67324752)\n+0CDB7 Extract Zip Spec      14 (20) '2.0'\n+0CDB8 Extract OS            00 (0) 'MS-DOS'\n+0CDB9 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0CDBB Compression Method    0000 (0) 'Stored'\n+0CDBD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0CDC1 CRC                   00000000 (0)\n+0CDC5 Compressed Size       00000000 (0)\n+0CDC9 Uncompressed Size     00000000 (0)\n+0CDCD Filename Length       0055 (85)\n+0CDCF Extra Length          0009 (9)\n+0CDD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xCDD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0CE26 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0CE28   Length              0005 (5)\n+0CE2A   Flags               01 (1) 'Modification'\n+0CE2B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0CE2F PAYLOAD\n+\n+0D83C DATA DESCRIPTOR       08074B50 (134695760)\n+0D840 CRC                   9D1BE974 (2635852148)\n+0D844 Compressed Size       00000A0D (2573)\n+0D848 Uncompressed Size     00000A0D (2573)\n+\n+0D84C LOCAL HEADER #37      04034B50 (67324752)\n+0D850 Extract Zip Spec      14 (20) '2.0'\n+0D851 Extract OS            00 (0) 'MS-DOS'\n+0D852 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0D854 Compression Method    0000 (0) 'Stored'\n+0D856 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0D85A CRC                   00000000 (0)\n+0D85E Compressed Size       00000000 (0)\n+0D862 Uncompressed Size     00000000 (0)\n+0D866 Filename Length       0058 (88)\n+0D868 Extra Length          0009 (9)\n+0D86A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xD86A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0D8C2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0D8C4   Length              0005 (5)\n+0D8C6   Flags               01 (1) 'Modification'\n+0D8C7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0D8CB PAYLOAD\n+\n+0DFEF DATA DESCRIPTOR       08074B50 (134695760)\n+0DFF3 CRC                   F3B9E657 (4089046615)\n+0DFF7 Compressed Size       00000724 (1828)\n+0DFFB Uncompressed Size     00000724 (1828)\n+\n+0DFFF LOCAL HEADER #38      04034B50 (67324752)\n+0E003 Extract Zip Spec      14 (20) '2.0'\n+0E004 Extract OS            00 (0) 'MS-DOS'\n+0E005 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0E007 Compression Method    0000 (0) 'Stored'\n+0E009 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0E00D CRC                   00000000 (0)\n+0E011 Compressed Size       00000000 (0)\n+0E015 Uncompressed Size     00000000 (0)\n+0E019 Filename Length       0052 (82)\n+0E01B Extra Length          0009 (9)\n+0E01D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xE01D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0E06F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0E071   Length              0005 (5)\n+0E073   Flags               01 (1) 'Modification'\n+0E074   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0E078 PAYLOAD\n+\n+0EFD4 DATA DESCRIPTOR       08074B50 (134695760)\n+0EFD8 CRC                   5F1744C1 (1595360449)\n+0EFDC Compressed Size       00000F5C (3932)\n+0EFE0 Uncompressed Size     00000F5C (3932)\n+\n+0EFE4 LOCAL HEADER #39      04034B50 (67324752)\n+0EFE8 Extract Zip Spec      14 (20) '2.0'\n+0EFE9 Extract OS            00 (0) 'MS-DOS'\n+0EFEA General Purpose Flag  0000 (0)\n+0EFEC Compression Method    0000 (0) 'Stored'\n+0EFEE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0EFF2 CRC                   00000000 (0)\n+0EFF6 Compressed Size       00000000 (0)\n+0EFFA Uncompressed Size     00000000 (0)\n+0EFFE Filename Length       0035 (53)\n+0F000 Extra Length          0009 (9)\n+0F002 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF002: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F037 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F039   Length              0005 (5)\n+0F03B   Flags               01 (1) 'Modification'\n+0F03C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+0F040 LOCAL HEADER #40      04034B50 (67324752)\n+0F044 Extract Zip Spec      14 (20) '2.0'\n+0F045 Extract OS            00 (0) 'MS-DOS'\n+0F046 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0F048 Compression Method    0000 (0) 'Stored'\n+0F04A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0F04E CRC                   00000000 (0)\n+0F052 Compressed Size       00000000 (0)\n+0F056 Uncompressed Size     00000000 (0)\n+0F05A Filename Length       0063 (99)\n+0F05C Extra Length          0009 (9)\n+0F05E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xF05E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0F0C1 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0F0C3   Length              0005 (5)\n+0F0C5   Flags               01 (1) 'Modification'\n+0F0C6   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0F0CA PAYLOAD\n+\n+0FB15 DATA DESCRIPTOR       08074B50 (134695760)\n+0FB19 CRC                   88B249EC (2293385708)\n+0FB1D Compressed Size       00000A4B (2635)\n+0FB21 Uncompressed Size     00000A4B (2635)\n+\n+0FB25 LOCAL HEADER #41      04034B50 (67324752)\n+0FB29 Extract Zip Spec      14 (20) '2.0'\n+0FB2A Extract OS            00 (0) 'MS-DOS'\n+0FB2B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+0FB2D Compression Method    0000 (0) 'Stored'\n+0FB2F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+0FB33 CRC                   00000000 (0)\n+0FB37 Compressed Size       00000000 (0)\n+0FB3B Uncompressed Size     00000000 (0)\n+0FB3F Filename Length       005D (93)\n+0FB41 Extra Length          0009 (9)\n+0FB43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0xFB43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+0FBA0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+0FBA2   Length              0005 (5)\n+0FBA4   Flags               01 (1) 'Modification'\n+0FBA5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+0FBA9 PAYLOAD\n+\n+1320B DATA DESCRIPTOR       08074B50 (134695760)\n+1320F CRC                   3BC8480C (1002981388)\n+13213 Compressed Size       00003662 (13922)\n+13217 Uncompressed Size     00003662 (13922)\n+\n+1321B LOCAL HEADER #42      04034B50 (67324752)\n+1321F Extract Zip Spec      14 (20) '2.0'\n+13220 Extract OS            00 (0) 'MS-DOS'\n+13221 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+13223 Compression Method    0000 (0) 'Stored'\n+13225 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13229 CRC                   00000000 (0)\n+1322D Compressed Size       00000000 (0)\n+13231 Uncompressed Size     00000000 (0)\n+13235 Filename Length       005B (91)\n+13237 Extra Length          0009 (9)\n+13239 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13239: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13294 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13296   Length              0005 (5)\n+13298   Flags               01 (1) 'Modification'\n+13299   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1329D PAYLOAD\n+\n+13C68 DATA DESCRIPTOR       08074B50 (134695760)\n+13C6C CRC                   EDDF253D (3990824253)\n+13C70 Compressed Size       000009CB (2507)\n+13C74 Uncompressed Size     000009CB (2507)\n+\n+13C78 LOCAL HEADER #43      04034B50 (67324752)\n+13C7C Extract Zip Spec      14 (20) '2.0'\n+13C7D Extract OS            00 (0) 'MS-DOS'\n+13C7E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+13C80 Compression Method    0000 (0) 'Stored'\n+13C82 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+13C86 CRC                   00000000 (0)\n+13C8A Compressed Size       00000000 (0)\n+13C8E Uncompressed Size     00000000 (0)\n+13C92 Filename Length       005C (92)\n+13C94 Extra Length          0009 (9)\n+13C96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x13C96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+13CF2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+13CF4   Length              0005 (5)\n+13CF6   Flags               01 (1) 'Modification'\n+13CF7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+13CFB PAYLOAD\n+\n+15CF4 DATA DESCRIPTOR       08074B50 (134695760)\n+15CF8 CRC                   F9C2E219 (4190298649)\n+15CFC Compressed Size       00001FF9 (8185)\n+15D00 Uncompressed Size     00001FF9 (8185)\n+\n+15D04 LOCAL HEADER #44      04034B50 (67324752)\n+15D08 Extract Zip Spec      14 (20) '2.0'\n+15D09 Extract OS            00 (0) 'MS-DOS'\n+15D0A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+15D0C Compression Method    0000 (0) 'Stored'\n+15D0E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+15D12 CRC                   00000000 (0)\n+15D16 Compressed Size       00000000 (0)\n+15D1A Uncompressed Size     00000000 (0)\n+15D1E Filename Length       0060 (96)\n+15D20 Extra Length          0009 (9)\n+15D22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x15D22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+15D82 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+15D84   Length              0005 (5)\n+15D86   Flags               01 (1) 'Modification'\n+15D87   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+15D8B PAYLOAD\n+\n+16C2F DATA DESCRIPTOR       08074B50 (134695760)\n+16C33 CRC                   6F538150 (1867743568)\n+16C37 Compressed Size       00000EA4 (3748)\n+16C3B Uncompressed Size     00000EA4 (3748)\n+\n+16C3F LOCAL HEADER #45      04034B50 (67324752)\n+16C43 Extract Zip Spec      14 (20) '2.0'\n+16C44 Extract OS            00 (0) 'MS-DOS'\n+16C45 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+16C47 Compression Method    0000 (0) 'Stored'\n+16C49 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+16C4D CRC                   00000000 (0)\n+16C51 Compressed Size       00000000 (0)\n+16C55 Uncompressed Size     00000000 (0)\n+16C59 Filename Length       0055 (85)\n+16C5B Extra Length          0009 (9)\n+16C5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x16C5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+16CB2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+16CB4   Length              0005 (5)\n+16CB6   Flags               01 (1) 'Modification'\n+16CB7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+16CBB PAYLOAD\n+\n+17594 DATA DESCRIPTOR       08074B50 (134695760)\n+17598 CRC                   D6C4744E (3603199054)\n+1759C Compressed Size       000008D9 (2265)\n+175A0 Uncompressed Size     000008D9 (2265)\n+\n+175A4 LOCAL HEADER #46      04034B50 (67324752)\n+175A8 Extract Zip Spec      14 (20) '2.0'\n+175A9 Extract OS            00 (0) 'MS-DOS'\n+175AA General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+175AC Compression Method    0000 (0) 'Stored'\n+175AE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+175B2 CRC                   00000000 (0)\n+175B6 Compressed Size       00000000 (0)\n+175BA Uncompressed Size     00000000 (0)\n+175BE Filename Length       0054 (84)\n+175C0 Extra Length          0009 (9)\n+175C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x175C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+17616 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+17618   Length              0005 (5)\n+1761A   Flags               01 (1) 'Modification'\n+1761B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1761F PAYLOAD\n+\n+17FE2 DATA DESCRIPTOR       08074B50 (134695760)\n+17FE6 CRC                   D59F389F (3583981727)\n+17FEA Compressed Size       000009C3 (2499)\n+17FEE Uncompressed Size     000009C3 (2499)\n+\n+17FF2 LOCAL HEADER #47      04034B50 (67324752)\n+17FF6 Extract Zip Spec      14 (20) '2.0'\n+17FF7 Extract OS            00 (0) 'MS-DOS'\n+17FF8 General Purpose Flag  0000 (0)\n+17FFA Compression Method    0000 (0) 'Stored'\n+17FFC Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18000 CRC                   00000000 (0)\n+18004 Compressed Size       00000000 (0)\n+18008 Uncompressed Size     00000000 (0)\n+1800C Filename Length       003B (59)\n+1800E Extra Length          0009 (9)\n+18010 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18010: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1804B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1804D   Length              0005 (5)\n+1804F   Flags               01 (1) 'Modification'\n+18050   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+18054 LOCAL HEADER #48      04034B50 (67324752)\n+18058 Extract Zip Spec      14 (20) '2.0'\n+18059 Extract OS            00 (0) 'MS-DOS'\n+1805A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1805C Compression Method    0000 (0) 'Stored'\n+1805E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18062 CRC                   00000000 (0)\n+18066 Compressed Size       00000000 (0)\n+1806A Uncompressed Size     00000000 (0)\n+1806E Filename Length       005E (94)\n+18070 Extra Length          0009 (9)\n+18072 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18072: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+180D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+180D2   Length              0005 (5)\n+180D4   Flags               01 (1) 'Modification'\n+180D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+180D9 PAYLOAD\n+\n+18CFA DATA DESCRIPTOR       08074B50 (134695760)\n+18CFE CRC                   6B2F7A85 (1798273669)\n+18D02 Compressed Size       00000C21 (3105)\n+18D06 Uncompressed Size     00000C21 (3105)\n+\n+18D0A LOCAL HEADER #49      04034B50 (67324752)\n+18D0E Extract Zip Spec      14 (20) '2.0'\n+18D0F Extract OS            00 (0) 'MS-DOS'\n+18D10 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+18D12 Compression Method    0000 (0) 'Stored'\n+18D14 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+18D18 CRC                   00000000 (0)\n+18D1C Compressed Size       00000000 (0)\n+18D20 Uncompressed Size     00000000 (0)\n+18D24 Filename Length       005B (91)\n+18D26 Extra Length          0009 (9)\n+18D28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x18D28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+18D83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+18D85   Length              0005 (5)\n+18D87   Flags               01 (1) 'Modification'\n+18D88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+18D8C PAYLOAD\n+\n+1931A DATA DESCRIPTOR       08074B50 (134695760)\n+1931E CRC                   B2CF52EA (2999931626)\n+19322 Compressed Size       0000058E (1422)\n+19326 Uncompressed Size     0000058E (1422)\n+\n+1932A LOCAL HEADER #50      04034B50 (67324752)\n+1932E Extract Zip Spec      14 (20) '2.0'\n+1932F Extract OS            00 (0) 'MS-DOS'\n+19330 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+19332 Compression Method    0000 (0) 'Stored'\n+19334 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19338 CRC                   00000000 (0)\n+1933C Compressed Size       00000000 (0)\n+19340 Uncompressed Size     00000000 (0)\n+19344 Filename Length       005D (93)\n+19346 Extra Length          0009 (9)\n+19348 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19348: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+193A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+193A7   Length              0005 (5)\n+193A9   Flags               01 (1) 'Modification'\n+193AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+193AE PAYLOAD\n+\n+19D2D DATA DESCRIPTOR       08074B50 (134695760)\n+19D31 CRC                   4E4D89CC (1313704396)\n+19D35 Compressed Size       0000097F (2431)\n+19D39 Uncompressed Size     0000097F (2431)\n+\n+19D3D LOCAL HEADER #51      04034B50 (67324752)\n+19D41 Extract Zip Spec      14 (20) '2.0'\n+19D42 Extract OS            00 (0) 'MS-DOS'\n+19D43 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+19D45 Compression Method    0000 (0) 'Stored'\n+19D47 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+19D4B CRC                   00000000 (0)\n+19D4F Compressed Size       00000000 (0)\n+19D53 Uncompressed Size     00000000 (0)\n+19D57 Filename Length       0060 (96)\n+19D59 Extra Length          0009 (9)\n+19D5B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x19D5B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+19DBB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+19DBD   Length              0005 (5)\n+19DBF   Flags               01 (1) 'Modification'\n+19DC0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+19DC4 PAYLOAD\n+\n+1B29E DATA DESCRIPTOR       08074B50 (134695760)\n+1B2A2 CRC                   DD72B025 (3715280933)\n+1B2A6 Compressed Size       000014DA (5338)\n+1B2AA Uncompressed Size     000014DA (5338)\n+\n+1B2AE LOCAL HEADER #52      04034B50 (67324752)\n+1B2B2 Extract Zip Spec      14 (20) '2.0'\n+1B2B3 Extract OS            00 (0) 'MS-DOS'\n+1B2B4 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1B2B6 Compression Method    0000 (0) 'Stored'\n+1B2B8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1B2BC CRC                   00000000 (0)\n+1B2C0 Compressed Size       00000000 (0)\n+1B2C4 Uncompressed Size     00000000 (0)\n+1B2C8 Filename Length       005D (93)\n+1B2CA Extra Length          0009 (9)\n+1B2CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B2CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1B329 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1B32B   Length              0005 (5)\n+1B32D   Flags               01 (1) 'Modification'\n+1B32E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1B332 PAYLOAD\n+\n+1B8C8 DATA DESCRIPTOR       08074B50 (134695760)\n+1B8CC CRC                   7B71E274 (2071061108)\n+1B8D0 Compressed Size       00000596 (1430)\n+1B8D4 Uncompressed Size     00000596 (1430)\n+\n+1B8D8 LOCAL HEADER #53      04034B50 (67324752)\n+1B8DC Extract Zip Spec      14 (20) '2.0'\n+1B8DD Extract OS            00 (0) 'MS-DOS'\n+1B8DE General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1B8E0 Compression Method    0000 (0) 'Stored'\n+1B8E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1B8E6 CRC                   00000000 (0)\n+1B8EA Compressed Size       00000000 (0)\n+1B8EE Uncompressed Size     00000000 (0)\n+1B8F2 Filename Length       0061 (97)\n+1B8F4 Extra Length          0009 (9)\n+1B8F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1B8F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1B957 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1B959   Length              0005 (5)\n+1B95B   Flags               01 (1) 'Modification'\n+1B95C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1B960 PAYLOAD\n+\n+1C0FF DATA DESCRIPTOR       08074B50 (134695760)\n+1C103 CRC                   2A9B2D50 (714812752)\n+1C107 Compressed Size       0000079F (1951)\n+1C10B Uncompressed Size     0000079F (1951)\n+\n+1C10F LOCAL HEADER #54      04034B50 (67324752)\n+1C113 Extract Zip Spec      14 (20) '2.0'\n+1C114 Extract OS            00 (0) 'MS-DOS'\n+1C115 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1C117 Compression Method    0000 (0) 'Stored'\n+1C119 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1C11D CRC                   00000000 (0)\n+1C121 Compressed Size       00000000 (0)\n+1C125 Uncompressed Size     00000000 (0)\n+1C129 Filename Length       005C (92)\n+1C12B Extra Length          0009 (9)\n+1C12D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1C12D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1C189 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1C18B   Length              0005 (5)\n+1C18D   Flags               01 (1) 'Modification'\n+1C18E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1C192 PAYLOAD\n+\n+1C724 DATA DESCRIPTOR       08074B50 (134695760)\n+1C728 CRC                   7EE5B353 (2128982867)\n+1C72C Compressed Size       00000592 (1426)\n+1C730 Uncompressed Size     00000592 (1426)\n+\n+1C734 LOCAL HEADER #55      04034B50 (67324752)\n+1C738 Extract Zip Spec      14 (20) '2.0'\n+1C739 Extract OS            00 (0) 'MS-DOS'\n+1C73A General Purpose Flag  0000 (0)\n+1C73C Compression Method    0000 (0) 'Stored'\n+1C73E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1C742 CRC                   00000000 (0)\n+1C746 Compressed Size       00000000 (0)\n+1C74A Uncompressed Size     00000000 (0)\n+1C74E Filename Length       003F (63)\n+1C750 Extra Length          0009 (9)\n+1C752 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1C752: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1C791 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1C793   Length              0005 (5)\n+1C795   Flags               01 (1) 'Modification'\n+1C796   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+1C79A LOCAL HEADER #56      04034B50 (67324752)\n+1C79E Extract Zip Spec      14 (20) '2.0'\n+1C79F Extract OS            00 (0) 'MS-DOS'\n+1C7A0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1C7A2 Compression Method    0000 (0) 'Stored'\n+1C7A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1C7A8 CRC                   00000000 (0)\n+1C7AC Compressed Size       00000000 (0)\n+1C7B0 Uncompressed Size     00000000 (0)\n+1C7B4 Filename Length       006F (111)\n+1C7B6 Extra Length          0009 (9)\n+1C7B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1C7B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1C827 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1C829   Length              0005 (5)\n+1C82B   Flags               01 (1) 'Modification'\n+1C82C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1C830 PAYLOAD\n+\n+1D414 DATA DESCRIPTOR       08074B50 (134695760)\n+1D418 CRC                   6B98A176 (1805164918)\n+1D41C Compressed Size       00000BE4 (3044)\n+1D420 Uncompressed Size     00000BE4 (3044)\n+\n+1D424 LOCAL HEADER #57      04034B50 (67324752)\n+1D428 Extract Zip Spec      14 (20) '2.0'\n+1D429 Extract OS            00 (0) 'MS-DOS'\n+1D42A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1D42C Compression Method    0000 (0) 'Stored'\n+1D42E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1D432 CRC                   00000000 (0)\n+1D436 Compressed Size       00000000 (0)\n+1D43A Uncompressed Size     00000000 (0)\n+1D43E Filename Length       0063 (99)\n+1D440 Extra Length          0009 (9)\n+1D442 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1D442: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1D4A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1D4A7   Length              0005 (5)\n+1D4A9   Flags               01 (1) 'Modification'\n+1D4AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1D4AE PAYLOAD\n+\n+1DC56 DATA DESCRIPTOR       08074B50 (134695760)\n+1DC5A CRC                   3BA0FDB6 (1000406454)\n+1DC5E Compressed Size       000007A8 (1960)\n+1DC62 Uncompressed Size     000007A8 (1960)\n+\n+1DC66 LOCAL HEADER #58      04034B50 (67324752)\n+1DC6A Extract Zip Spec      14 (20) '2.0'\n+1DC6B Extract OS            00 (0) 'MS-DOS'\n+1DC6C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1DC6E Compression Method    0000 (0) 'Stored'\n+1DC70 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1DC74 CRC                   00000000 (0)\n+1DC78 Compressed Size       00000000 (0)\n+1DC7C Uncompressed Size     00000000 (0)\n+1DC80 Filename Length       0062 (98)\n+1DC82 Extra Length          0009 (9)\n+1DC84 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1DC84: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1DCE6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1DCE8   Length              0005 (5)\n+1DCEA   Flags               01 (1) 'Modification'\n+1DCEB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1DCEF PAYLOAD\n+\n+1E4C8 DATA DESCRIPTOR       08074B50 (134695760)\n+1E4CC CRC                   AE7D7C02 (2927459330)\n+1E4D0 Compressed Size       000007D9 (2009)\n+1E4D4 Uncompressed Size     000007D9 (2009)\n+\n+1E4D8 LOCAL HEADER #59      04034B50 (67324752)\n+1E4DC Extract Zip Spec      14 (20) '2.0'\n+1E4DD Extract OS            00 (0) 'MS-DOS'\n+1E4DE General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+1E4E0 Compression Method    0000 (0) 'Stored'\n+1E4E2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+1E4E6 CRC                   00000000 (0)\n+1E4EA Compressed Size       00000000 (0)\n+1E4EE Uncompressed Size     00000000 (0)\n+1E4F2 Filename Length       0068 (104)\n+1E4F4 Extra Length          0009 (9)\n+1E4F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x1E4F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+1E55E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+1E560   Length              0005 (5)\n+1E562   Flags               01 (1) 'Modification'\n+1E563   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+1E567 PAYLOAD\n+\n+20199 DATA DESCRIPTOR       08074B50 (134695760)\n+2019D CRC                   DA74802F (3665068079)\n+201A1 Compressed Size       00001C32 (7218)\n+201A5 Uncompressed Size     00001C32 (7218)\n+\n+201A9 LOCAL HEADER #60      04034B50 (67324752)\n+201AD Extract Zip Spec      14 (20) '2.0'\n+201AE Extract OS            00 (0) 'MS-DOS'\n+201AF General Purpose Flag  0000 (0)\n+201B1 Compression Method    0000 (0) 'Stored'\n+201B3 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+201B7 CRC                   00000000 (0)\n+201BB Compressed Size       00000000 (0)\n+201BF Uncompressed Size     00000000 (0)\n+201C3 Filename Length       0035 (53)\n+201C5 Extra Length          0009 (9)\n+201C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x201C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+201FC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+201FE   Length              0005 (5)\n+20200   Flags               01 (1) 'Modification'\n+20201   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+20205 LOCAL HEADER #61      04034B50 (67324752)\n+20209 Extract Zip Spec      14 (20) '2.0'\n+2020A Extract OS            00 (0) 'MS-DOS'\n+2020B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2020D Compression Method    0000 (0) 'Stored'\n+2020F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+20213 CRC                   00000000 (0)\n+20217 Compressed Size       00000000 (0)\n+2021B Uncompressed Size     00000000 (0)\n+2021F Filename Length       0049 (73)\n+20221 Extra Length          0009 (9)\n+20223 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x20223: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2026C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2026E   Length              0005 (5)\n+20270   Flags               01 (1) 'Modification'\n+20271   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+20275 PAYLOAD\n+\n+22FB4 DATA DESCRIPTOR       08074B50 (134695760)\n+22FB8 CRC                   F8229510 (4163015952)\n+22FBC Compressed Size       00002D3F (11583)\n+22FC0 Uncompressed Size     00002D3F (11583)\n+\n+22FC4 LOCAL HEADER #62      04034B50 (67324752)\n+22FC8 Extract Zip Spec      14 (20) '2.0'\n+22FC9 Extract OS            00 (0) 'MS-DOS'\n+22FCA General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+22FCC Compression Method    0000 (0) 'Stored'\n+22FCE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+22FD2 CRC                   00000000 (0)\n+22FD6 Compressed Size       00000000 (0)\n+22FDA Uncompressed Size     00000000 (0)\n+22FDE Filename Length       0055 (85)\n+22FE0 Extra Length          0009 (9)\n+22FE2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x22FE2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+23037 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+23039   Length              0005 (5)\n+2303B   Flags               01 (1) 'Modification'\n+2303C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+23040 PAYLOAD\n+\n+23B0C DATA DESCRIPTOR       08074B50 (134695760)\n+23B10 CRC                   0206EE92 (34008722)\n+23B14 Compressed Size       00000ACC (2764)\n+23B18 Uncompressed Size     00000ACC (2764)\n+\n+23B1C LOCAL HEADER #63      04034B50 (67324752)\n+23B20 Extract Zip Spec      14 (20) '2.0'\n+23B21 Extract OS            00 (0) 'MS-DOS'\n+23B22 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+23B24 Compression Method    0000 (0) 'Stored'\n+23B26 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+23B2A CRC                   00000000 (0)\n+23B2E Compressed Size       00000000 (0)\n+23B32 Uncompressed Size     00000000 (0)\n+23B36 Filename Length       0044 (68)\n+23B38 Extra Length          0009 (9)\n+23B3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x23B3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+23B7E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+23B80   Length              0005 (5)\n+23B82   Flags               01 (1) 'Modification'\n+23B83   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+23B87 PAYLOAD\n+\n+2544B DATA DESCRIPTOR       08074B50 (134695760)\n+2544F CRC                   D32166A2 (3542181538)\n+25453 Compressed Size       000018C4 (6340)\n+25457 Uncompressed Size     000018C4 (6340)\n+\n+2545B LOCAL HEADER #64      04034B50 (67324752)\n+2545F Extract Zip Spec      14 (20) '2.0'\n+25460 Extract OS            00 (0) 'MS-DOS'\n+25461 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+25463 Compression Method    0000 (0) 'Stored'\n+25465 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+25469 CRC                   00000000 (0)\n+2546D Compressed Size       00000000 (0)\n+25471 Uncompressed Size     00000000 (0)\n+25475 Filename Length       0045 (69)\n+25477 Extra Length          0009 (9)\n+25479 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x25479: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+254BE Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+254C0   Length              0005 (5)\n+254C2   Flags               01 (1) 'Modification'\n+254C3   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+254C7 PAYLOAD\n+\n+25AB0 DATA DESCRIPTOR       08074B50 (134695760)\n+25AB4 CRC                   F4B90302 (4105765634)\n+25AB8 Compressed Size       000005E9 (1513)\n+25ABC Uncompressed Size     000005E9 (1513)\n+\n+25AC0 LOCAL HEADER #65      04034B50 (67324752)\n+25AC4 Extract Zip Spec      14 (20) '2.0'\n+25AC5 Extract OS            00 (0) 'MS-DOS'\n+25AC6 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+25AC8 Compression Method    0000 (0) 'Stored'\n+25ACA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+25ACE CRC                   00000000 (0)\n+25AD2 Compressed Size       00000000 (0)\n+25AD6 Uncompressed Size     00000000 (0)\n+25ADA Filename Length       0045 (69)\n+25ADC Extra Length          0009 (9)\n+25ADE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x25ADE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+25B23 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+25B25   Length              0005 (5)\n+25B27   Flags               01 (1) 'Modification'\n+25B28   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+25B2C PAYLOAD\n+\n+2693D DATA DESCRIPTOR       08074B50 (134695760)\n+26941 CRC                   EB53D86B (3948140651)\n+26945 Compressed Size       00000E11 (3601)\n+26949 Uncompressed Size     00000E11 (3601)\n+\n+2694D LOCAL HEADER #66      04034B50 (67324752)\n+26951 Extract Zip Spec      14 (20) '2.0'\n+26952 Extract OS            00 (0) 'MS-DOS'\n+26953 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+26955 Compression Method    0000 (0) 'Stored'\n+26957 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2695B CRC                   00000000 (0)\n+2695F Compressed Size       00000000 (0)\n+26963 Uncompressed Size     00000000 (0)\n+26967 Filename Length       0045 (69)\n+26969 Extra Length          0009 (9)\n+2696B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2696B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+269B0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+269B2   Length              0005 (5)\n+269B4   Flags               01 (1) 'Modification'\n+269B5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+269B9 PAYLOAD\n+\n+28668 DATA DESCRIPTOR       08074B50 (134695760)\n+2866C CRC                   29BE548C (700339340)\n+28670 Compressed Size       00001CAF (7343)\n+28674 Uncompressed Size     00001CAF (7343)\n+\n+28678 LOCAL HEADER #67      04034B50 (67324752)\n+2867C Extract Zip Spec      14 (20) '2.0'\n+2867D Extract OS            00 (0) 'MS-DOS'\n+2867E General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+28680 Compression Method    0000 (0) 'Stored'\n+28682 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+28686 CRC                   00000000 (0)\n+2868A Compressed Size       00000000 (0)\n+2868E Uncompressed Size     00000000 (0)\n+28692 Filename Length       0050 (80)\n+28694 Extra Length          0009 (9)\n+28696 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x28696: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+286E6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+286E8   Length              0005 (5)\n+286EA   Flags               01 (1) 'Modification'\n+286EB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+286EF PAYLOAD\n+\n+29B12 DATA DESCRIPTOR       08074B50 (134695760)\n+29B16 CRC                   509E2681 (1352541825)\n+29B1A Compressed Size       00001423 (5155)\n+29B1E Uncompressed Size     00001423 (5155)\n+\n+29B22 LOCAL HEADER #68      04034B50 (67324752)\n+29B26 Extract Zip Spec      14 (20) '2.0'\n+29B27 Extract OS            00 (0) 'MS-DOS'\n+29B28 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+29B2A Compression Method    0000 (0) 'Stored'\n+29B2C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+29B30 CRC                   00000000 (0)\n+29B34 Compressed Size       00000000 (0)\n+29B38 Uncompressed Size     00000000 (0)\n+29B3C Filename Length       0043 (67)\n+29B3E Extra Length          0009 (9)\n+29B40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x29B40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+29B83 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+29B85   Length              0005 (5)\n+29B87   Flags               01 (1) 'Modification'\n+29B88   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+29B8C PAYLOAD\n+\n+2D98F DATA DESCRIPTOR       08074B50 (134695760)\n+2D993 CRC                   59E77649 (1508341321)\n+2D997 Compressed Size       00003E03 (15875)\n+2D99B Uncompressed Size     00003E03 (15875)\n+\n+2D99F CENTRAL HEADER #1     02014B50 (33639248)\n+2D9A3 Created Zip Spec      14 (20) '2.0'\n+2D9A4 Created OS            00 (0) 'MS-DOS'\n+2D9A5 Extract Zip Spec      14 (20) '2.0'\n+2D9A6 Extract OS            00 (0) 'MS-DOS'\n+2D9A7 General Purpose Flag  0000 (0)\n+2D9A9 Compression Method    0000 (0) 'Stored'\n+2D9AB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2D9AF CRC                   00000000 (0)\n+2D9B3 Compressed Size       00000000 (0)\n+2D9B7 Uncompressed Size     00000000 (0)\n+2D9BB Filename Length       0009 (9)\n+2D9BD Extra Length          0009 (9)\n+2D9BF Comment Length        0000 (0)\n+2D9C1 Disk Start            0000 (0)\n+2D9C3 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2D9C5 Ext File Attributes   00000000 (0)\n+2D9C9 Local Header Offset   00000000 (0)\n+2D9CD Filename              'XXXXXXXXX'\n+#\n+# WARNING: Offset 0x2D9CD: Filename 'XXXXXXXXX'\n+#          Zero length filename\n+#\n+2D9D6 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2D9D8   Length              0005 (5)\n+2D9DA   Flags               01 (1) 'Modification'\n+2D9DB   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2D9DF CENTRAL HEADER #2     02014B50 (33639248)\n+2D9E3 Created Zip Spec      14 (20) '2.0'\n+2D9E4 Created OS            00 (0) 'MS-DOS'\n+2D9E5 Extract Zip Spec      14 (20) '2.0'\n+2D9E6 Extract OS            00 (0) 'MS-DOS'\n+2D9E7 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2D9E9 Compression Method    0000 (0) 'Stored'\n+2D9EB Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2D9EF CRC                   36418401 (910263297)\n+2D9F3 Compressed Size       000003B2 (946)\n+2D9F7 Uncompressed Size     000003B2 (946)\n+2D9FB Filename Length       0015 (21)\n+2D9FD Extra Length          0009 (9)\n+2D9FF Comment Length        0000 (0)\n+2DA01 Disk Start            0000 (0)\n+2DA03 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DA05 Ext File Attributes   00000000 (0)\n+2DA09 Local Header Offset   00000030 (48)\n+2DA0D Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DA0D: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DA22 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DA24   Length              0005 (5)\n+2DA26   Flags               01 (1) 'Modification'\n+2DA27   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DA2B CENTRAL HEADER #3     02014B50 (33639248)\n+2DA2F Created Zip Spec      14 (20) '2.0'\n+2DA30 Created OS            00 (0) 'MS-DOS'\n+2DA31 Extract Zip Spec      14 (20) '2.0'\n+2DA32 Extract OS            00 (0) 'MS-DOS'\n+2DA33 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2DA35 Compression Method    0000 (0) 'Stored'\n+2DA37 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DA3B CRC                   86E2B4B4 (2263004340)\n+2DA3F Compressed Size       00002C5E (11358)\n+2DA43 Uncompressed Size     00002C5E (11358)\n+2DA47 Filename Length       0010 (16)\n+2DA49 Extra Length          0009 (9)\n+2DA4B Comment Length        0000 (0)\n+2DA4D Disk Start            0000 (0)\n+2DA4F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DA51 Ext File Attributes   00000000 (0)\n+2DA55 Local Header Offset   0000042E (1070)\n+2DA59 Filename              'XXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DA59: Filename 'XXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DA69 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DA6B   Length              0005 (5)\n+2DA6D   Flags               01 (1) 'Modification'\n+2DA6E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DA72 CENTRAL HEADER #4     02014B50 (33639248)\n+2DA76 Created Zip Spec      14 (20) '2.0'\n+2DA77 Created OS            00 (0) 'MS-DOS'\n+2DA78 Extract Zip Spec      14 (20) '2.0'\n+2DA79 Extract OS            00 (0) 'MS-DOS'\n+2DA7A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2DA7C Compression Method    0000 (0) 'Stored'\n+2DA7E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DA82 CRC                   EE027FB2 (3993141170)\n+2DA86 Compressed Size       00000019 (25)\n+2DA8A Uncompressed Size     00000019 (25)\n+2DA8E Filename Length       0014 (20)\n+2DA90 Extra Length          0009 (9)\n+2DA92 Comment Length        0000 (0)\n+2DA94 Disk Start            0000 (0)\n+2DA96 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DA98 Ext File Attributes   00000000 (0)\n+2DA9C Local Header Offset   000030D3 (12499)\n+2DAA0 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DAA0: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DAB4 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DAB6   Length              0005 (5)\n+2DAB8   Flags               01 (1) 'Modification'\n+2DAB9   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DABD CENTRAL HEADER #5     02014B50 (33639248)\n+2DAC1 Created Zip Spec      14 (20) '2.0'\n+2DAC2 Created OS            00 (0) 'MS-DOS'\n+2DAC3 Extract Zip Spec      14 (20) '2.0'\n+2DAC4 Extract OS            00 (0) 'MS-DOS'\n+2DAC5 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2DAC7 Compression Method    0000 (0) 'Stored'\n+2DAC9 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DACD CRC                   C4D5E30C (3302351628)\n+2DAD1 Compressed Size       000000B5 (181)\n+2DAD5 Uncompressed Size     000000B5 (181)\n+2DAD9 Filename Length       000F (15)\n+2DADB Extra Length          0009 (9)\n+2DADD Comment Length        0000 (0)\n+2DADF Disk Start            0000 (0)\n+2DAE1 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DAE3 Ext File Attributes   00000000 (0)\n+2DAE7 Local Header Offset   00003137 (12599)\n+2DAEB Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DAEB: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DAFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DAFC   Length              0005 (5)\n+2DAFE   Flags               01 (1) 'Modification'\n+2DAFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DB03 CENTRAL HEADER #6     02014B50 (33639248)\n+2DB07 Created Zip Spec      14 (20) '2.0'\n+2DB08 Created OS            00 (0) 'MS-DOS'\n+2DB09 Extract Zip Spec      14 (20) '2.0'\n+2DB0A Extract OS            00 (0) 'MS-DOS'\n+2DB0B General Purpose Flag  0000 (0)\n+2DB0D Compression Method    0000 (0) 'Stored'\n+2DB0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DB13 CRC                   00000000 (0)\n+2DB17 Compressed Size       00000000 (0)\n+2DB1B Uncompressed Size     00000000 (0)\n+2DB1F Filename Length       000F (15)\n+2DB21 Extra Length          0009 (9)\n+2DB23 Comment Length        0000 (0)\n+2DB25 Disk Start            0000 (0)\n+2DB27 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DB29 Ext File Attributes   00000000 (0)\n+2DB2D Local Header Offset   00003232 (12850)\n+2DB31 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DB31: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DB40 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DB42   Length              0005 (5)\n+2DB44   Flags               01 (1) 'Modification'\n+2DB45   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DB49 CENTRAL HEADER #7     02014B50 (33639248)\n+2DB4D Created Zip Spec      14 (20) '2.0'\n+2DB4E Created OS            00 (0) 'MS-DOS'\n+2DB4F Extract Zip Spec      14 (20) '2.0'\n+2DB50 Extract OS            00 (0) 'MS-DOS'\n+2DB51 General Purpose Flag  0000 (0)\n+2DB53 Compression Method    0000 (0) 'Stored'\n+2DB55 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DB59 CRC                   00000000 (0)\n+2DB5D Compressed Size       00000000 (0)\n+2DB61 Uncompressed Size     00000000 (0)\n+2DB65 Filename Length       0018 (24)\n+2DB67 Extra Length          0009 (9)\n+2DB69 Comment Length        0000 (0)\n+2DB6B Disk Start            0000 (0)\n+2DB6D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DB6F Ext File Attributes   00000000 (0)\n+2DB73 Local Header Offset   00003268 (12904)\n+2DB77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DB77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DB8F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DB91   Length              0005 (5)\n+2DB93   Flags               01 (1) 'Modification'\n+2DB94   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DB98 CENTRAL HEADER #8     02014B50 (33639248)\n+2DB9C Created Zip Spec      14 (20) '2.0'\n+2DB9D Created OS            00 (0) 'MS-DOS'\n+2DB9E Extract Zip Spec      14 (20) '2.0'\n+2DB9F Extract OS            00 (0) 'MS-DOS'\n+2DBA0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2DBA2 Compression Method    0000 (0) 'Stored'\n+2DBA4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DBA8 CRC                   6A2B9F74 (1781243764)\n+2DBAC Compressed Size       000002B7 (695)\n+2DBB0 Uncompressed Size     000002B7 (695)\n+2DBB4 Filename Length       0065 (101)\n+2DBB6 Extra Length          0009 (9)\n+2DBB8 Comment Length        0000 (0)\n+2DBBA Disk Start            0000 (0)\n+2DBBC Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DBBE Ext File Attributes   00000000 (0)\n+2DBC2 Local Header Offset   000032A7 (12967)\n+2DBC6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DBC6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DC2B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DC2D   Length              0005 (5)\n+2DC2F   Flags               01 (1) 'Modification'\n+2DC30   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DC34 CENTRAL HEADER #9     02014B50 (33639248)\n+2DC38 Created Zip Spec      14 (20) '2.0'\n+2DC39 Created OS            00 (0) 'MS-DOS'\n+2DC3A Extract Zip Spec      14 (20) '2.0'\n+2DC3B Extract OS            00 (0) 'MS-DOS'\n+2DC3C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2DC3E Compression Method    0000 (0) 'Stored'\n+2DC40 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DC44 CRC                   64601D37 (1684020535)\n+2DC48 Compressed Size       0000036E (878)\n+2DC4C Uncompressed Size     0000036E (878)\n+2DC50 Filename Length       006E (110)\n+2DC52 Extra Length          0009 (9)\n+2DC54 Comment Length        0000 (0)\n+2DC56 Disk Start            0000 (0)\n+2DC58 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DC5A Ext File Attributes   00000000 (0)\n+2DC5E Local Header Offset   000035FA (13818)\n+2DC62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DC62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DCD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DCD2   Length              0005 (5)\n+2DCD4   Flags               01 (1) 'Modification'\n+2DCD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DCD9 CENTRAL HEADER #10    02014B50 (33639248)\n+2DCDD Created Zip Spec      14 (20) '2.0'\n+2DCDE Created OS            00 (0) 'MS-DOS'\n+2DCDF Extract Zip Spec      14 (20) '2.0'\n+2DCE0 Extract OS            00 (0) 'MS-DOS'\n+2DCE1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2DCE3 Compression Method    0000 (0) 'Stored'\n+2DCE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DCE9 CRC                   4EAEA219 (1320067609)\n+2DCED Compressed Size       0000013C (316)\n+2DCF1 Uncompressed Size     0000013C (316)\n+2DCF5 Filename Length       0068 (104)\n+2DCF7 Extra Length          0009 (9)\n+2DCF9 Comment Length        0000 (0)\n+2DCFB Disk Start            0000 (0)\n+2DCFD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DCFF Ext File Attributes   00000000 (0)\n+2DD03 Local Header Offset   00003A0D (14861)\n+2DD07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DD07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DD6F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DD71   Length              0005 (5)\n+2DD73   Flags               01 (1) 'Modification'\n+2DD74   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DD78 CENTRAL HEADER #11    02014B50 (33639248)\n+2DD7C Created Zip Spec      14 (20) '2.0'\n+2DD7D Created OS            00 (0) 'MS-DOS'\n+2DD7E Extract Zip Spec      14 (20) '2.0'\n+2DD7F Extract OS            00 (0) 'MS-DOS'\n+2DD80 General Purpose Flag  0000 (0)\n+2DD82 Compression Method    0000 (0) 'Stored'\n+2DD84 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DD88 CRC                   00000000 (0)\n+2DD8C Compressed Size       00000000 (0)\n+2DD90 Uncompressed Size     00000000 (0)\n+2DD94 Filename Length       000F (15)\n+2DD96 Extra Length          0009 (9)\n+2DD98 Comment Length        0000 (0)\n+2DD9A Disk Start            0000 (0)\n+2DD9C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DD9E Ext File Attributes   00000000 (0)\n+2DDA2 Local Header Offset   00003BE8 (15336)\n+2DDA6 Filename              'XXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DDA6: Filename 'XXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DDB5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DDB7   Length              0005 (5)\n+2DDB9   Flags               01 (1) 'Modification'\n+2DDBA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DDBE CENTRAL HEADER #12    02014B50 (33639248)\n+2DDC2 Created Zip Spec      14 (20) '2.0'\n+2DDC3 Created OS            00 (0) 'MS-DOS'\n+2DDC4 Extract Zip Spec      14 (20) '2.0'\n+2DDC5 Extract OS            00 (0) 'MS-DOS'\n+2DDC6 General Purpose Flag  0000 (0)\n+2DDC8 Compression Method    0000 (0) 'Stored'\n+2DDCA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DDCE CRC                   00000000 (0)\n+2DDD2 Compressed Size       00000000 (0)\n+2DDD6 Uncompressed Size     00000000 (0)\n+2DDDA Filename Length       0020 (32)\n+2DDDC Extra Length          0009 (9)\n+2DDDE Comment Length        0000 (0)\n+2DDE0 Disk Start            0000 (0)\n+2DDE2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DDE4 Ext File Attributes   00000000 (0)\n+2DDE8 Local Header Offset   00003C1E (15390)\n+2DDEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DDEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DE0C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DE0E   Length              0005 (5)\n+2DE10   Flags               01 (1) 'Modification'\n+2DE11   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DE15 CENTRAL HEADER #13    02014B50 (33639248)\n+2DE19 Created Zip Spec      14 (20) '2.0'\n+2DE1A Created OS            00 (0) 'MS-DOS'\n+2DE1B Extract Zip Spec      14 (20) '2.0'\n+2DE1C Extract OS            00 (0) 'MS-DOS'\n+2DE1D General Purpose Flag  0000 (0)\n+2DE1F Compression Method    0000 (0) 'Stored'\n+2DE21 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DE25 CRC                   00000000 (0)\n+2DE29 Compressed Size       00000000 (0)\n+2DE2D Uncompressed Size     00000000 (0)\n+2DE31 Filename Length       0039 (57)\n+2DE33 Extra Length          0009 (9)\n+2DE35 Comment Length        0000 (0)\n+2DE37 Disk Start            0000 (0)\n+2DE39 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DE3B Ext File Attributes   00000000 (0)\n+2DE3F Local Header Offset   00003C65 (15461)\n+2DE43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DE43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DE7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DE7E   Length              0005 (5)\n+2DE80   Flags               01 (1) 'Modification'\n+2DE81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DE85 CENTRAL HEADER #14    02014B50 (33639248)\n+2DE89 Created Zip Spec      14 (20) '2.0'\n+2DE8A Created OS            00 (0) 'MS-DOS'\n+2DE8B Extract Zip Spec      14 (20) '2.0'\n+2DE8C Extract OS            00 (0) 'MS-DOS'\n+2DE8D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2DE8F Compression Method    0000 (0) 'Stored'\n+2DE91 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DE95 CRC                   00000000 (0)\n+2DE99 Compressed Size       00000000 (0)\n+2DE9D Uncompressed Size     00000000 (0)\n+2DEA1 Filename Length       0047 (71)\n+2DEA3 Extra Length          0009 (9)\n+2DEA5 Comment Length        0000 (0)\n+2DEA7 Disk Start            0000 (0)\n+2DEA9 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DEAB Ext File Attributes   00000000 (0)\n+2DEAF Local Header Offset   00003CC5 (15557)\n+2DEB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DEB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DEFA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DEFC   Length              0005 (5)\n+2DEFE   Flags               01 (1) 'Modification'\n+2DEFF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DF03 CENTRAL HEADER #15    02014B50 (33639248)\n+2DF07 Created Zip Spec      14 (20) '2.0'\n+2DF08 Created OS            00 (0) 'MS-DOS'\n+2DF09 Extract Zip Spec      14 (20) '2.0'\n+2DF0A Extract OS            00 (0) 'MS-DOS'\n+2DF0B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2DF0D Compression Method    0000 (0) 'Stored'\n+2DF0F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DF13 CRC                   72E0714C (1927311692)\n+2DF17 Compressed Size       00001712 (5906)\n+2DF1B Uncompressed Size     00001712 (5906)\n+2DF1F Filename Length       0040 (64)\n+2DF21 Extra Length          0009 (9)\n+2DF23 Comment Length        0000 (0)\n+2DF25 Disk Start            0000 (0)\n+2DF27 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DF29 Ext File Attributes   00000000 (0)\n+2DF2D Local Header Offset   00003D43 (15683)\n+2DF31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DF31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DF71 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DF73   Length              0005 (5)\n+2DF75   Flags               01 (1) 'Modification'\n+2DF76   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DF7A CENTRAL HEADER #16    02014B50 (33639248)\n+2DF7E Created Zip Spec      14 (20) '2.0'\n+2DF7F Created OS            00 (0) 'MS-DOS'\n+2DF80 Extract Zip Spec      14 (20) '2.0'\n+2DF81 Extract OS            00 (0) 'MS-DOS'\n+2DF82 General Purpose Flag  0000 (0)\n+2DF84 Compression Method    0000 (0) 'Stored'\n+2DF86 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DF8A CRC                   00000000 (0)\n+2DF8E Compressed Size       00000000 (0)\n+2DF92 Uncompressed Size     00000000 (0)\n+2DF96 Filename Length       0012 (18)\n+2DF98 Extra Length          0009 (9)\n+2DF9A Comment Length        0000 (0)\n+2DF9C Disk Start            0000 (0)\n+2DF9E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DFA0 Ext File Attributes   00000000 (0)\n+2DFA4 Local Header Offset   000054CC (21708)\n+2DFA8 Filename              'XXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DFA8: Filename 'XXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2DFBA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2DFBC   Length              0005 (5)\n+2DFBE   Flags               01 (1) 'Modification'\n+2DFBF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2DFC3 CENTRAL HEADER #17    02014B50 (33639248)\n+2DFC7 Created Zip Spec      14 (20) '2.0'\n+2DFC8 Created OS            00 (0) 'MS-DOS'\n+2DFC9 Extract Zip Spec      14 (20) '2.0'\n+2DFCA Extract OS            00 (0) 'MS-DOS'\n+2DFCB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2DFCD Compression Method    0000 (0) 'Stored'\n+2DFCF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2DFD3 CRC                   258A92FD (629838589)\n+2DFD7 Compressed Size       000000BB (187)\n+2DFDB Uncompressed Size     000000BB (187)\n+2DFDF Filename Length       0037 (55)\n+2DFE1 Extra Length          0009 (9)\n+2DFE3 Comment Length        0000 (0)\n+2DFE5 Disk Start            0000 (0)\n+2DFE7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2DFE9 Ext File Attributes   00000000 (0)\n+2DFED Local Header Offset   00005505 (21765)\n+2DFF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2DFF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E028 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E02A   Length              0005 (5)\n+2E02C   Flags               01 (1) 'Modification'\n+2E02D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E031 CENTRAL HEADER #18    02014B50 (33639248)\n+2E035 Created Zip Spec      14 (20) '2.0'\n+2E036 Created OS            00 (0) 'MS-DOS'\n+2E037 Extract Zip Spec      14 (20) '2.0'\n+2E038 Extract OS            00 (0) 'MS-DOS'\n+2E039 General Purpose Flag  0000 (0)\n+2E03B Compression Method    0000 (0) 'Stored'\n+2E03D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E041 CRC                   00000000 (0)\n+2E045 Compressed Size       00000000 (0)\n+2E049 Uncompressed Size     00000000 (0)\n+2E04D Filename Length       0004 (4)\n+2E04F Extra Length          0009 (9)\n+2E051 Comment Length        0000 (0)\n+2E053 Disk Start            0000 (0)\n+2E055 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E057 Ext File Attributes   00000000 (0)\n+2E05B Local Header Offset   0000562E (22062)\n+2E05F Filename              'XXXX'\n+#\n+# WARNING: Offset 0x2E05F: Filename 'XXXX'\n+#          Zero length filename\n+#\n+2E063 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E065   Length              0005 (5)\n+2E067   Flags               01 (1) 'Modification'\n+2E068   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E06C CENTRAL HEADER #19    02014B50 (33639248)\n+2E070 Created Zip Spec      14 (20) '2.0'\n+2E071 Created OS            00 (0) 'MS-DOS'\n+2E072 Extract Zip Spec      14 (20) '2.0'\n+2E073 Extract OS            00 (0) 'MS-DOS'\n+2E074 General Purpose Flag  0000 (0)\n+2E076 Compression Method    0000 (0) 'Stored'\n+2E078 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E07C CRC                   00000000 (0)\n+2E080 Compressed Size       00000000 (0)\n+2E084 Uncompressed Size     00000000 (0)\n+2E088 Filename Length       000B (11)\n+2E08A Extra Length          0009 (9)\n+2E08C Comment Length        0000 (0)\n+2E08E Disk Start            0000 (0)\n+2E090 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E092 Ext File Attributes   00000000 (0)\n+2E096 Local Header Offset   00005659 (22105)\n+2E09A Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E09A: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E0A5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E0A7   Length              0005 (5)\n+2E0A9   Flags               01 (1) 'Modification'\n+2E0AA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E0AE CENTRAL HEADER #20    02014B50 (33639248)\n+2E0B2 Created Zip Spec      14 (20) '2.0'\n+2E0B3 Created OS            00 (0) 'MS-DOS'\n+2E0B4 Extract Zip Spec      14 (20) '2.0'\n+2E0B5 Extract OS            00 (0) 'MS-DOS'\n+2E0B6 General Purpose Flag  0000 (0)\n+2E0B8 Compression Method    0000 (0) 'Stored'\n+2E0BA Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E0BE CRC                   00000000 (0)\n+2E0C2 Compressed Size       00000000 (0)\n+2E0C6 Uncompressed Size     00000000 (0)\n+2E0CA Filename Length       0011 (17)\n+2E0CC Extra Length          0009 (9)\n+2E0CE Comment Length        0000 (0)\n+2E0D0 Disk Start            0000 (0)\n+2E0D2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E0D4 Ext File Attributes   00000000 (0)\n+2E0D8 Local Header Offset   0000568B (22155)\n+2E0DC Filename              'XXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E0DC: Filename 'XXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E0ED Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E0EF   Length              0005 (5)\n+2E0F1   Flags               01 (1) 'Modification'\n+2E0F2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E0F6 CENTRAL HEADER #21    02014B50 (33639248)\n+2E0FA Created Zip Spec      14 (20) '2.0'\n+2E0FB Created OS            00 (0) 'MS-DOS'\n+2E0FC Extract Zip Spec      14 (20) '2.0'\n+2E0FD Extract OS            00 (0) 'MS-DOS'\n+2E0FE General Purpose Flag  0000 (0)\n+2E100 Compression Method    0000 (0) 'Stored'\n+2E102 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E106 CRC                   00000000 (0)\n+2E10A Compressed Size       00000000 (0)\n+2E10E Uncompressed Size     00000000 (0)\n+2E112 Filename Length       001A (26)\n+2E114 Extra Length          0009 (9)\n+2E116 Comment Length        0000 (0)\n+2E118 Disk Start            0000 (0)\n+2E11A Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E11C Ext File Attributes   00000000 (0)\n+2E120 Local Header Offset   000056C3 (22211)\n+2E124 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E124: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E13E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E140   Length              0005 (5)\n+2E142   Flags               01 (1) 'Modification'\n+2E143   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E147 CENTRAL HEADER #22    02014B50 (33639248)\n+2E14B Created Zip Spec      14 (20) '2.0'\n+2E14C Created OS            00 (0) 'MS-DOS'\n+2E14D Extract Zip Spec      14 (20) '2.0'\n+2E14E Extract OS            00 (0) 'MS-DOS'\n+2E14F General Purpose Flag  0000 (0)\n+2E151 Compression Method    0000 (0) 'Stored'\n+2E153 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E157 CRC                   00000000 (0)\n+2E15B Compressed Size       00000000 (0)\n+2E15F Uncompressed Size     00000000 (0)\n+2E163 Filename Length       0025 (37)\n+2E165 Extra Length          0009 (9)\n+2E167 Comment Length        0000 (0)\n+2E169 Disk Start            0000 (0)\n+2E16B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E16D Ext File Attributes   00000000 (0)\n+2E171 Local Header Offset   00005704 (22276)\n+2E175 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E175: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E19A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E19C   Length              0005 (5)\n+2E19E   Flags               01 (1) 'Modification'\n+2E19F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E1A3 CENTRAL HEADER #23    02014B50 (33639248)\n+2E1A7 Created Zip Spec      14 (20) '2.0'\n+2E1A8 Created OS            00 (0) 'MS-DOS'\n+2E1A9 Extract Zip Spec      14 (20) '2.0'\n+2E1AA Extract OS            00 (0) 'MS-DOS'\n+2E1AB General Purpose Flag  0000 (0)\n+2E1AD Compression Method    0000 (0) 'Stored'\n+2E1AF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E1B3 CRC                   00000000 (0)\n+2E1B7 Compressed Size       00000000 (0)\n+2E1BB Uncompressed Size     00000000 (0)\n+2E1BF Filename Length       0030 (48)\n+2E1C1 Extra Length          0009 (9)\n+2E1C3 Comment Length        0000 (0)\n+2E1C5 Disk Start            0000 (0)\n+2E1C7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E1C9 Ext File Attributes   00000000 (0)\n+2E1CD Local Header Offset   00005750 (22352)\n+2E1D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E1D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E201 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E203   Length              0005 (5)\n+2E205   Flags               01 (1) 'Modification'\n+2E206   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E20A CENTRAL HEADER #24    02014B50 (33639248)\n+2E20E Created Zip Spec      14 (20) '2.0'\n+2E20F Created OS            00 (0) 'MS-DOS'\n+2E210 Extract Zip Spec      14 (20) '2.0'\n+2E211 Extract OS            00 (0) 'MS-DOS'\n+2E212 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E214 Compression Method    0000 (0) 'Stored'\n+2E216 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E21A CRC                   EDE26CAC (3991039148)\n+2E21E Compressed Size       00000FF2 (4082)\n+2E222 Uncompressed Size     00000FF2 (4082)\n+2E226 Filename Length       0057 (87)\n+2E228 Extra Length          0009 (9)\n+2E22A Comment Length        0000 (0)\n+2E22C Disk Start            0000 (0)\n+2E22E Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E230 Ext File Attributes   00000000 (0)\n+2E234 Local Header Offset   000057A7 (22439)\n+2E238 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E238: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E28F Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E291   Length              0005 (5)\n+2E293   Flags               01 (1) 'Modification'\n+2E294   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E298 CENTRAL HEADER #25    02014B50 (33639248)\n+2E29C Created Zip Spec      14 (20) '2.0'\n+2E29D Created OS            00 (0) 'MS-DOS'\n+2E29E Extract Zip Spec      14 (20) '2.0'\n+2E29F Extract OS            00 (0) 'MS-DOS'\n+2E2A0 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E2A2 Compression Method    0000 (0) 'Stored'\n+2E2A4 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E2A8 CRC                   28829ABF (679647935)\n+2E2AC Compressed Size       00000EFA (3834)\n+2E2B0 Uncompressed Size     00000EFA (3834)\n+2E2B4 Filename Length       004D (77)\n+2E2B6 Extra Length          0009 (9)\n+2E2B8 Comment Length        0000 (0)\n+2E2BA Disk Start            0000 (0)\n+2E2BC Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E2BE Ext File Attributes   00000000 (0)\n+2E2C2 Local Header Offset   00006827 (26663)\n+2E2C6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E2C6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E313 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E315   Length              0005 (5)\n+2E317   Flags               01 (1) 'Modification'\n+2E318   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E31C CENTRAL HEADER #26    02014B50 (33639248)\n+2E320 Created Zip Spec      14 (20) '2.0'\n+2E321 Created OS            00 (0) 'MS-DOS'\n+2E322 Extract Zip Spec      14 (20) '2.0'\n+2E323 Extract OS            00 (0) 'MS-DOS'\n+2E324 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E326 Compression Method    0000 (0) 'Stored'\n+2E328 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E32C CRC                   E1E2CA9A (3789736602)\n+2E330 Compressed Size       000009EB (2539)\n+2E334 Uncompressed Size     000009EB (2539)\n+2E338 Filename Length       0061 (97)\n+2E33A Extra Length          0009 (9)\n+2E33C Comment Length        0000 (0)\n+2E33E Disk Start            0000 (0)\n+2E340 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E342 Ext File Attributes   00000000 (0)\n+2E346 Local Header Offset   000077A5 (30629)\n+2E34A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E34A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E3AB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E3AD   Length              0005 (5)\n+2E3AF   Flags               01 (1) 'Modification'\n+2E3B0   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E3B4 CENTRAL HEADER #27    02014B50 (33639248)\n+2E3B8 Created Zip Spec      14 (20) '2.0'\n+2E3B9 Created OS            00 (0) 'MS-DOS'\n+2E3BA Extract Zip Spec      14 (20) '2.0'\n+2E3BB Extract OS            00 (0) 'MS-DOS'\n+2E3BC General Purpose Flag  0000 (0)\n+2E3BE Compression Method    0000 (0) 'Stored'\n+2E3C0 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E3C4 CRC                   00000000 (0)\n+2E3C8 Compressed Size       00000000 (0)\n+2E3CC Uncompressed Size     00000000 (0)\n+2E3D0 Filename Length       0038 (56)\n+2E3D2 Extra Length          0009 (9)\n+2E3D4 Comment Length        0000 (0)\n+2E3D6 Disk Start            0000 (0)\n+2E3D8 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E3DA Ext File Attributes   00000000 (0)\n+2E3DE Local Header Offset   00008228 (33320)\n+2E3E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E3E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E41A Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E41C   Length              0005 (5)\n+2E41E   Flags               01 (1) 'Modification'\n+2E41F   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E423 CENTRAL HEADER #28    02014B50 (33639248)\n+2E427 Created Zip Spec      14 (20) '2.0'\n+2E428 Created OS            00 (0) 'MS-DOS'\n+2E429 Extract Zip Spec      14 (20) '2.0'\n+2E42A Extract OS            00 (0) 'MS-DOS'\n+2E42B General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E42D Compression Method    0000 (0) 'Stored'\n+2E42F Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E433 CRC                   31BAA9F2 (834316786)\n+2E437 Compressed Size       00000788 (1928)\n+2E43B Uncompressed Size     00000788 (1928)\n+2E43F Filename Length       0057 (87)\n+2E441 Extra Length          0009 (9)\n+2E443 Comment Length        0000 (0)\n+2E445 Disk Start            0000 (0)\n+2E447 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E449 Ext File Attributes   00000000 (0)\n+2E44D Local Header Offset   00008287 (33415)\n+2E451 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E451: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E4A8 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E4AA   Length              0005 (5)\n+2E4AC   Flags               01 (1) 'Modification'\n+2E4AD   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E4B1 CENTRAL HEADER #29    02014B50 (33639248)\n+2E4B5 Created Zip Spec      14 (20) '2.0'\n+2E4B6 Created OS            00 (0) 'MS-DOS'\n+2E4B7 Extract Zip Spec      14 (20) '2.0'\n+2E4B8 Extract OS            00 (0) 'MS-DOS'\n+2E4B9 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E4BB Compression Method    0000 (0) 'Stored'\n+2E4BD Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E4C1 CRC                   CA7A5ADF (3397016287)\n+2E4C5 Compressed Size       00000A36 (2614)\n+2E4C9 Uncompressed Size     00000A36 (2614)\n+2E4CD Filename Length       005C (92)\n+2E4CF Extra Length          0009 (9)\n+2E4D1 Comment Length        0000 (0)\n+2E4D3 Disk Start            0000 (0)\n+2E4D5 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E4D7 Ext File Attributes   00000000 (0)\n+2E4DB Local Header Offset   00008A9D (35485)\n+2E4DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E4DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E53B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E53D   Length              0005 (5)\n+2E53F   Flags               01 (1) 'Modification'\n+2E540   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E544 CENTRAL HEADER #30    02014B50 (33639248)\n+2E548 Created Zip Spec      14 (20) '2.0'\n+2E549 Created OS            00 (0) 'MS-DOS'\n+2E54A Extract Zip Spec      14 (20) '2.0'\n+2E54B Extract OS            00 (0) 'MS-DOS'\n+2E54C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E54E Compression Method    0000 (0) 'Stored'\n+2E550 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E554 CRC                   9F81DA8D (2676087437)\n+2E558 Compressed Size       000007AC (1964)\n+2E55C Uncompressed Size     000007AC (1964)\n+2E560 Filename Length       005A (90)\n+2E562 Extra Length          0009 (9)\n+2E564 Comment Length        0000 (0)\n+2E566 Disk Start            0000 (0)\n+2E568 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E56A Ext File Attributes   00000000 (0)\n+2E56E Local Header Offset   00009566 (38246)\n+2E572 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E572: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E5CC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E5CE   Length              0005 (5)\n+2E5D0   Flags               01 (1) 'Modification'\n+2E5D1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E5D5 CENTRAL HEADER #31    02014B50 (33639248)\n+2E5D9 Created Zip Spec      14 (20) '2.0'\n+2E5DA Created OS            00 (0) 'MS-DOS'\n+2E5DB Extract Zip Spec      14 (20) '2.0'\n+2E5DC Extract OS            00 (0) 'MS-DOS'\n+2E5DD General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E5DF Compression Method    0000 (0) 'Stored'\n+2E5E1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E5E5 CRC                   F865F474 (4167431284)\n+2E5E9 Compressed Size       00000884 (2180)\n+2E5ED Uncompressed Size     00000884 (2180)\n+2E5F1 Filename Length       0056 (86)\n+2E5F3 Extra Length          0009 (9)\n+2E5F5 Comment Length        0000 (0)\n+2E5F7 Disk Start            0000 (0)\n+2E5F9 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E5FB Ext File Attributes   00000000 (0)\n+2E5FF Local Header Offset   00009DA3 (40355)\n+2E603 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E603: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E659 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E65B   Length              0005 (5)\n+2E65D   Flags               01 (1) 'Modification'\n+2E65E   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E662 CENTRAL HEADER #32    02014B50 (33639248)\n+2E666 Created Zip Spec      14 (20) '2.0'\n+2E667 Created OS            00 (0) 'MS-DOS'\n+2E668 Extract Zip Spec      14 (20) '2.0'\n+2E669 Extract OS            00 (0) 'MS-DOS'\n+2E66A General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E66C Compression Method    0000 (0) 'Stored'\n+2E66E Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E672 CRC                   3B8200F2 (998375666)\n+2E676 Compressed Size       00000A26 (2598)\n+2E67A Uncompressed Size     00000A26 (2598)\n+2E67E Filename Length       0059 (89)\n+2E680 Extra Length          0009 (9)\n+2E682 Comment Length        0000 (0)\n+2E684 Disk Start            0000 (0)\n+2E686 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E688 Ext File Attributes   00000000 (0)\n+2E68C Local Header Offset   0000A6B4 (42676)\n+2E690 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E690: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E6E9 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E6EB   Length              0005 (5)\n+2E6ED   Flags               01 (1) 'Modification'\n+2E6EE   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E6F2 CENTRAL HEADER #33    02014B50 (33639248)\n+2E6F6 Created Zip Spec      14 (20) '2.0'\n+2E6F7 Created OS            00 (0) 'MS-DOS'\n+2E6F8 Extract Zip Spec      14 (20) '2.0'\n+2E6F9 Extract OS            00 (0) 'MS-DOS'\n+2E6FA General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E6FC Compression Method    0000 (0) 'Stored'\n+2E6FE Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E702 CRC                   D0E79628 (3504838184)\n+2E706 Compressed Size       00000A00 (2560)\n+2E70A Uncompressed Size     00000A00 (2560)\n+2E70E Filename Length       0055 (85)\n+2E710 Extra Length          0009 (9)\n+2E712 Comment Length        0000 (0)\n+2E714 Disk Start            0000 (0)\n+2E716 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E718 Ext File Attributes   00000000 (0)\n+2E71C Local Header Offset   0000B16A (45418)\n+2E720 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E720: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E775 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E777   Length              0005 (5)\n+2E779   Flags               01 (1) 'Modification'\n+2E77A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E77E CENTRAL HEADER #34    02014B50 (33639248)\n+2E782 Created Zip Spec      14 (20) '2.0'\n+2E783 Created OS            00 (0) 'MS-DOS'\n+2E784 Extract Zip Spec      14 (20) '2.0'\n+2E785 Extract OS            00 (0) 'MS-DOS'\n+2E786 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E788 Compression Method    0000 (0) 'Stored'\n+2E78A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E78E CRC                   83EF7907 (2213509383)\n+2E792 Compressed Size       00000996 (2454)\n+2E796 Uncompressed Size     00000996 (2454)\n+2E79A Filename Length       0054 (84)\n+2E79C Extra Length          0009 (9)\n+2E79E Comment Length        0000 (0)\n+2E7A0 Disk Start            0000 (0)\n+2E7A2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E7A4 Ext File Attributes   00000000 (0)\n+2E7A8 Local Header Offset   0000BBF6 (48118)\n+2E7AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E7AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E800 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E802   Length              0005 (5)\n+2E804   Flags               01 (1) 'Modification'\n+2E805   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E809 CENTRAL HEADER #35    02014B50 (33639248)\n+2E80D Created Zip Spec      14 (20) '2.0'\n+2E80E Created OS            00 (0) 'MS-DOS'\n+2E80F Extract Zip Spec      14 (20) '2.0'\n+2E810 Extract OS            00 (0) 'MS-DOS'\n+2E811 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E813 Compression Method    0000 (0) 'Stored'\n+2E815 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E819 CRC                   DC4AAC43 (3695881283)\n+2E81D Compressed Size       0000070A (1802)\n+2E821 Uncompressed Size     0000070A (1802)\n+2E825 Filename Length       005B (91)\n+2E827 Extra Length          0009 (9)\n+2E829 Comment Length        0000 (0)\n+2E82B Disk Start            0000 (0)\n+2E82D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E82F Ext File Attributes   00000000 (0)\n+2E833 Local Header Offset   0000C617 (50711)\n+2E837 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E837: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E892 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E894   Length              0005 (5)\n+2E896   Flags               01 (1) 'Modification'\n+2E897   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E89B CENTRAL HEADER #36    02014B50 (33639248)\n+2E89F Created Zip Spec      14 (20) '2.0'\n+2E8A0 Created OS            00 (0) 'MS-DOS'\n+2E8A1 Extract Zip Spec      14 (20) '2.0'\n+2E8A2 Extract OS            00 (0) 'MS-DOS'\n+2E8A3 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E8A5 Compression Method    0000 (0) 'Stored'\n+2E8A7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E8AB CRC                   9D1BE974 (2635852148)\n+2E8AF Compressed Size       00000A0D (2573)\n+2E8B3 Uncompressed Size     00000A0D (2573)\n+2E8B7 Filename Length       0055 (85)\n+2E8B9 Extra Length          0009 (9)\n+2E8BB Comment Length        0000 (0)\n+2E8BD Disk Start            0000 (0)\n+2E8BF Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E8C1 Ext File Attributes   00000000 (0)\n+2E8C5 Local Header Offset   0000CDB3 (52659)\n+2E8C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E8C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E91E Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E920   Length              0005 (5)\n+2E922   Flags               01 (1) 'Modification'\n+2E923   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E927 CENTRAL HEADER #37    02014B50 (33639248)\n+2E92B Created Zip Spec      14 (20) '2.0'\n+2E92C Created OS            00 (0) 'MS-DOS'\n+2E92D Extract Zip Spec      14 (20) '2.0'\n+2E92E Extract OS            00 (0) 'MS-DOS'\n+2E92F General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E931 Compression Method    0000 (0) 'Stored'\n+2E933 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E937 CRC                   F3B9E657 (4089046615)\n+2E93B Compressed Size       00000724 (1828)\n+2E93F Uncompressed Size     00000724 (1828)\n+2E943 Filename Length       0058 (88)\n+2E945 Extra Length          0009 (9)\n+2E947 Comment Length        0000 (0)\n+2E949 Disk Start            0000 (0)\n+2E94B Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E94D Ext File Attributes   00000000 (0)\n+2E951 Local Header Offset   0000D84C (55372)\n+2E955 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E955: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2E9AD Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2E9AF   Length              0005 (5)\n+2E9B1   Flags               01 (1) 'Modification'\n+2E9B2   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2E9B6 CENTRAL HEADER #38    02014B50 (33639248)\n+2E9BA Created Zip Spec      14 (20) '2.0'\n+2E9BB Created OS            00 (0) 'MS-DOS'\n+2E9BC Extract Zip Spec      14 (20) '2.0'\n+2E9BD Extract OS            00 (0) 'MS-DOS'\n+2E9BE General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2E9C0 Compression Method    0000 (0) 'Stored'\n+2E9C2 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2E9C6 CRC                   5F1744C1 (1595360449)\n+2E9CA Compressed Size       00000F5C (3932)\n+2E9CE Uncompressed Size     00000F5C (3932)\n+2E9D2 Filename Length       0052 (82)\n+2E9D4 Extra Length          0009 (9)\n+2E9D6 Comment Length        0000 (0)\n+2E9D8 Disk Start            0000 (0)\n+2E9DA Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2E9DC Ext File Attributes   00000000 (0)\n+2E9E0 Local Header Offset   0000DFFF (57343)\n+2E9E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2E9E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2EA36 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2EA38   Length              0005 (5)\n+2EA3A   Flags               01 (1) 'Modification'\n+2EA3B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2EA3F CENTRAL HEADER #39    02014B50 (33639248)\n+2EA43 Created Zip Spec      14 (20) '2.0'\n+2EA44 Created OS            00 (0) 'MS-DOS'\n+2EA45 Extract Zip Spec      14 (20) '2.0'\n+2EA46 Extract OS            00 (0) 'MS-DOS'\n+2EA47 General Purpose Flag  0000 (0)\n+2EA49 Compression Method    0000 (0) 'Stored'\n+2EA4B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2EA4F CRC                   00000000 (0)\n+2EA53 Compressed Size       00000000 (0)\n+2EA57 Uncompressed Size     00000000 (0)\n+2EA5B Filename Length       0035 (53)\n+2EA5D Extra Length          0009 (9)\n+2EA5F Comment Length        0000 (0)\n+2EA61 Disk Start            0000 (0)\n+2EA63 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2EA65 Ext File Attributes   00000000 (0)\n+2EA69 Local Header Offset   0000EFE4 (61412)\n+2EA6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EA6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2EAA2 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2EAA4   Length              0005 (5)\n+2EAA6   Flags               01 (1) 'Modification'\n+2EAA7   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2EAAB CENTRAL HEADER #40    02014B50 (33639248)\n+2EAAF Created Zip Spec      14 (20) '2.0'\n+2EAB0 Created OS            00 (0) 'MS-DOS'\n+2EAB1 Extract Zip Spec      14 (20) '2.0'\n+2EAB2 Extract OS            00 (0) 'MS-DOS'\n+2EAB3 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2EAB5 Compression Method    0000 (0) 'Stored'\n+2EAB7 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2EABB CRC                   88B249EC (2293385708)\n+2EABF Compressed Size       00000A4B (2635)\n+2EAC3 Uncompressed Size     00000A4B (2635)\n+2EAC7 Filename Length       0063 (99)\n+2EAC9 Extra Length          0009 (9)\n+2EACB Comment Length        0000 (0)\n+2EACD Disk Start            0000 (0)\n+2EACF Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2EAD1 Ext File Attributes   00000000 (0)\n+2EAD5 Local Header Offset   0000F040 (61504)\n+2EAD9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EAD9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2EB3C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2EB3E   Length              0005 (5)\n+2EB40   Flags               01 (1) 'Modification'\n+2EB41   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2EB45 CENTRAL HEADER #41    02014B50 (33639248)\n+2EB49 Created Zip Spec      14 (20) '2.0'\n+2EB4A Created OS            00 (0) 'MS-DOS'\n+2EB4B Extract Zip Spec      14 (20) '2.0'\n+2EB4C Extract OS            00 (0) 'MS-DOS'\n+2EB4D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2EB4F Compression Method    0000 (0) 'Stored'\n+2EB51 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2EB55 CRC                   3BC8480C (1002981388)\n+2EB59 Compressed Size       00003662 (13922)\n+2EB5D Uncompressed Size     00003662 (13922)\n+2EB61 Filename Length       005D (93)\n+2EB63 Extra Length          0009 (9)\n+2EB65 Comment Length        0000 (0)\n+2EB67 Disk Start            0000 (0)\n+2EB69 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2EB6B Ext File Attributes   00000000 (0)\n+2EB6F Local Header Offset   0000FB25 (64293)\n+2EB73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EB73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2EBD0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2EBD2   Length              0005 (5)\n+2EBD4   Flags               01 (1) 'Modification'\n+2EBD5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2EBD9 CENTRAL HEADER #42    02014B50 (33639248)\n+2EBDD Created Zip Spec      14 (20) '2.0'\n+2EBDE Created OS            00 (0) 'MS-DOS'\n+2EBDF Extract Zip Spec      14 (20) '2.0'\n+2EBE0 Extract OS            00 (0) 'MS-DOS'\n+2EBE1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2EBE3 Compression Method    0000 (0) 'Stored'\n+2EBE5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2EBE9 CRC                   EDDF253D (3990824253)\n+2EBED Compressed Size       000009CB (2507)\n+2EBF1 Uncompressed Size     000009CB (2507)\n+2EBF5 Filename Length       005B (91)\n+2EBF7 Extra Length          0009 (9)\n+2EBF9 Comment Length        0000 (0)\n+2EBFB Disk Start            0000 (0)\n+2EBFD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2EBFF Ext File Attributes   00000000 (0)\n+2EC03 Local Header Offset   0001321B (78363)\n+2EC07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EC07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2EC62 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2EC64   Length              0005 (5)\n+2EC66   Flags               01 (1) 'Modification'\n+2EC67   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2EC6B CENTRAL HEADER #43    02014B50 (33639248)\n+2EC6F Created Zip Spec      14 (20) '2.0'\n+2EC70 Created OS            00 (0) 'MS-DOS'\n+2EC71 Extract Zip Spec      14 (20) '2.0'\n+2EC72 Extract OS            00 (0) 'MS-DOS'\n+2EC73 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2EC75 Compression Method    0000 (0) 'Stored'\n+2EC77 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2EC7B CRC                   F9C2E219 (4190298649)\n+2EC7F Compressed Size       00001FF9 (8185)\n+2EC83 Uncompressed Size     00001FF9 (8185)\n+2EC87 Filename Length       005C (92)\n+2EC89 Extra Length          0009 (9)\n+2EC8B Comment Length        0000 (0)\n+2EC8D Disk Start            0000 (0)\n+2EC8F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2EC91 Ext File Attributes   00000000 (0)\n+2EC95 Local Header Offset   00013C78 (81016)\n+2EC99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EC99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2ECF5 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2ECF7   Length              0005 (5)\n+2ECF9   Flags               01 (1) 'Modification'\n+2ECFA   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2ECFE CENTRAL HEADER #44    02014B50 (33639248)\n+2ED02 Created Zip Spec      14 (20) '2.0'\n+2ED03 Created OS            00 (0) 'MS-DOS'\n+2ED04 Extract Zip Spec      14 (20) '2.0'\n+2ED05 Extract OS            00 (0) 'MS-DOS'\n+2ED06 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2ED08 Compression Method    0000 (0) 'Stored'\n+2ED0A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2ED0E CRC                   6F538150 (1867743568)\n+2ED12 Compressed Size       00000EA4 (3748)\n+2ED16 Uncompressed Size     00000EA4 (3748)\n+2ED1A Filename Length       0060 (96)\n+2ED1C Extra Length          0009 (9)\n+2ED1E Comment Length        0000 (0)\n+2ED20 Disk Start            0000 (0)\n+2ED22 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2ED24 Ext File Attributes   00000000 (0)\n+2ED28 Local Header Offset   00015D04 (89348)\n+2ED2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2ED2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2ED8C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2ED8E   Length              0005 (5)\n+2ED90   Flags               01 (1) 'Modification'\n+2ED91   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2ED95 CENTRAL HEADER #45    02014B50 (33639248)\n+2ED99 Created Zip Spec      14 (20) '2.0'\n+2ED9A Created OS            00 (0) 'MS-DOS'\n+2ED9B Extract Zip Spec      14 (20) '2.0'\n+2ED9C Extract OS            00 (0) 'MS-DOS'\n+2ED9D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2ED9F Compression Method    0000 (0) 'Stored'\n+2EDA1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2EDA5 CRC                   D6C4744E (3603199054)\n+2EDA9 Compressed Size       000008D9 (2265)\n+2EDAD Uncompressed Size     000008D9 (2265)\n+2EDB1 Filename Length       0055 (85)\n+2EDB3 Extra Length          0009 (9)\n+2EDB5 Comment Length        0000 (0)\n+2EDB7 Disk Start            0000 (0)\n+2EDB9 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2EDBB Ext File Attributes   00000000 (0)\n+2EDBF Local Header Offset   00016C3F (93247)\n+2EDC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EDC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2EE18 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2EE1A   Length              0005 (5)\n+2EE1C   Flags               01 (1) 'Modification'\n+2EE1D   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2EE21 CENTRAL HEADER #46    02014B50 (33639248)\n+2EE25 Created Zip Spec      14 (20) '2.0'\n+2EE26 Created OS            00 (0) 'MS-DOS'\n+2EE27 Extract Zip Spec      14 (20) '2.0'\n+2EE28 Extract OS            00 (0) 'MS-DOS'\n+2EE29 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2EE2B Compression Method    0000 (0) 'Stored'\n+2EE2D Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2EE31 CRC                   D59F389F (3583981727)\n+2EE35 Compressed Size       000009C3 (2499)\n+2EE39 Uncompressed Size     000009C3 (2499)\n+2EE3D Filename Length       0054 (84)\n+2EE3F Extra Length          0009 (9)\n+2EE41 Comment Length        0000 (0)\n+2EE43 Disk Start            0000 (0)\n+2EE45 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2EE47 Ext File Attributes   00000000 (0)\n+2EE4B Local Header Offset   000175A4 (95652)\n+2EE4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EE4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2EEA3 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2EEA5   Length              0005 (5)\n+2EEA7   Flags               01 (1) 'Modification'\n+2EEA8   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2EEAC CENTRAL HEADER #47    02014B50 (33639248)\n+2EEB0 Created Zip Spec      14 (20) '2.0'\n+2EEB1 Created OS            00 (0) 'MS-DOS'\n+2EEB2 Extract Zip Spec      14 (20) '2.0'\n+2EEB3 Extract OS            00 (0) 'MS-DOS'\n+2EEB4 General Purpose Flag  0000 (0)\n+2EEB6 Compression Method    0000 (0) 'Stored'\n+2EEB8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2EEBC CRC                   00000000 (0)\n+2EEC0 Compressed Size       00000000 (0)\n+2EEC4 Uncompressed Size     00000000 (0)\n+2EEC8 Filename Length       003B (59)\n+2EECA Extra Length          0009 (9)\n+2EECC Comment Length        0000 (0)\n+2EECE Disk Start            0000 (0)\n+2EED0 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2EED2 Ext File Attributes   00000000 (0)\n+2EED6 Local Header Offset   00017FF2 (98290)\n+2EEDA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EEDA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2EF15 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2EF17   Length              0005 (5)\n+2EF19   Flags               01 (1) 'Modification'\n+2EF1A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2EF1E CENTRAL HEADER #48    02014B50 (33639248)\n+2EF22 Created Zip Spec      14 (20) '2.0'\n+2EF23 Created OS            00 (0) 'MS-DOS'\n+2EF24 Extract Zip Spec      14 (20) '2.0'\n+2EF25 Extract OS            00 (0) 'MS-DOS'\n+2EF26 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2EF28 Compression Method    0000 (0) 'Stored'\n+2EF2A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2EF2E CRC                   6B2F7A85 (1798273669)\n+2EF32 Compressed Size       00000C21 (3105)\n+2EF36 Uncompressed Size     00000C21 (3105)\n+2EF3A Filename Length       005E (94)\n+2EF3C Extra Length          0009 (9)\n+2EF3E Comment Length        0000 (0)\n+2EF40 Disk Start            0000 (0)\n+2EF42 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2EF44 Ext File Attributes   00000000 (0)\n+2EF48 Local Header Offset   00018054 (98388)\n+2EF4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EF4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2EFAA Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2EFAC   Length              0005 (5)\n+2EFAE   Flags               01 (1) 'Modification'\n+2EFAF   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2EFB3 CENTRAL HEADER #49    02014B50 (33639248)\n+2EFB7 Created Zip Spec      14 (20) '2.0'\n+2EFB8 Created OS            00 (0) 'MS-DOS'\n+2EFB9 Extract Zip Spec      14 (20) '2.0'\n+2EFBA Extract OS            00 (0) 'MS-DOS'\n+2EFBB General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2EFBD Compression Method    0000 (0) 'Stored'\n+2EFBF Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2EFC3 CRC                   B2CF52EA (2999931626)\n+2EFC7 Compressed Size       0000058E (1422)\n+2EFCB Uncompressed Size     0000058E (1422)\n+2EFCF Filename Length       005B (91)\n+2EFD1 Extra Length          0009 (9)\n+2EFD3 Comment Length        0000 (0)\n+2EFD5 Disk Start            0000 (0)\n+2EFD7 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2EFD9 Ext File Attributes   00000000 (0)\n+2EFDD Local Header Offset   00018D0A (101642)\n+2EFE1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2EFE1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F03C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F03E   Length              0005 (5)\n+2F040   Flags               01 (1) 'Modification'\n+2F041   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F045 CENTRAL HEADER #50    02014B50 (33639248)\n+2F049 Created Zip Spec      14 (20) '2.0'\n+2F04A Created OS            00 (0) 'MS-DOS'\n+2F04B Extract Zip Spec      14 (20) '2.0'\n+2F04C Extract OS            00 (0) 'MS-DOS'\n+2F04D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F04F Compression Method    0000 (0) 'Stored'\n+2F051 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F055 CRC                   4E4D89CC (1313704396)\n+2F059 Compressed Size       0000097F (2431)\n+2F05D Uncompressed Size     0000097F (2431)\n+2F061 Filename Length       005D (93)\n+2F063 Extra Length          0009 (9)\n+2F065 Comment Length        0000 (0)\n+2F067 Disk Start            0000 (0)\n+2F069 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F06B Ext File Attributes   00000000 (0)\n+2F06F Local Header Offset   0001932A (103210)\n+2F073 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F073: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F0D0 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F0D2   Length              0005 (5)\n+2F0D4   Flags               01 (1) 'Modification'\n+2F0D5   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F0D9 CENTRAL HEADER #51    02014B50 (33639248)\n+2F0DD Created Zip Spec      14 (20) '2.0'\n+2F0DE Created OS            00 (0) 'MS-DOS'\n+2F0DF Extract Zip Spec      14 (20) '2.0'\n+2F0E0 Extract OS            00 (0) 'MS-DOS'\n+2F0E1 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F0E3 Compression Method    0000 (0) 'Stored'\n+2F0E5 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F0E9 CRC                   DD72B025 (3715280933)\n+2F0ED Compressed Size       000014DA (5338)\n+2F0F1 Uncompressed Size     000014DA (5338)\n+2F0F5 Filename Length       0060 (96)\n+2F0F7 Extra Length          0009 (9)\n+2F0F9 Comment Length        0000 (0)\n+2F0FB Disk Start            0000 (0)\n+2F0FD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F0FF Ext File Attributes   00000000 (0)\n+2F103 Local Header Offset   00019D3D (105789)\n+2F107 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F107: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F167 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F169   Length              0005 (5)\n+2F16B   Flags               01 (1) 'Modification'\n+2F16C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F170 CENTRAL HEADER #52    02014B50 (33639248)\n+2F174 Created Zip Spec      14 (20) '2.0'\n+2F175 Created OS            00 (0) 'MS-DOS'\n+2F176 Extract Zip Spec      14 (20) '2.0'\n+2F177 Extract OS            00 (0) 'MS-DOS'\n+2F178 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F17A Compression Method    0000 (0) 'Stored'\n+2F17C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F180 CRC                   7B71E274 (2071061108)\n+2F184 Compressed Size       00000596 (1430)\n+2F188 Uncompressed Size     00000596 (1430)\n+2F18C Filename Length       005D (93)\n+2F18E Extra Length          0009 (9)\n+2F190 Comment Length        0000 (0)\n+2F192 Disk Start            0000 (0)\n+2F194 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F196 Ext File Attributes   00000000 (0)\n+2F19A Local Header Offset   0001B2AE (111278)\n+2F19E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F19E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F1FB Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F1FD   Length              0005 (5)\n+2F1FF   Flags               01 (1) 'Modification'\n+2F200   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F204 CENTRAL HEADER #53    02014B50 (33639248)\n+2F208 Created Zip Spec      14 (20) '2.0'\n+2F209 Created OS            00 (0) 'MS-DOS'\n+2F20A Extract Zip Spec      14 (20) '2.0'\n+2F20B Extract OS            00 (0) 'MS-DOS'\n+2F20C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F20E Compression Method    0000 (0) 'Stored'\n+2F210 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F214 CRC                   2A9B2D50 (714812752)\n+2F218 Compressed Size       0000079F (1951)\n+2F21C Uncompressed Size     0000079F (1951)\n+2F220 Filename Length       0061 (97)\n+2F222 Extra Length          0009 (9)\n+2F224 Comment Length        0000 (0)\n+2F226 Disk Start            0000 (0)\n+2F228 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F22A Ext File Attributes   00000000 (0)\n+2F22E Local Header Offset   0001B8D8 (112856)\n+2F232 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F232: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F293 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F295   Length              0005 (5)\n+2F297   Flags               01 (1) 'Modification'\n+2F298   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F29C CENTRAL HEADER #54    02014B50 (33639248)\n+2F2A0 Created Zip Spec      14 (20) '2.0'\n+2F2A1 Created OS            00 (0) 'MS-DOS'\n+2F2A2 Extract Zip Spec      14 (20) '2.0'\n+2F2A3 Extract OS            00 (0) 'MS-DOS'\n+2F2A4 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F2A6 Compression Method    0000 (0) 'Stored'\n+2F2A8 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F2AC CRC                   7EE5B353 (2128982867)\n+2F2B0 Compressed Size       00000592 (1426)\n+2F2B4 Uncompressed Size     00000592 (1426)\n+2F2B8 Filename Length       005C (92)\n+2F2BA Extra Length          0009 (9)\n+2F2BC Comment Length        0000 (0)\n+2F2BE Disk Start            0000 (0)\n+2F2C0 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F2C2 Ext File Attributes   00000000 (0)\n+2F2C6 Local Header Offset   0001C10F (114959)\n+2F2CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F2CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F326 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F328   Length              0005 (5)\n+2F32A   Flags               01 (1) 'Modification'\n+2F32B   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F32F CENTRAL HEADER #55    02014B50 (33639248)\n+2F333 Created Zip Spec      14 (20) '2.0'\n+2F334 Created OS            00 (0) 'MS-DOS'\n+2F335 Extract Zip Spec      14 (20) '2.0'\n+2F336 Extract OS            00 (0) 'MS-DOS'\n+2F337 General Purpose Flag  0000 (0)\n+2F339 Compression Method    0000 (0) 'Stored'\n+2F33B Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F33F CRC                   00000000 (0)\n+2F343 Compressed Size       00000000 (0)\n+2F347 Uncompressed Size     00000000 (0)\n+2F34B Filename Length       003F (63)\n+2F34D Extra Length          0009 (9)\n+2F34F Comment Length        0000 (0)\n+2F351 Disk Start            0000 (0)\n+2F353 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F355 Ext File Attributes   00000000 (0)\n+2F359 Local Header Offset   0001C734 (116532)\n+2F35D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F35D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F39C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F39E   Length              0005 (5)\n+2F3A0   Flags               01 (1) 'Modification'\n+2F3A1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F3A5 CENTRAL HEADER #56    02014B50 (33639248)\n+2F3A9 Created Zip Spec      14 (20) '2.0'\n+2F3AA Created OS            00 (0) 'MS-DOS'\n+2F3AB Extract Zip Spec      14 (20) '2.0'\n+2F3AC Extract OS            00 (0) 'MS-DOS'\n+2F3AD General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F3AF Compression Method    0000 (0) 'Stored'\n+2F3B1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F3B5 CRC                   6B98A176 (1805164918)\n+2F3B9 Compressed Size       00000BE4 (3044)\n+2F3BD Uncompressed Size     00000BE4 (3044)\n+2F3C1 Filename Length       006F (111)\n+2F3C3 Extra Length          0009 (9)\n+2F3C5 Comment Length        0000 (0)\n+2F3C7 Disk Start            0000 (0)\n+2F3C9 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F3CB Ext File Attributes   00000000 (0)\n+2F3CF Local Header Offset   0001C79A (116634)\n+2F3D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F3D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F442 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F444   Length              0005 (5)\n+2F446   Flags               01 (1) 'Modification'\n+2F447   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F44B CENTRAL HEADER #57    02014B50 (33639248)\n+2F44F Created Zip Spec      14 (20) '2.0'\n+2F450 Created OS            00 (0) 'MS-DOS'\n+2F451 Extract Zip Spec      14 (20) '2.0'\n+2F452 Extract OS            00 (0) 'MS-DOS'\n+2F453 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F455 Compression Method    0000 (0) 'Stored'\n+2F457 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F45B CRC                   3BA0FDB6 (1000406454)\n+2F45F Compressed Size       000007A8 (1960)\n+2F463 Uncompressed Size     000007A8 (1960)\n+2F467 Filename Length       0063 (99)\n+2F469 Extra Length          0009 (9)\n+2F46B Comment Length        0000 (0)\n+2F46D Disk Start            0000 (0)\n+2F46F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F471 Ext File Attributes   00000000 (0)\n+2F475 Local Header Offset   0001D424 (119844)\n+2F479 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F479: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F4DC Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F4DE   Length              0005 (5)\n+2F4E0   Flags               01 (1) 'Modification'\n+2F4E1   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F4E5 CENTRAL HEADER #58    02014B50 (33639248)\n+2F4E9 Created Zip Spec      14 (20) '2.0'\n+2F4EA Created OS            00 (0) 'MS-DOS'\n+2F4EB Extract Zip Spec      14 (20) '2.0'\n+2F4EC Extract OS            00 (0) 'MS-DOS'\n+2F4ED General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F4EF Compression Method    0000 (0) 'Stored'\n+2F4F1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F4F5 CRC                   AE7D7C02 (2927459330)\n+2F4F9 Compressed Size       000007D9 (2009)\n+2F4FD Uncompressed Size     000007D9 (2009)\n+2F501 Filename Length       0062 (98)\n+2F503 Extra Length          0009 (9)\n+2F505 Comment Length        0000 (0)\n+2F507 Disk Start            0000 (0)\n+2F509 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F50B Ext File Attributes   00000000 (0)\n+2F50F Local Header Offset   0001DC66 (121958)\n+2F513 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F513: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F575 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F577   Length              0005 (5)\n+2F579   Flags               01 (1) 'Modification'\n+2F57A   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F57E CENTRAL HEADER #59    02014B50 (33639248)\n+2F582 Created Zip Spec      14 (20) '2.0'\n+2F583 Created OS            00 (0) 'MS-DOS'\n+2F584 Extract Zip Spec      14 (20) '2.0'\n+2F585 Extract OS            00 (0) 'MS-DOS'\n+2F586 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F588 Compression Method    0000 (0) 'Stored'\n+2F58A Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F58E CRC                   DA74802F (3665068079)\n+2F592 Compressed Size       00001C32 (7218)\n+2F596 Uncompressed Size     00001C32 (7218)\n+2F59A Filename Length       0068 (104)\n+2F59C Extra Length          0009 (9)\n+2F59E Comment Length        0000 (0)\n+2F5A0 Disk Start            0000 (0)\n+2F5A2 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F5A4 Ext File Attributes   00000000 (0)\n+2F5A8 Local Header Offset   0001E4D8 (124120)\n+2F5AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F5AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F614 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F616   Length              0005 (5)\n+2F618   Flags               01 (1) 'Modification'\n+2F619   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F61D CENTRAL HEADER #60    02014B50 (33639248)\n+2F621 Created Zip Spec      14 (20) '2.0'\n+2F622 Created OS            00 (0) 'MS-DOS'\n+2F623 Extract Zip Spec      14 (20) '2.0'\n+2F624 Extract OS            00 (0) 'MS-DOS'\n+2F625 General Purpose Flag  0000 (0)\n+2F627 Compression Method    0000 (0) 'Stored'\n+2F629 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F62D CRC                   00000000 (0)\n+2F631 Compressed Size       00000000 (0)\n+2F635 Uncompressed Size     00000000 (0)\n+2F639 Filename Length       0035 (53)\n+2F63B Extra Length          0009 (9)\n+2F63D Comment Length        0000 (0)\n+2F63F Disk Start            0000 (0)\n+2F641 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F643 Ext File Attributes   00000000 (0)\n+2F647 Local Header Offset   000201A9 (131497)\n+2F64B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F64B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F680 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F682   Length              0005 (5)\n+2F684   Flags               01 (1) 'Modification'\n+2F685   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F689 CENTRAL HEADER #61    02014B50 (33639248)\n+2F68D Created Zip Spec      14 (20) '2.0'\n+2F68E Created OS            00 (0) 'MS-DOS'\n+2F68F Extract Zip Spec      14 (20) '2.0'\n+2F690 Extract OS            00 (0) 'MS-DOS'\n+2F691 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F693 Compression Method    0000 (0) 'Stored'\n+2F695 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F699 CRC                   F8229510 (4163015952)\n+2F69D Compressed Size       00002D3F (11583)\n+2F6A1 Uncompressed Size     00002D3F (11583)\n+2F6A5 Filename Length       0049 (73)\n+2F6A7 Extra Length          0009 (9)\n+2F6A9 Comment Length        0000 (0)\n+2F6AB Disk Start            0000 (0)\n+2F6AD Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F6AF Ext File Attributes   00000000 (0)\n+2F6B3 Local Header Offset   00020205 (131589)\n+2F6B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F6B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F700 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F702   Length              0005 (5)\n+2F704   Flags               01 (1) 'Modification'\n+2F705   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F709 CENTRAL HEADER #62    02014B50 (33639248)\n+2F70D Created Zip Spec      14 (20) '2.0'\n+2F70E Created OS            00 (0) 'MS-DOS'\n+2F70F Extract Zip Spec      14 (20) '2.0'\n+2F710 Extract OS            00 (0) 'MS-DOS'\n+2F711 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F713 Compression Method    0000 (0) 'Stored'\n+2F715 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F719 CRC                   0206EE92 (34008722)\n+2F71D Compressed Size       00000ACC (2764)\n+2F721 Uncompressed Size     00000ACC (2764)\n+2F725 Filename Length       0055 (85)\n+2F727 Extra Length          0009 (9)\n+2F729 Comment Length        0000 (0)\n+2F72B Disk Start            0000 (0)\n+2F72D Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F72F Ext File Attributes   00000000 (0)\n+2F733 Local Header Offset   00022FC4 (143300)\n+2F737 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F737: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F78C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F78E   Length              0005 (5)\n+2F790   Flags               01 (1) 'Modification'\n+2F791   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F795 CENTRAL HEADER #63    02014B50 (33639248)\n+2F799 Created Zip Spec      14 (20) '2.0'\n+2F79A Created OS            00 (0) 'MS-DOS'\n+2F79B Extract Zip Spec      14 (20) '2.0'\n+2F79C Extract OS            00 (0) 'MS-DOS'\n+2F79D General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F79F Compression Method    0000 (0) 'Stored'\n+2F7A1 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F7A5 CRC                   D32166A2 (3542181538)\n+2F7A9 Compressed Size       000018C4 (6340)\n+2F7AD Uncompressed Size     000018C4 (6340)\n+2F7B1 Filename Length       0044 (68)\n+2F7B3 Extra Length          0009 (9)\n+2F7B5 Comment Length        0000 (0)\n+2F7B7 Disk Start            0000 (0)\n+2F7B9 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F7BB Ext File Attributes   00000000 (0)\n+2F7BF Local Header Offset   00023B1C (146204)\n+2F7C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F7C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F807 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F809   Length              0005 (5)\n+2F80B   Flags               01 (1) 'Modification'\n+2F80C   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F810 CENTRAL HEADER #64    02014B50 (33639248)\n+2F814 Created Zip Spec      14 (20) '2.0'\n+2F815 Created OS            00 (0) 'MS-DOS'\n+2F816 Extract Zip Spec      14 (20) '2.0'\n+2F817 Extract OS            00 (0) 'MS-DOS'\n+2F818 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F81A Compression Method    0000 (0) 'Stored'\n+2F81C Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F820 CRC                   F4B90302 (4105765634)\n+2F824 Compressed Size       000005E9 (1513)\n+2F828 Uncompressed Size     000005E9 (1513)\n+2F82C Filename Length       0045 (69)\n+2F82E Extra Length          0009 (9)\n+2F830 Comment Length        0000 (0)\n+2F832 Disk Start            0000 (0)\n+2F834 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F836 Ext File Attributes   00000000 (0)\n+2F83A Local Header Offset   0002545B (152667)\n+2F83E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F83E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F883 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F885   Length              0005 (5)\n+2F887   Flags               01 (1) 'Modification'\n+2F888   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F88C CENTRAL HEADER #65    02014B50 (33639248)\n+2F890 Created Zip Spec      14 (20) '2.0'\n+2F891 Created OS            00 (0) 'MS-DOS'\n+2F892 Extract Zip Spec      14 (20) '2.0'\n+2F893 Extract OS            00 (0) 'MS-DOS'\n+2F894 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F896 Compression Method    0000 (0) 'Stored'\n+2F898 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F89C CRC                   EB53D86B (3948140651)\n+2F8A0 Compressed Size       00000E11 (3601)\n+2F8A4 Uncompressed Size     00000E11 (3601)\n+2F8A8 Filename Length       0045 (69)\n+2F8AA Extra Length          0009 (9)\n+2F8AC Comment Length        0000 (0)\n+2F8AE Disk Start            0000 (0)\n+2F8B0 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F8B2 Ext File Attributes   00000000 (0)\n+2F8B6 Local Header Offset   00025AC0 (154304)\n+2F8BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F8BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F8FF Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F901   Length              0005 (5)\n+2F903   Flags               01 (1) 'Modification'\n+2F904   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F908 CENTRAL HEADER #66    02014B50 (33639248)\n+2F90C Created Zip Spec      14 (20) '2.0'\n+2F90D Created OS            00 (0) 'MS-DOS'\n+2F90E Extract Zip Spec      14 (20) '2.0'\n+2F90F Extract OS            00 (0) 'MS-DOS'\n+2F910 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F912 Compression Method    0000 (0) 'Stored'\n+2F914 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F918 CRC                   29BE548C (700339340)\n+2F91C Compressed Size       00001CAF (7343)\n+2F920 Uncompressed Size     00001CAF (7343)\n+2F924 Filename Length       0045 (69)\n+2F926 Extra Length          0009 (9)\n+2F928 Comment Length        0000 (0)\n+2F92A Disk Start            0000 (0)\n+2F92C Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F92E Ext File Attributes   00000000 (0)\n+2F932 Local Header Offset   0002694D (158029)\n+2F936 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F936: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2F97B Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2F97D   Length              0005 (5)\n+2F97F   Flags               01 (1) 'Modification'\n+2F980   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2F984 CENTRAL HEADER #67    02014B50 (33639248)\n+2F988 Created Zip Spec      14 (20) '2.0'\n+2F989 Created OS            00 (0) 'MS-DOS'\n+2F98A Extract Zip Spec      14 (20) '2.0'\n+2F98B Extract OS            00 (0) 'MS-DOS'\n+2F98C General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2F98E Compression Method    0000 (0) 'Stored'\n+2F990 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2F994 CRC                   509E2681 (1352541825)\n+2F998 Compressed Size       00001423 (5155)\n+2F99C Uncompressed Size     00001423 (5155)\n+2F9A0 Filename Length       0050 (80)\n+2F9A2 Extra Length          0009 (9)\n+2F9A4 Comment Length        0000 (0)\n+2F9A6 Disk Start            0000 (0)\n+2F9A8 Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2F9AA Ext File Attributes   00000000 (0)\n+2F9AE Local Header Offset   00028678 (165496)\n+2F9B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2F9B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2FA02 Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2FA04   Length              0005 (5)\n+2FA06   Flags               01 (1) 'Modification'\n+2FA07   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2FA0B CENTRAL HEADER #68    02014B50 (33639248)\n+2FA0F Created Zip Spec      14 (20) '2.0'\n+2FA10 Created OS            00 (0) 'MS-DOS'\n+2FA11 Extract Zip Spec      14 (20) '2.0'\n+2FA12 Extract OS            00 (0) 'MS-DOS'\n+2FA13 General Purpose Flag  0008 (8)\n+      [Bit  3]              1 'Streamed'\n+2FA15 Compression Method    0000 (0) 'Stored'\n+2FA17 Modification Time     EC210000 (3961585664) 'Wed Jan  1 00:00:00 2098'\n+2FA1B CRC                   59E77649 (1508341321)\n+2FA1F Compressed Size       00003E03 (15875)\n+2FA23 Uncompressed Size     00003E03 (15875)\n+2FA27 Filename Length       0043 (67)\n+2FA29 Extra Length          0009 (9)\n+2FA2B Comment Length        0000 (0)\n+2FA2D Disk Start            0000 (0)\n+2FA2F Int File Attributes   0000 (0)\n+      [Bit 0]               0 'Binary Data'\n+2FA31 Ext File Attributes   00000000 (0)\n+2FA35 Local Header Offset   00029B22 (170786)\n+2FA39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x2FA39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+#          Zero length filename\n+#\n+2FA7C Extra ID #1           5455 (21589) 'Extended Timestamp [UT]'\n+2FA7E   Length              0005 (5)\n+2FA80   Flags               01 (1) 'Modification'\n+2FA81   Modification Time   00000000 (0) 'Thu Jan  1 00:00:00 1970'\n+\n+2FA85 END CENTRAL HEADER    06054B50 (101010256)\n+2FA89 Number of this disk   0000 (0)\n+2FA8B Central Dir Disk no   0000 (0)\n+2FA8D Entries in this disk  0044 (68)\n+2FA8F Total Entries         0044 (68)\n+2FA91 Size of Central Dir   000020E6 (8422)\n+2FA95 Offset to Central Dir 0002D99F (186783)\n+2FA99 Comment Length        0000 (0)\n #\n # Warning Count: 136\n #\n # Done\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.builder.TypeDefinitionBuilder", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.builder.TypeDefinitionBuilder", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,7 +1,7 @@\n-array-type = org.apache.dubbo.metadata.annotation.processing.builder.ArrayTypeDefinitionBuilder\n-collection-type = org.apache.dubbo.metadata.annotation.processing.builder.CollectionTypeDefinitionBuilder\n-enum-type = org.apache.dubbo.metadata.annotation.processing.builder.EnumTypeDefinitionBuilder\n-general-type = org.apache.dubbo.metadata.annotation.processing.builder.GeneralTypeDefinitionBuilder\n-map-type = org.apache.dubbo.metadata.annotation.processing.builder.MapTypeDefinitionBuilder\n-primitive-type = org.apache.dubbo.metadata.annotation.processing.builder.PrimitiveTypeDefinitionBuilder\n+array-type = org.apache.dubbo.metadata.annotation.processing.builder.ArrayTypeDefinitionBuilder\r\n+collection-type = org.apache.dubbo.metadata.annotation.processing.builder.CollectionTypeDefinitionBuilder\r\n+enum-type = org.apache.dubbo.metadata.annotation.processing.builder.EnumTypeDefinitionBuilder\r\n+general-type = org.apache.dubbo.metadata.annotation.processing.builder.GeneralTypeDefinitionBuilder\r\n+map-type = org.apache.dubbo.metadata.annotation.processing.builder.MapTypeDefinitionBuilder\r\n+primitive-type = org.apache.dubbo.metadata.annotation.processing.builder.PrimitiveTypeDefinitionBuilder\r\n simple-type = org.apache.dubbo.metadata.annotation.processing.builder.SimpleTypeDefinitionBuilder\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,10 +1,10 @@\n-# JAX-RS's implementations\n-jax-rs.query-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.QueryParamParameterProcessor\n-jax-rs.form-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.FormParamParameterProcessor\n-jax-rs.matrix-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.MatrixParamParameterProcessor\n-jax-rs.header-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.HeaderParamParameterProcessor\n-jax-rs.default-value-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.DefaultValueParameterProcessor\n-\n-# Spring Web MVC's implementations\n-spring-webmvc.request-param = org.apache.dubbo.metadata.annotation.processing.rest.springmvc.RequestParamParameterProcessor\n+# JAX-RS's implementations\r\n+jax-rs.query-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.QueryParamParameterProcessor\r\n+jax-rs.form-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.FormParamParameterProcessor\r\n+jax-rs.matrix-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.MatrixParamParameterProcessor\r\n+jax-rs.header-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.HeaderParamParameterProcessor\r\n+jax-rs.default-value-param = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.DefaultValueParameterProcessor\r\n+\r\n+# Spring Web MVC's implementations\r\n+spring-webmvc.request-param = org.apache.dubbo.metadata.annotation.processing.rest.springmvc.RequestParamParameterProcessor\r\n spring-webmvc.request-header = org.apache.dubbo.metadata.annotation.processing.rest.springmvc.RequestHeaderParameterProcessor\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,3 +1,3 @@\n-default = org.apache.dubbo.metadata.annotation.processing.rest.DefaultServiceRestMetadataResolver\n-jax-rs = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.JAXRSServiceRestMetadataResolver\n+default = org.apache.dubbo.metadata.annotation.processing.rest.DefaultServiceRestMetadataResolver\r\n+jax-rs = org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.JAXRSServiceRestMetadataResolver\r\n spring-webmvc = org.apache.dubbo.metadata.annotation.processing.rest.springmvc.SpringMvcServiceRestMetadataResolver\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml", "unified_diff": null, "details": [{"source1": "META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-metadata-processor/pom.xml", "comments": ["Ordering differences only"], "unified_diff": "@@ -37,123 +37,123 @@\n   <dependencies>\n     <dependency>\n       <groupId>org.apache.dubbo</groupId>\n       <artifactId>dubbo-metadata-api</artifactId>\n       <version>${project.parent.version}</version>\n       <exclusions>\n         <exclusion>\n-          <artifactId>dubbo-rpc-api</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-rpc-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-cluster</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-cluster</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>gson</artifactId>\n           <groupId>com.google.code.gson</groupId>\n+          <artifactId>gson</artifactId>\n         </exclusion>\n       </exclusions>\n     </dependency>\n     <dependency>\n       <groupId>org.apache.dubbo</groupId>\n       <artifactId>dubbo-common</artifactId>\n       <version>${project.parent.version}</version>\n       <exclusions>\n         <exclusion>\n-          <artifactId>javax.annotation-api</artifactId>\n           <groupId>javax.annotation</groupId>\n+          <artifactId>javax.annotation-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>slf4j-api</artifactId>\n           <groupId>org.slf4j</groupId>\n+          <artifactId>slf4j-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>commons-logging</artifactId>\n           <groupId>commons-logging</groupId>\n+          <artifactId>commons-logging</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>log4j</artifactId>\n           <groupId>log4j</groupId>\n+          <artifactId>log4j</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>log4j-api</artifactId>\n           <groupId>org.apache.logging.log4j</groupId>\n+          <artifactId>log4j-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>log4j-core</artifactId>\n           <groupId>org.apache.logging.log4j</groupId>\n+          <artifactId>log4j-core</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>javassist</artifactId>\n           <groupId>org.javassist</groupId>\n+          <artifactId>javassist</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>hessian-lite</artifactId>\n           <groupId>com.alibaba</groupId>\n+          <artifactId>hessian-lite</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>fastjson</artifactId>\n           <groupId>com.alibaba</groupId>\n+          <artifactId>fastjson</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>kryo</artifactId>\n           <groupId>com.esotericsoftware</groupId>\n+          <artifactId>kryo</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>kryo-serializers</artifactId>\n           <groupId>de.javakaffee</groupId>\n+          <artifactId>kryo-serializers</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>fst</artifactId>\n           <groupId>de.ruedigermoeller</groupId>\n+          <artifactId>fst</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>commons-io</artifactId>\n           <groupId>commons-io</groupId>\n+          <artifactId>commons-io</artifactId>\n         </exclusion>\n       </exclusions>\n     </dependency>\n     <dependency>\n       <groupId>com.google.code.gson</groupId>\n       <artifactId>gson</artifactId>\n     </dependency>\n     <dependency>\n       <groupId>org.apache.dubbo</groupId>\n       <artifactId>dubbo-config-api</artifactId>\n       <version>${project.parent.version}</version>\n       <scope>test</scope>\n       <exclusions>\n         <exclusion>\n-          <artifactId>dubbo-registry-api</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-registry-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-metadata-api</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-metadata-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-monitor-api</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-monitor-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-remoting-api</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-remoting-api</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-rpc-injvm</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-rpc-injvm</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-filter-validation</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-filter-validation</artifactId>\n         </exclusion>\n         <exclusion>\n-          <artifactId>dubbo-filter-cache</artifactId>\n           <groupId>org.apache.dubbo</groupId>\n+          <artifactId>dubbo-filter-cache</artifactId>\n         </exclusion>\n       </exclusions>\n     </dependency>\n     <dependency>\n       <groupId>javax.ws.rs</groupId>\n       <artifactId>javax.ws.rs-api</artifactId>\n       <scope>test</scope>\n"}]}, {"source1": "META-INF/services/javax.annotation.processing.Processor", "source2": "META-INF/services/javax.annotation.processing.Processor", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,2 +1,2 @@\n-org.apache.dubbo.metadata.annotation.processing.ServiceDefinitionMetadataAnnotationProcessor\n-org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataAnnotationProcessor\n+org.apache.dubbo.metadata.annotation.processing.ServiceDefinitionMetadataAnnotationProcessor\r\n+org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataAnnotationProcessor\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,108 +1,108 @@\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.metadata.annotation.processing;\n-\n-import javax.annotation.processing.AbstractProcessor;\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.annotation.processing.Processor;\n-import javax.lang.model.SourceVersion;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.ElementKind;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.PackageElement;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.util.Elements;\n-import java.util.HashMap;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-\n-import static javax.lang.model.util.ElementFilter.methodsIn;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.SUPPORTED_ANNOTATION_TYPES;\n-\n-/**\n- * Abstract {@link Processor} for the classes that were annotated by Dubbo's @Service\n- *\n- * @since 2.7.6\n- */\n-public abstract class AbstractServiceAnnotationProcessor extends AbstractProcessor {\n-\n-    protected Elements elements;\n-\n-    private List<? extends Element> objectMembers;\n-\n-    public synchronized void init(ProcessingEnvironment processingEnv) {\n-        super.init(processingEnv);\n-        this.elements = processingEnv.getElementUtils();\n-        this.objectMembers = elements.getAllMembers(elements.getTypeElement(Object.class.getName()));\n-    }\n-\n-    protected List<? extends Element> getActualMembers(TypeElement type) {\n-        List<? extends Element> members = new LinkedList<>(elements.getAllMembers(type));\n-        members.removeAll(objectMembers);\n-        return members;\n-    }\n-\n-    protected List<? extends ExecutableElement> getActualMethods(TypeElement type) {\n-        return methodsIn(getActualMembers(type));\n-    }\n-\n-    protected Map<String, ExecutableElement> getActualMethodsMap(TypeElement type) {\n-        Map<String, ExecutableElement> methodsMap = new HashMap<>();\n-        getActualMethods(type).forEach(method -> {\n-            methodsMap.put(method.toString(), method);\n-        });\n-        return methodsMap;\n-    }\n-\n-    public static String getMethodSignature(ExecutableElement method) {\n-        if (!ElementKind.METHOD.equals(method.getKind())) {\n-            throw new IllegalArgumentException(\"The argument must be Method Kind\");\n-        }\n-\n-        StringBuilder methodSignatureBuilder = new StringBuilder();\n-\n-        method.getModifiers().forEach(member -> {\n-            methodSignatureBuilder.append(member).append(\" \");\n-        });\n-\n-        methodSignatureBuilder.append(method.getReturnType())\n-                .append(\" \")\n-                .append(method.toString());\n-\n-        return methodSignatureBuilder.toString();\n-    }\n-\n-    protected TypeElement getTypeElement(CharSequence className) {\n-        return elements.getTypeElement(className);\n-    }\n-\n-    protected PackageElement getPackageElement(Element type) {\n-        return this.elements.getPackageOf(type);\n-    }\n-\n-    @Override\n-    public SourceVersion getSupportedSourceVersion() {\n-        return SourceVersion.latest();\n-    }\n-\n-    @Override\n-    public final Set<String> getSupportedAnnotationTypes() {\n-        return SUPPORTED_ANNOTATION_TYPES;\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.metadata.annotation.processing;\r\n+\r\n+import javax.annotation.processing.AbstractProcessor;\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.annotation.processing.Processor;\r\n+import javax.lang.model.SourceVersion;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.ElementKind;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.PackageElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.util.Elements;\r\n+import java.util.HashMap;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+\r\n+import static javax.lang.model.util.ElementFilter.methodsIn;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.SUPPORTED_ANNOTATION_TYPES;\r\n+\r\n+/**\r\n+ * Abstract {@link Processor} for the classes that were annotated by Dubbo's @Service\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public abstract class AbstractServiceAnnotationProcessor extends AbstractProcessor {\r\n+\r\n+    protected Elements elements;\r\n+\r\n+    private List<? extends Element> objectMembers;\r\n+\r\n+    public synchronized void init(ProcessingEnvironment processingEnv) {\r\n+        super.init(processingEnv);\r\n+        this.elements = processingEnv.getElementUtils();\r\n+        this.objectMembers = elements.getAllMembers(elements.getTypeElement(Object.class.getName()));\r\n+    }\r\n+\r\n+    protected List<? extends Element> getActualMembers(TypeElement type) {\r\n+        List<? extends Element> members = new LinkedList<>(elements.getAllMembers(type));\r\n+        members.removeAll(objectMembers);\r\n+        return members;\r\n+    }\r\n+\r\n+    protected List<? extends ExecutableElement> getActualMethods(TypeElement type) {\r\n+        return methodsIn(getActualMembers(type));\r\n+    }\r\n+\r\n+    protected Map<String, ExecutableElement> getActualMethodsMap(TypeElement type) {\r\n+        Map<String, ExecutableElement> methodsMap = new HashMap<>();\r\n+        getActualMethods(type).forEach(method -> {\r\n+            methodsMap.put(method.toString(), method);\r\n+        });\r\n+        return methodsMap;\r\n+    }\r\n+\r\n+    public static String getMethodSignature(ExecutableElement method) {\r\n+        if (!ElementKind.METHOD.equals(method.getKind())) {\r\n+            throw new IllegalArgumentException(\"The argument must be Method Kind\");\r\n+        }\r\n+\r\n+        StringBuilder methodSignatureBuilder = new StringBuilder();\r\n+\r\n+        method.getModifiers().forEach(member -> {\r\n+            methodSignatureBuilder.append(member).append(\" \");\r\n+        });\r\n+\r\n+        methodSignatureBuilder.append(method.getReturnType())\r\n+                .append(\" \")\r\n+                .append(method.toString());\r\n+\r\n+        return methodSignatureBuilder.toString();\r\n+    }\r\n+\r\n+    protected TypeElement getTypeElement(CharSequence className) {\r\n+        return elements.getTypeElement(className);\r\n+    }\r\n+\r\n+    protected PackageElement getPackageElement(Element type) {\r\n+        return this.elements.getPackageOf(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public SourceVersion getSupportedSourceVersion() {\r\n+        return SourceVersion.latest();\r\n+    }\r\n+\r\n+    @Override\r\n+    public final Set<String> getSupportedAnnotationTypes() {\r\n+        return SUPPORTED_ANNOTATION_TYPES;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/ClassPathMetadataStorage.java", "source2": "org/apache/dubbo/metadata/annotation/processing/ClassPathMetadataStorage.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,105 +1,105 @@\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.metadata.annotation.processing;\n-\n-\n-import javax.annotation.processing.Filer;\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.tools.FileObject;\n-import java.io.File;\n-import java.io.IOException;\n-import java.io.Reader;\n-import java.io.Writer;\n-import java.util.Optional;\n-import java.util.function.Function;\n-import java.util.function.Supplier;\n-\n-import static java.util.Optional.empty;\n-import static java.util.Optional.ofNullable;\n-import static javax.tools.StandardLocation.CLASS_OUTPUT;\n-import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.info;\n-import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.warn;\n-\n-/**\n- * A storage class for metadata under class path\n- */\n-public class ClassPathMetadataStorage {\n-\n-    private final Filer filer;\n-\n-    public ClassPathMetadataStorage(ProcessingEnvironment processingEnv) {\n-        this.filer = processingEnv.getFiler();\n-    }\n-\n-    public void write(Supplier<String> contentSupplier, String resourceName) {\n-        try (Writer writer = getWriter(resourceName)) {\n-            writer.write(contentSupplier.get());\n-        } catch (IOException e) {\n-            throw new RuntimeException(e);\n-        }\n-    }\n-\n-    public <T> Optional<T> read(String resourceName, Function<Reader, T> consumer) {\n-        if (exists(resourceName)) {\n-            try (Reader reader = getReader(resourceName)) {\n-                return ofNullable(consumer.apply(reader));\n-            } catch (IOException e) {\n-                throw new RuntimeException(e);\n-            }\n-        }\n-        return empty();\n-    }\n-\n-    private boolean exists(String resourceName) {\n-\n-        return getResource(resourceName)\n-                .map(FileObject::toUri)\n-                .map(File::new)\n-                .map(File::exists)\n-                .orElse(false);\n-    }\n-\n-    private Reader getReader(String resourceName) {\n-        return getResource(resourceName).map(fileObject -> {\n-            try {\n-                return fileObject.openReader(false);\n-            } catch (IOException e) {\n-            }\n-            return null;\n-        }).orElse(null);\n-    }\n-\n-    private FileObject createResource(String resourceName) throws IOException {\n-        return filer.createResource(CLASS_OUTPUT, \"\", resourceName);\n-    }\n-\n-    private Optional<FileObject> getResource(String resourceName) {\n-        try {\n-            FileObject fileObject = filer.getResource(CLASS_OUTPUT, \"\", resourceName);\n-            return ofNullable(fileObject);\n-        } catch (IOException e) {\n-            warn(e.getMessage());\n-        }\n-        return empty();\n-    }\n-\n-    private Writer getWriter(String resourceName) throws IOException {\n-        FileObject fileObject = createResource(resourceName);\n-        info(\"The resource[path : %s , deleted : %s] will be written\", fileObject.toUri().getPath(), fileObject.delete());\n-        return fileObject.openWriter();\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.metadata.annotation.processing;\r\n+\r\n+\r\n+import javax.annotation.processing.Filer;\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.tools.FileObject;\r\n+import java.io.File;\r\n+import java.io.IOException;\r\n+import java.io.Reader;\r\n+import java.io.Writer;\r\n+import java.util.Optional;\r\n+import java.util.function.Function;\r\n+import java.util.function.Supplier;\r\n+\r\n+import static java.util.Optional.empty;\r\n+import static java.util.Optional.ofNullable;\r\n+import static javax.tools.StandardLocation.CLASS_OUTPUT;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.info;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.warn;\r\n+\r\n+/**\r\n+ * A storage class for metadata under class path\r\n+ */\r\n+public class ClassPathMetadataStorage {\r\n+\r\n+    private final Filer filer;\r\n+\r\n+    public ClassPathMetadataStorage(ProcessingEnvironment processingEnv) {\r\n+        this.filer = processingEnv.getFiler();\r\n+    }\r\n+\r\n+    public void write(Supplier<String> contentSupplier, String resourceName) {\r\n+        try (Writer writer = getWriter(resourceName)) {\r\n+            writer.write(contentSupplier.get());\r\n+        } catch (IOException e) {\r\n+            throw new RuntimeException(e);\r\n+        }\r\n+    }\r\n+\r\n+    public <T> Optional<T> read(String resourceName, Function<Reader, T> consumer) {\r\n+        if (exists(resourceName)) {\r\n+            try (Reader reader = getReader(resourceName)) {\r\n+                return ofNullable(consumer.apply(reader));\r\n+            } catch (IOException e) {\r\n+                throw new RuntimeException(e);\r\n+            }\r\n+        }\r\n+        return empty();\r\n+    }\r\n+\r\n+    private boolean exists(String resourceName) {\r\n+\r\n+        return getResource(resourceName)\r\n+                .map(FileObject::toUri)\r\n+                .map(File::new)\r\n+                .map(File::exists)\r\n+                .orElse(false);\r\n+    }\r\n+\r\n+    private Reader getReader(String resourceName) {\r\n+        return getResource(resourceName).map(fileObject -> {\r\n+            try {\r\n+                return fileObject.openReader(false);\r\n+            } catch (IOException e) {\r\n+            }\r\n+            return null;\r\n+        }).orElse(null);\r\n+    }\r\n+\r\n+    private FileObject createResource(String resourceName) throws IOException {\r\n+        return filer.createResource(CLASS_OUTPUT, \"\", resourceName);\r\n+    }\r\n+\r\n+    private Optional<FileObject> getResource(String resourceName) {\r\n+        try {\r\n+            FileObject fileObject = filer.getResource(CLASS_OUTPUT, \"\", resourceName);\r\n+            return ofNullable(fileObject);\r\n+        } catch (IOException e) {\r\n+            warn(e.getMessage());\r\n+        }\r\n+        return empty();\r\n+    }\r\n+\r\n+    private Writer getWriter(String resourceName) throws IOException {\r\n+        FileObject fileObject = createResource(resourceName);\r\n+        info(\"The resource[path : %s , deleted : %s] will be written\", fileObject.toUri().getPath(), fileObject.delete());\r\n+        return fileObject.openWriter();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/ServiceDefinitionMetadataAnnotationProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/ServiceDefinitionMetadataAnnotationProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,60 +1,60 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.annotation.processing;\n-\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-\n-import com.google.gson.Gson;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.annotation.processing.Processor;\n-import javax.annotation.processing.RoundEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Set;\n-\n-import static javax.lang.model.util.ElementFilter.typesIn;\n-import static org.apache.dubbo.metadata.annotation.processing.builder.ServiceDefinitionBuilder.build;\n-\n-/**\n- * The {@link Processor} class to generate the metadata of {@link ServiceDefinition} whose classes are annotated by Dubbo's @Service\n- *\n- * @see Processor\n- * @since 2.7.6\n- */\n-public class ServiceDefinitionMetadataAnnotationProcessor extends AbstractServiceAnnotationProcessor {\n-\n-    private List<ServiceDefinition> serviceDefinitions = new LinkedList<>();\n-\n-    @Override\n-    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {\n-\n-        typesIn(roundEnv.getRootElements()).forEach(serviceType -> process(processingEnv, serviceType, annotations));\n-\n-        if (roundEnv.processingOver()) {\n-            ClassPathMetadataStorage writer = new ClassPathMetadataStorage(processingEnv);\n-            writer.write(() -> new Gson().toJson(serviceDefinitions), \"META-INF/dubbo/service-definitions.json\");\n-        }\n-\n-        return false;\n-    }\n-\n-    private void process(ProcessingEnvironment processingEnv, TypeElement serviceType, Set<? extends TypeElement> annotations) {\n-        serviceDefinitions.add(build(processingEnv, serviceType));\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.metadata.annotation.processing;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+\r\n+import com.google.gson.Gson;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.annotation.processing.Processor;\r\n+import javax.annotation.processing.RoundEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+\r\n+import static javax.lang.model.util.ElementFilter.typesIn;\r\n+import static org.apache.dubbo.metadata.annotation.processing.builder.ServiceDefinitionBuilder.build;\r\n+\r\n+/**\r\n+ * The {@link Processor} class to generate the metadata of {@link ServiceDefinition} whose classes are annotated by Dubbo's @Service\r\n+ *\r\n+ * @see Processor\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ServiceDefinitionMetadataAnnotationProcessor extends AbstractServiceAnnotationProcessor {\r\n+\r\n+    private List<ServiceDefinition> serviceDefinitions = new LinkedList<>();\r\n+\r\n+    @Override\r\n+    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {\r\n+\r\n+        typesIn(roundEnv.getRootElements()).forEach(serviceType -> process(processingEnv, serviceType, annotations));\r\n+\r\n+        if (roundEnv.processingOver()) {\r\n+            ClassPathMetadataStorage writer = new ClassPathMetadataStorage(processingEnv);\r\n+            writer.write(() -> new Gson().toJson(serviceDefinitions), \"META-INF/dubbo/service-definitions.json\");\r\n+        }\r\n+\r\n+        return false;\r\n+    }\r\n+\r\n+    private void process(ProcessingEnvironment processingEnv, TypeElement serviceType, Set<? extends TypeElement> annotations) {\r\n+        serviceDefinitions.add(build(processingEnv, serviceType));\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/ArrayTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/ArrayTypeDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,50 +1,50 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.type.ArrayType;\n-import javax.lang.model.type.TypeMirror;\n-import java.lang.reflect.Array;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isArrayType;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for Java {@link Array}\n- *\n- * @since 2.7.6\n- */\n-public class ArrayTypeDefinitionBuilder implements TypeDefinitionBuilder<ArrayType> {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        return isArrayType(type);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, ArrayType type, TypeDefinition typeDefinition) {\n-        TypeMirror componentType = type.getComponentType();\n-        typeDefinition.getItems().add(TypeDefinitionBuilder.build(processingEnv, componentType));\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 4;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.type.ArrayType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import java.lang.reflect.Array;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isArrayType;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for Java {@link Array}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ArrayTypeDefinitionBuilder implements TypeDefinitionBuilder<ArrayType> {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        return isArrayType(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, ArrayType type, TypeDefinition typeDefinition) {\r\n+        TypeMirror componentType = type.getComponentType();\r\n+        typeDefinition.getItems().add(TypeDefinitionBuilder.build(processingEnv, componentType));\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 4;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/CollectionTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/CollectionTypeDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,61 +1,61 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.type.DeclaredType;\n-import javax.lang.model.type.TypeMirror;\n-import javax.lang.model.util.Elements;\n-import javax.lang.model.util.Types;\n-import java.util.Collection;\n-import java.util.Objects;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for Java {@link Collection}\n- *\n- * @since 2.7.6\n- */\n-public class CollectionTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\n-        Elements elements = processingEnv.getElementUtils();\n-        TypeElement collectionTypeElement = elements.getTypeElement(Collection.class.getTypeName());\n-        TypeMirror collectionType = collectionTypeElement.asType();\n-        Types types = processingEnv.getTypeUtils();\n-        TypeMirror erasedType = types.erasure(type);\n-        return types.isAssignable(erasedType, collectionType);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\n-        // Generic Type arguments\n-        type.getTypeArguments()\n-                .stream()\n-                .map(typeArgument -> TypeDefinitionBuilder.build(processingEnv, typeArgument)) // build the TypeDefinition from typeArgument\n-                .filter(Objects::nonNull)\n-                .forEach(typeDefinition.getItems()::add);                              // Add into the declared TypeDefinition\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 5;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.type.DeclaredType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import javax.lang.model.util.Elements;\r\n+import javax.lang.model.util.Types;\r\n+import java.util.Collection;\r\n+import java.util.Objects;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for Java {@link Collection}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class CollectionTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\r\n+        Elements elements = processingEnv.getElementUtils();\r\n+        TypeElement collectionTypeElement = elements.getTypeElement(Collection.class.getTypeName());\r\n+        TypeMirror collectionType = collectionTypeElement.asType();\r\n+        Types types = processingEnv.getTypeUtils();\r\n+        TypeMirror erasedType = types.erasure(type);\r\n+        return types.isAssignable(erasedType, collectionType);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\r\n+        // Generic Type arguments\r\n+        type.getTypeArguments()\r\n+                .stream()\r\n+                .map(typeArgument -> TypeDefinitionBuilder.build(processingEnv, typeArgument)) // build the TypeDefinition from typeArgument\r\n+                .filter(Objects::nonNull)\r\n+                .forEach(typeDefinition.getItems()::add);                              // Add into the declared TypeDefinition\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 5;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/DeclaredTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/DeclaredTypeDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,49 +1,49 @@\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.metadata.annotation.processing.builder;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.type.DeclaredType;\n-import javax.lang.model.type.TypeMirror;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofDeclaredType;\n-\n-/**\n- * An interface of {@link TypeDefinitionBuilder} for {@link DeclaredType}\n- *\n- * @since 2.7.6\n- */\n-public interface DeclaredTypeDefinitionBuilder extends TypeDefinitionBuilder<DeclaredType> {\n-\n-    @Override\n-    default boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        if (declaredType == null) {\n-            return false;\n-        }\n-        return accept(processingEnv, declaredType);\n-    }\n-\n-    /**\n-     * Test the specified {@link DeclaredType type} is accepted or not\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param type          {@link DeclaredType type}\n-     * @return <code>true</code> if accepted\n-     */\n-    boolean accept(ProcessingEnvironment processingEnv, DeclaredType type);\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.metadata.annotation.processing.builder;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.type.DeclaredType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofDeclaredType;\r\n+\r\n+/**\r\n+ * An interface of {@link TypeDefinitionBuilder} for {@link DeclaredType}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface DeclaredTypeDefinitionBuilder extends TypeDefinitionBuilder<DeclaredType> {\r\n+\r\n+    @Override\r\n+    default boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        if (declaredType == null) {\r\n+            return false;\r\n+        }\r\n+        return accept(processingEnv, declaredType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Test the specified {@link DeclaredType type} is accepted or not\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param type          {@link DeclaredType type}\r\n+     * @return <code>true</code> if accepted\r\n+     */\r\n+    boolean accept(ProcessingEnvironment processingEnv, DeclaredType type);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/EnumTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/EnumTypeDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,55 +1,55 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.annotation.processing.util.FieldUtils;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.Name;\n-import javax.lang.model.type.DeclaredType;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.FieldUtils.getDeclaredFields;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isEnumType;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for Java {@link Enum}\n- *\n- * @since 2.7.6\n- */\n-public class EnumTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\n-        return isEnumType(type);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\n-        getDeclaredFields(type, FieldUtils::isEnumMemberField)\n-                .stream()\n-                .map(Element::getSimpleName)\n-                .map(Name::toString)\n-                .forEach(typeDefinition.getEnums()::add);\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 2;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.util.FieldUtils;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.Name;\r\n+import javax.lang.model.type.DeclaredType;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.FieldUtils.getDeclaredFields;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isEnumType;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for Java {@link Enum}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class EnumTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\r\n+        return isEnumType(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\r\n+        getDeclaredFields(type, FieldUtils::isEnumMemberField)\r\n+                .stream()\r\n+                .map(Element::getSimpleName)\r\n+                .map(Name::toString)\r\n+                .forEach(typeDefinition.getEnums()::add);\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 2;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/GeneralTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/GeneralTypeDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,65 +1,65 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.type.DeclaredType;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.FieldUtils.getNonStaticFields;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getType;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isClassType;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for General Object\n- *\n- * @since 2.7.6\n- */\n-public class GeneralTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\n-        return isClassType(type);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\n-\n-        String typeName = type.toString();\n-\n-        TypeElement typeElement = getType(processingEnv, typeName);\n-\n-        buildProperties(processingEnv, typeElement, typeDefinition);\n-    }\n-\n-    protected void buildProperties(ProcessingEnvironment processingEnv, TypeElement type, TypeDefinition definition) {\n-        getNonStaticFields(type).forEach(field -> {\n-            String fieldName = field.getSimpleName().toString();\n-            TypeDefinition propertyType = TypeDefinitionBuilder.build(processingEnv, field);\n-            if (propertyType != null) {\n-                definition.getProperties().put(fieldName, propertyType);\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.type.DeclaredType;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.FieldUtils.getNonStaticFields;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getType;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isClassType;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for General Object\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class GeneralTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\r\n+        return isClassType(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\r\n+\r\n+        String typeName = type.toString();\r\n+\r\n+        TypeElement typeElement = getType(processingEnv, typeName);\r\n+\r\n+        buildProperties(processingEnv, typeElement, typeDefinition);\r\n+    }\r\n+\r\n+    protected void buildProperties(ProcessingEnvironment processingEnv, TypeElement type, TypeDefinition definition) {\r\n+        getNonStaticFields(type).forEach(field -> {\r\n+            String fieldName = field.getSimpleName().toString();\r\n+            TypeDefinition propertyType = TypeDefinitionBuilder.build(processingEnv, field);\r\n+            if (propertyType != null) {\r\n+                definition.getProperties().put(fieldName, propertyType);\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/MapTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/MapTypeDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,62 +1,62 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.type.DeclaredType;\n-import javax.lang.model.type.TypeMirror;\n-import javax.lang.model.util.Elements;\n-import javax.lang.model.util.Types;\n-import java.util.Map;\n-import java.util.Objects;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for Java {@link Map}\n- *\n- * @since 2.7.6\n- */\n-public class MapTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\n-        Elements elements = processingEnv.getElementUtils();\n-        TypeElement mapTypeElement = elements.getTypeElement(Map.class.getTypeName());\n-        TypeMirror mapType = mapTypeElement.asType();\n-        Types types = processingEnv.getTypeUtils();\n-        TypeMirror erasedType = types.erasure(type);\n-        return types.isAssignable(erasedType, mapType);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\n-        // Generic Type arguments\n-        type.getTypeArguments()\n-                .stream()\n-                .map(typeArgument -> TypeDefinitionBuilder.build(processingEnv, typeArgument)) // build the TypeDefinition from typeArgument\n-                .filter(Objects::nonNull)\n-                .forEach(typeDefinition.getItems()::add);                              // Add into the declared TypeDefinition\n-\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 6;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.type.DeclaredType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import javax.lang.model.util.Elements;\r\n+import javax.lang.model.util.Types;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for Java {@link Map}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class MapTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\r\n+        Elements elements = processingEnv.getElementUtils();\r\n+        TypeElement mapTypeElement = elements.getTypeElement(Map.class.getTypeName());\r\n+        TypeMirror mapType = mapTypeElement.asType();\r\n+        Types types = processingEnv.getTypeUtils();\r\n+        TypeMirror erasedType = types.erasure(type);\r\n+        return types.isAssignable(erasedType, mapType);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\r\n+        // Generic Type arguments\r\n+        type.getTypeArguments()\r\n+                .stream()\r\n+                .map(typeArgument -> TypeDefinitionBuilder.build(processingEnv, typeArgument)) // build the TypeDefinition from typeArgument\r\n+                .filter(Objects::nonNull)\r\n+                .forEach(typeDefinition.getItems()::add);                              // Add into the declared TypeDefinition\r\n+\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 6;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/MethodDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/MethodDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,53 +1,53 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.ExecutableElement;\n-import java.util.List;\n-import java.util.stream.Collectors;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getMethodName;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getMethodParameterTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getReturnType;\n-\n-/**\n- * A Builder class for {@link MethodDefinition}\n- *\n- * @see MethodDefinition\n- * @since 2.7.6\n- */\n-public interface MethodDefinitionBuilder {\n-\n-    static MethodDefinition build(ProcessingEnvironment processingEnv, ExecutableElement method) {\n-        MethodDefinition methodDefinition = new MethodDefinition();\n-        methodDefinition.setName(getMethodName(method));\n-        methodDefinition.setReturnType(getReturnType(method));\n-        methodDefinition.setParameterTypes(getMethodParameterTypes(method));\n-        methodDefinition.setParameters(getMethodParameters(processingEnv, method));\n-        return methodDefinition;\n-    }\n-\n-    static List<TypeDefinition> getMethodParameters(ProcessingEnvironment processingEnv, ExecutableElement method) {\n-        return method.getParameters().stream()\n-                .map(element -> TypeDefinitionBuilder.build(processingEnv, element))\n-                .collect(Collectors.toList());\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import java.util.List;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getMethodName;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getMethodParameterTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getReturnType;\r\n+\r\n+/**\r\n+ * A Builder class for {@link MethodDefinition}\r\n+ *\r\n+ * @see MethodDefinition\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface MethodDefinitionBuilder {\r\n+\r\n+    static MethodDefinition build(ProcessingEnvironment processingEnv, ExecutableElement method) {\r\n+        MethodDefinition methodDefinition = new MethodDefinition();\r\n+        methodDefinition.setName(getMethodName(method));\r\n+        methodDefinition.setReturnType(getReturnType(method));\r\n+        methodDefinition.setParameterTypes(getMethodParameterTypes(method));\r\n+        methodDefinition.setParameters(getMethodParameters(processingEnv, method));\r\n+        return methodDefinition;\r\n+    }\r\n+\r\n+    static List<TypeDefinition> getMethodParameters(ProcessingEnvironment processingEnv, ExecutableElement method) {\r\n+        return method.getParameters().stream()\r\n+                .map(element -> TypeDefinitionBuilder.build(processingEnv, element))\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/PrimitiveTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/PrimitiveTypeDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,48 +1,48 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.type.PrimitiveType;\n-import javax.lang.model.type.TypeMirror;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isPrimitiveType;\n-\n-/**\n- * {@link TypeDefinitionBuilder} for Java {@link PrimitiveType primitve type}\n- *\n- * @since 2.7.6\n- */\n-public class PrimitiveTypeDefinitionBuilder implements TypeDefinitionBuilder<PrimitiveType> {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        return isPrimitiveType(type);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, PrimitiveType type, TypeDefinition typeDefinition) {\n-        // DO NOTHING\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 3;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.type.PrimitiveType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isPrimitiveType;\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for Java {@link PrimitiveType primitve type}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class PrimitiveTypeDefinitionBuilder implements TypeDefinitionBuilder<PrimitiveType> {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        return isPrimitiveType(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, PrimitiveType type, TypeDefinition typeDefinition) {\r\n+        // DO NOTHING\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 3;\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/ServiceDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/ServiceDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,56 +1,56 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.TypeElement;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getPublicNonStaticMethods;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getResourceName;\n-\n-/**\n- * A Builder for {@link ServiceDefinition}\n- *\n- * @see ServiceDefinition\n- * @since 2.7.6\n- */\n-public interface ServiceDefinitionBuilder {\n-\n-    static ServiceDefinition build(ProcessingEnvironment processingEnv, TypeElement type) {\n-        ServiceDefinition serviceDefinition = new ServiceDefinition();\n-        serviceDefinition.setCanonicalName(type.toString());\n-        serviceDefinition.setCodeSource(getResourceName(type.toString()));\n-\n-        // Get all super types and interface excluding the specified type\n-        // and then the result will be added into ServiceDefinition#getTypes()\n-        getHierarchicalTypes(type.asType(), Object.class)\n-                .stream()\n-                .map(t -> TypeDefinitionBuilder.build(processingEnv, t))\n-                .forEach(serviceDefinition.getTypes()::add);\n-\n-        // Get all declared methods that will be added into ServiceDefinition#getMethods()\n-        getPublicNonStaticMethods(type, Object.class)\n-                .stream()\n-                .map(method -> MethodDefinitionBuilder.build(processingEnv, method))\n-                .forEach(serviceDefinition.getMethods()::add);\n-\n-        return serviceDefinition;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getPublicNonStaticMethods;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getResourceName;\r\n+\r\n+/**\r\n+ * A Builder for {@link ServiceDefinition}\r\n+ *\r\n+ * @see ServiceDefinition\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface ServiceDefinitionBuilder {\r\n+\r\n+    static ServiceDefinition build(ProcessingEnvironment processingEnv, TypeElement type) {\r\n+        ServiceDefinition serviceDefinition = new ServiceDefinition();\r\n+        serviceDefinition.setCanonicalName(type.toString());\r\n+        serviceDefinition.setCodeSource(getResourceName(type.toString()));\r\n+\r\n+        // Get all super types and interface excluding the specified type\r\n+        // and then the result will be added into ServiceDefinition#getTypes()\r\n+        getHierarchicalTypes(type.asType(), Object.class)\r\n+                .stream()\r\n+                .map(t -> TypeDefinitionBuilder.build(processingEnv, t))\r\n+                .forEach(serviceDefinition.getTypes()::add);\r\n+\r\n+        // Get all declared methods that will be added into ServiceDefinition#getMethods()\r\n+        getPublicNonStaticMethods(type, Object.class)\r\n+                .stream()\r\n+                .map(method -> MethodDefinitionBuilder.build(processingEnv, method))\r\n+                .forEach(serviceDefinition.getMethods()::add);\r\n+\r\n+        return serviceDefinition;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/SimpleTypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/SimpleTypeDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,49 +1,49 @@\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.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.metadata.annotation.processing.util.TypeUtils;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.type.DeclaredType;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isSimpleType;\n-\n-\n-/**\n- * {@link TypeDefinitionBuilder} for {@link TypeUtils#SIMPLE_TYPES Java Simple Type}\n- *\n- * @since 2.7.6\n- */\n-public class SimpleTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\n-\n-    @Override\n-    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\n-        return isSimpleType(type);\n-    }\n-\n-    @Override\n-    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\n-        //  DO NOTHING\n-    }\n-\n-    @Override\n-    public int getPriority() {\n-        return MIN_PRIORITY - 1;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.util.TypeUtils;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.type.DeclaredType;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isSimpleType;\r\n+\r\n+\r\n+/**\r\n+ * {@link TypeDefinitionBuilder} for {@link TypeUtils#SIMPLE_TYPES Java Simple Type}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class SimpleTypeDefinitionBuilder implements DeclaredTypeDefinitionBuilder {\r\n+\r\n+    @Override\r\n+    public boolean accept(ProcessingEnvironment processingEnv, DeclaredType type) {\r\n+        return isSimpleType(type);\r\n+    }\r\n+\r\n+    @Override\r\n+    public void build(ProcessingEnvironment processingEnv, DeclaredType type, TypeDefinition typeDefinition) {\r\n+        //  DO NOTHING\r\n+    }\r\n+\r\n+    @Override\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY - 1;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/builder/TypeDefinitionBuilder.java", "source2": "org/apache/dubbo/metadata/annotation/processing/builder/TypeDefinitionBuilder.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,96 +1,96 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.annotation.processing.builder;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-import org.apache.dubbo.metadata.definition.model.TypeDefinition;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.type.TypeMirror;\n-\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-\n-/**\n- * A class builds the instance of {@link TypeDefinition}\n- *\n- * @since 2.7.6\n- */\n-@SPI\n-public interface TypeDefinitionBuilder<T extends TypeMirror> extends Prioritized {\n-\n-    /**\n-     * Test the specified {@link TypeMirror type} is accepted or not\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param type          {@link TypeMirror type}\n-     * @return <code>true</code> if accepted\n-     */\n-    boolean accept(ProcessingEnvironment processingEnv, TypeMirror type);\n-\n-    /**\n-     * Build the instance of {@link TypeDefinition}\n-     *\n-     * @param processingEnv  {@link ProcessingEnvironment}\n-     * @param type           {@link T type}\n-     * @param typeDefinition {@link TypeDefinition} to be built\n-     * @return an instance of {@link TypeDefinition}\n-     */\n-    void build(ProcessingEnvironment processingEnv, T type, TypeDefinition typeDefinition);\n-\n-    /**\n-     * Build the instance of {@link TypeDefinition} from the specified {@link Element element}\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param element       {@link Element source element}\n-     * @return non-null\n-     */\n-    static TypeDefinition build(ProcessingEnvironment processingEnv, Element element) {\n-        TypeDefinition typeDefinition = build(processingEnv, element.asType());\n-        // Comment this code for the compatibility\n-        // typeDefinition.set$ref(element.toString());\n-        return typeDefinition;\n-    }\n-\n-    /**\n-     * Build the instance of {@link TypeDefinition} from the specified {@link TypeMirror type}\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param type          {@link TypeMirror type}\n-     * @return non-null\n-     */\n-    static TypeDefinition build(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        String typeName = type.toString();\n-        TypeDefinition typeDefinition = new TypeDefinition(typeName);\n-\n-        // Build by all instances of TypeDefinitionBuilder that were loaded By Java SPI\n-\n-        getExtensionLoader(TypeDefinitionBuilder.class)\n-                .getSupportedExtensionInstances()\n-                .stream()\n-//        load(TypeDefinitionBuilder.class, TypeDefinitionBuilder.class.getClassLoader())\n-                .filter(builder -> builder.accept(processingEnv, type))\n-                .findFirst()\n-                .ifPresent(builder -> {\n-                    builder.build(processingEnv, type, typeDefinition);\n-                    // typeDefinition.setTypeBuilderName(builder.getClass().getName());\n-                });\n-\n-        return typeDefinition;\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.metadata.annotation.processing.builder;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+import org.apache.dubbo.metadata.definition.model.TypeDefinition;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.type.TypeMirror;\r\n+\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+\r\n+/**\r\n+ * A class builds the instance of {@link TypeDefinition}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI\r\n+public interface TypeDefinitionBuilder<T extends TypeMirror> extends Prioritized {\r\n+\r\n+    /**\r\n+     * Test the specified {@link TypeMirror type} is accepted or not\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param type          {@link TypeMirror type}\r\n+     * @return <code>true</code> if accepted\r\n+     */\r\n+    boolean accept(ProcessingEnvironment processingEnv, TypeMirror type);\r\n+\r\n+    /**\r\n+     * Build the instance of {@link TypeDefinition}\r\n+     *\r\n+     * @param processingEnv  {@link ProcessingEnvironment}\r\n+     * @param type           {@link T type}\r\n+     * @param typeDefinition {@link TypeDefinition} to be built\r\n+     * @return an instance of {@link TypeDefinition}\r\n+     */\r\n+    void build(ProcessingEnvironment processingEnv, T type, TypeDefinition typeDefinition);\r\n+\r\n+    /**\r\n+     * Build the instance of {@link TypeDefinition} from the specified {@link Element element}\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param element       {@link Element source element}\r\n+     * @return non-null\r\n+     */\r\n+    static TypeDefinition build(ProcessingEnvironment processingEnv, Element element) {\r\n+        TypeDefinition typeDefinition = build(processingEnv, element.asType());\r\n+        // Comment this code for the compatibility\r\n+        // typeDefinition.set$ref(element.toString());\r\n+        return typeDefinition;\r\n+    }\r\n+\r\n+    /**\r\n+     * Build the instance of {@link TypeDefinition} from the specified {@link TypeMirror type}\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param type          {@link TypeMirror type}\r\n+     * @return non-null\r\n+     */\r\n+    static TypeDefinition build(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        String typeName = type.toString();\r\n+        TypeDefinition typeDefinition = new TypeDefinition(typeName);\r\n+\r\n+        // Build by all instances of TypeDefinitionBuilder that were loaded By Java SPI\r\n+\r\n+        getExtensionLoader(TypeDefinitionBuilder.class)\r\n+                .getSupportedExtensionInstances()\r\n+                .stream()\r\n+//        load(TypeDefinitionBuilder.class, TypeDefinitionBuilder.class.getClassLoader())\r\n+                .filter(builder -> builder.accept(processingEnv, type))\r\n+                .findFirst()\r\n+                .ifPresent(builder -> {\r\n+                    builder.build(processingEnv, type, typeDefinition);\r\n+                    // typeDefinition.setTypeBuilderName(builder.getClass().getName());\r\n+                });\r\n+\r\n+        return typeDefinition;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/AbstractAnnotatedMethodParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/AbstractAnnotatedMethodParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,52 +1,52 @@\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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getValue;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation\n- *\n- * @since 2.7.6\n- */\n-public abstract class AbstractAnnotatedMethodParameterProcessor implements AnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public final void process(AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        String annotationValue = getAnnotationValue(annotation, parameter, parameterIndex);\n-        String defaultValue = getDefaultValue(annotation, parameter, parameterIndex);\n-        process(annotationValue, defaultValue, annotation, parameter, parameterIndex, method, restMethodMetadata);\n-    }\n-\n-    protected abstract void process(String annotationValue, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex,\n-                                    ExecutableElement method, RestMethodMetadata restMethodMetadata);\n-\n-    protected String getAnnotationValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\n-        return getValue(annotation);\n-    }\n-\n-    protected String getDefaultValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\n-        return buildDefaultValue(parameterIndex);\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getValue;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public abstract class AbstractAnnotatedMethodParameterProcessor implements AnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public final void process(AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        String annotationValue = getAnnotationValue(annotation, parameter, parameterIndex);\r\n+        String defaultValue = getDefaultValue(annotation, parameter, parameterIndex);\r\n+        process(annotationValue, defaultValue, annotation, parameter, parameterIndex, method, restMethodMetadata);\r\n+    }\r\n+\r\n+    protected abstract void process(String annotationValue, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex,\r\n+                                    ExecutableElement method, RestMethodMetadata restMethodMetadata);\r\n+\r\n+    protected String getAnnotationValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\r\n+        return getValue(annotation);\r\n+    }\r\n+\r\n+    protected String getDefaultValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\r\n+        return buildDefaultValue(parameterIndex);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/AbstractServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/AbstractServiceRestMetadataResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,291 +1,291 @@\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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.metadata.annotation.processing.util.ExecutableElementComparator;\n-import org.apache.dubbo.metadata.definition.model.MethodDefinition;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.element.VariableElement;\n-import javax.lang.model.util.Elements;\n-import java.util.HashMap;\n-import java.util.LinkedHashMap;\n-import java.util.LinkedHashSet;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Optional;\n-import java.util.Set;\n-import java.util.function.Function;\n-import java.util.stream.Collectors;\n-\n-import static java.lang.ThreadLocal.withInitial;\n-import static java.util.Collections.emptyList;\n-import static java.util.Collections.sort;\n-import static java.util.Optional.empty;\n-import static java.util.Optional.of;\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-import static org.apache.dubbo.metadata.annotation.processing.builder.MethodDefinitionBuilder.build;\n-import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.info;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getOverrideMethod;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getPublicNonStaticMethods;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getGroup;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getVersion;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.resolveServiceInterfaceName;\n-\n-/**\n- * Abstract {@link ServiceRestMetadataResolver} implementation\n- *\n- * @since 2.7.6\n- */\n-public abstract class AbstractServiceRestMetadataResolver implements ServiceRestMetadataResolver {\n-\n-    private final static ThreadLocal<Map<String, Object>> threadLocalCache = withInitial(HashMap::new);\n-\n-    private final static Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = loadAnnotatedMethodParameterProcessors();\n-\n-    private final String processorName = getClass().getSimpleName();\n-\n-    @Override\n-    public final ServiceRestMetadata resolve(ProcessingEnvironment processingEnv,\n-                                             TypeElement serviceType,\n-                                             Set<? extends TypeElement> annotations) {\n-\n-        info(\"%s is processing the service type[%s] with annotations[%s]\", processorName, serviceType,\n-                annotations.stream().map(t -> \"@\" + t.toString()).collect(Collectors.joining(\",\")));\n-\n-        ServiceRestMetadata serviceRestMetadata = new ServiceRestMetadata();\n-\n-        Elements elements = processingEnv.getElementUtils();\n-\n-        try {\n-            AnnotationMirror serviceAnnotation = getAnnotation(serviceType);\n-            String serviceInterfaceName = resolveServiceInterfaceName(serviceType, serviceAnnotation);\n-            serviceRestMetadata.setServiceInterface(serviceInterfaceName);\n-            serviceRestMetadata.setGroup(getGroup(serviceAnnotation));\n-            serviceRestMetadata.setVersion(getVersion(serviceAnnotation));\n-\n-            TypeElement serviceInterfaceType = elements.getTypeElement(serviceInterfaceName);\n-\n-            List<? extends ExecutableElement> serviceMethods = new LinkedList<>(getPublicNonStaticMethods(serviceInterfaceType, Object.class));\n-\n-            // Sorts\n-            sort(serviceMethods, ExecutableElementComparator.INSTANCE);\n-\n-            serviceMethods.forEach(serviceMethod -> {\n-                resolveRestMethodMetadata(processingEnv, serviceType, serviceInterfaceType, serviceMethod)\n-                        .ifPresent(serviceRestMetadata.getMeta()::add);\n-            });\n-\n-        } finally {\n-            clearCache();\n-        }\n-\n-        info(\"The %s's process result : %s\", processorName, serviceRestMetadata);\n-\n-        return serviceRestMetadata;\n-    }\n-\n-    protected Optional<RestMethodMetadata> resolveRestMethodMetadata(ProcessingEnvironment processingEnv,\n-                                                                     TypeElement serviceType,\n-                                                                     TypeElement serviceInterfaceType,\n-                                                                     ExecutableElement serviceMethod) {\n-\n-        ExecutableElement restCapableMethod = findRestCapableMethod(processingEnv, serviceType, serviceInterfaceType, serviceMethod);\n-\n-        if (restCapableMethod == null) { // if can't be found\n-            return empty();\n-        }\n-\n-        String requestPath = resolveRequestPath(processingEnv, serviceType, restCapableMethod); // requestPath is required\n-\n-        if (requestPath == null) {\n-            return empty();\n-        }\n-\n-        String requestMethod = resolveRequestMethod(processingEnv, serviceType, restCapableMethod); // requestMethod is required\n-\n-        if (requestMethod == null) {\n-            return empty();\n-        }\n-\n-        RestMethodMetadata metadata = new RestMethodMetadata();\n-\n-        MethodDefinition methodDefinition = resolveMethodDefinition(processingEnv, serviceType, restCapableMethod);\n-        // Set MethodDefinition\n-        metadata.setMethod(methodDefinition);\n-\n-        // process the annotated method parameters\n-        processAnnotatedMethodParameters(restCapableMethod, serviceType, metadata);\n-\n-        // process produces\n-        Set<String> produces = new LinkedHashSet<>();\n-        processProduces(processingEnv, serviceType, restCapableMethod, produces);\n-\n-        // process consumes\n-        Set<String> consumes = new LinkedHashSet<>();\n-        processConsumes(processingEnv, serviceType, restCapableMethod, consumes);\n-\n-        // Initialize RequestMetadata\n-        RequestMetadata request = metadata.getRequest();\n-        request.setPath(requestPath);\n-        request.setMethod(requestMethod);\n-        request.setProduces(produces);\n-        request.setConsumes(consumes);\n-\n-        // Post-Process\n-        postProcessRestMethodMetadata(processingEnv, serviceType, serviceMethod, metadata);\n-\n-        return of(metadata);\n-    }\n-\n-    /**\n-     * Find the method with the capable for REST from the specified service method and its override method\n-     *\n-     * @param processingEnv        {@link ProcessingEnvironment}\n-     * @param serviceType\n-     * @param serviceInterfaceType\n-     * @param serviceMethod\n-     * @return <code>null</code> if can't be found\n-     */\n-    private ExecutableElement findRestCapableMethod(ProcessingEnvironment processingEnv,\n-                                                    TypeElement serviceType,\n-                                                    TypeElement serviceInterfaceType,\n-                                                    ExecutableElement serviceMethod) {\n-        // try to judge the override first\n-        ExecutableElement overrideMethod = getOverrideMethod(processingEnv, serviceType, serviceMethod);\n-        if (supports(processingEnv, serviceType, serviceInterfaceType, overrideMethod)) {\n-            return overrideMethod;\n-        }\n-        // or, try to judge the declared method\n-        return supports(processingEnv, serviceType, serviceInterfaceType, serviceMethod) ? serviceMethod : null;\n-    }\n-\n-    /**\n-     * Does the specified method support REST or not ?\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param method        the method may be declared on the interface or class\n-     * @return if supports, return <code>true</code>, or <code>false</code>\n-     */\n-    protected abstract boolean supports(ProcessingEnvironment processingEnv,\n-                                        TypeElement serviceType,\n-                                        TypeElement serviceInterfaceType,\n-                                        ExecutableElement method);\n-\n-\n-    /**\n-     * Post-Process for {@link RestMethodMetadata}, sub-type could override this method for further works\n-     *\n-     * @param processingEnv {@link ProcessingEnvironment}\n-     * @param serviceType   The type that @Service annotated\n-     * @param method        The public method of <code>serviceType</code>\n-     * @param metadata      {@link RestMethodMetadata} maybe updated\n-     */\n-    protected void postProcessRestMethodMetadata(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                                 ExecutableElement method, RestMethodMetadata metadata) {\n-    }\n-\n-    protected abstract String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                                 ExecutableElement method);\n-\n-    protected abstract String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                                   ExecutableElement method);\n-\n-    protected MethodDefinition resolveMethodDefinition(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                                       ExecutableElement method) {\n-        return build(processingEnv, method);\n-    }\n-\n-    protected void processAnnotatedMethodParameters(ExecutableElement method, TypeElement type,\n-                                                    RestMethodMetadata metadata) {\n-        List<? extends VariableElement> methodParameters = method.getParameters();\n-        int size = methodParameters.size();\n-        for (int i = 0; i < size; i++) {\n-            VariableElement parameter = methodParameters.get(i);\n-            // Add indexed parameter name\n-            metadata.addIndexToName(i, parameter.getSimpleName().toString());\n-            processAnnotatedMethodParameter(parameter, i, method, type, metadata);\n-        }\n-    }\n-\n-    protected void processAnnotatedMethodParameter(VariableElement parameter, int parameterIndex,\n-                                                   ExecutableElement method, TypeElement serviceType,\n-                                                   RestMethodMetadata metadata) {\n-\n-        parameter.getAnnotationMirrors().forEach(annotation -> {\n-            String annotationType = annotation.getAnnotationType().toString();\n-            parameterProcessorsMap.getOrDefault(annotationType, emptyList())\n-                    .forEach(parameterProcessor -> {\n-                        parameterProcessor.process(annotation, parameter, parameterIndex, method, metadata);\n-                    });\n-        });\n-    }\n-\n-    protected abstract void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                            ExecutableElement method, Set<String> produces);\n-\n-    protected abstract void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                            ExecutableElement method, Set<String> consumes);\n-\n-    protected static final void put(String name, Object value) {\n-        Map<String, Object> cache = getCache();\n-        cache.put(name, value);\n-    }\n-\n-    protected static final <T> T get(String name) throws ClassCastException {\n-        Map<String, Object> cache = getCache();\n-        return (T) cache.get(name);\n-    }\n-\n-    protected static final <V> V computeIfAbsent(String name, Function<? super String, ? extends V> mappingFunction) {\n-        return (V) getCache().computeIfAbsent(name, mappingFunction);\n-    }\n-\n-    private static Map<String, List<AnnotatedMethodParameterProcessor>> loadAnnotatedMethodParameterProcessors() {\n-        Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = new LinkedHashMap<>();\n-\n-//        load(AnnotatedMethodParameterProcessor.class, AnnotatedMethodParameterProcessor.class.getClassLoader())\n-\n-        getExtensionLoader(AnnotatedMethodParameterProcessor.class)\n-                .getSupportedExtensionInstances()\n-                .forEach(processor -> {\n-                    List<AnnotatedMethodParameterProcessor> processors =\n-                            parameterProcessorsMap.computeIfAbsent(processor.getAnnotationType(), k -> new LinkedList<>());\n-                    processors.add(processor);\n-                });\n-\n-        return parameterProcessorsMap;\n-    }\n-\n-    private static Map<String, Object> getCache() {\n-        return threadLocalCache.get();\n-    }\n-\n-    private static void clearCache() {\n-        Map<String, Object> cache = getCache();\n-        cache.clear();\n-        threadLocalCache.remove();\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.util.ExecutableElementComparator;\r\n+import org.apache.dubbo.metadata.definition.model.MethodDefinition;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import javax.lang.model.util.Elements;\r\n+import java.util.HashMap;\r\n+import java.util.LinkedHashMap;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Optional;\r\n+import java.util.Set;\r\n+import java.util.function.Function;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.lang.ThreadLocal.withInitial;\r\n+import static java.util.Collections.emptyList;\r\n+import static java.util.Collections.sort;\r\n+import static java.util.Optional.empty;\r\n+import static java.util.Optional.of;\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+import static org.apache.dubbo.metadata.annotation.processing.builder.MethodDefinitionBuilder.build;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.info;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getOverrideMethod;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MethodUtils.getPublicNonStaticMethods;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getGroup;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getVersion;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.resolveServiceInterfaceName;\r\n+\r\n+/**\r\n+ * Abstract {@link ServiceRestMetadataResolver} implementation\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public abstract class AbstractServiceRestMetadataResolver implements ServiceRestMetadataResolver {\r\n+\r\n+    private final static ThreadLocal<Map<String, Object>> threadLocalCache = withInitial(HashMap::new);\r\n+\r\n+    private final static Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = loadAnnotatedMethodParameterProcessors();\r\n+\r\n+    private final String processorName = getClass().getSimpleName();\r\n+\r\n+    @Override\r\n+    public final ServiceRestMetadata resolve(ProcessingEnvironment processingEnv,\r\n+                                             TypeElement serviceType,\r\n+                                             Set<? extends TypeElement> annotations) {\r\n+\r\n+        info(\"%s is processing the service type[%s] with annotations[%s]\", processorName, serviceType,\r\n+                annotations.stream().map(t -> \"@\" + t.toString()).collect(Collectors.joining(\",\")));\r\n+\r\n+        ServiceRestMetadata serviceRestMetadata = new ServiceRestMetadata();\r\n+\r\n+        Elements elements = processingEnv.getElementUtils();\r\n+\r\n+        try {\r\n+            AnnotationMirror serviceAnnotation = getAnnotation(serviceType);\r\n+            String serviceInterfaceName = resolveServiceInterfaceName(serviceType, serviceAnnotation);\r\n+            serviceRestMetadata.setServiceInterface(serviceInterfaceName);\r\n+            serviceRestMetadata.setGroup(getGroup(serviceAnnotation));\r\n+            serviceRestMetadata.setVersion(getVersion(serviceAnnotation));\r\n+\r\n+            TypeElement serviceInterfaceType = elements.getTypeElement(serviceInterfaceName);\r\n+\r\n+            List<? extends ExecutableElement> serviceMethods = new LinkedList<>(getPublicNonStaticMethods(serviceInterfaceType, Object.class));\r\n+\r\n+            // Sorts\r\n+            sort(serviceMethods, ExecutableElementComparator.INSTANCE);\r\n+\r\n+            serviceMethods.forEach(serviceMethod -> {\r\n+                resolveRestMethodMetadata(processingEnv, serviceType, serviceInterfaceType, serviceMethod)\r\n+                        .ifPresent(serviceRestMetadata.getMeta()::add);\r\n+            });\r\n+\r\n+        } finally {\r\n+            clearCache();\r\n+        }\r\n+\r\n+        info(\"The %s's process result : %s\", processorName, serviceRestMetadata);\r\n+\r\n+        return serviceRestMetadata;\r\n+    }\r\n+\r\n+    protected Optional<RestMethodMetadata> resolveRestMethodMetadata(ProcessingEnvironment processingEnv,\r\n+                                                                     TypeElement serviceType,\r\n+                                                                     TypeElement serviceInterfaceType,\r\n+                                                                     ExecutableElement serviceMethod) {\r\n+\r\n+        ExecutableElement restCapableMethod = findRestCapableMethod(processingEnv, serviceType, serviceInterfaceType, serviceMethod);\r\n+\r\n+        if (restCapableMethod == null) { // if can't be found\r\n+            return empty();\r\n+        }\r\n+\r\n+        String requestPath = resolveRequestPath(processingEnv, serviceType, restCapableMethod); // requestPath is required\r\n+\r\n+        if (requestPath == null) {\r\n+            return empty();\r\n+        }\r\n+\r\n+        String requestMethod = resolveRequestMethod(processingEnv, serviceType, restCapableMethod); // requestMethod is required\r\n+\r\n+        if (requestMethod == null) {\r\n+            return empty();\r\n+        }\r\n+\r\n+        RestMethodMetadata metadata = new RestMethodMetadata();\r\n+\r\n+        MethodDefinition methodDefinition = resolveMethodDefinition(processingEnv, serviceType, restCapableMethod);\r\n+        // Set MethodDefinition\r\n+        metadata.setMethod(methodDefinition);\r\n+\r\n+        // process the annotated method parameters\r\n+        processAnnotatedMethodParameters(restCapableMethod, serviceType, metadata);\r\n+\r\n+        // process produces\r\n+        Set<String> produces = new LinkedHashSet<>();\r\n+        processProduces(processingEnv, serviceType, restCapableMethod, produces);\r\n+\r\n+        // process consumes\r\n+        Set<String> consumes = new LinkedHashSet<>();\r\n+        processConsumes(processingEnv, serviceType, restCapableMethod, consumes);\r\n+\r\n+        // Initialize RequestMetadata\r\n+        RequestMetadata request = metadata.getRequest();\r\n+        request.setPath(requestPath);\r\n+        request.setMethod(requestMethod);\r\n+        request.setProduces(produces);\r\n+        request.setConsumes(consumes);\r\n+\r\n+        // Post-Process\r\n+        postProcessRestMethodMetadata(processingEnv, serviceType, serviceMethod, metadata);\r\n+\r\n+        return of(metadata);\r\n+    }\r\n+\r\n+    /**\r\n+     * Find the method with the capable for REST from the specified service method and its override method\r\n+     *\r\n+     * @param processingEnv        {@link ProcessingEnvironment}\r\n+     * @param serviceType\r\n+     * @param serviceInterfaceType\r\n+     * @param serviceMethod\r\n+     * @return <code>null</code> if can't be found\r\n+     */\r\n+    private ExecutableElement findRestCapableMethod(ProcessingEnvironment processingEnv,\r\n+                                                    TypeElement serviceType,\r\n+                                                    TypeElement serviceInterfaceType,\r\n+                                                    ExecutableElement serviceMethod) {\r\n+        // try to judge the override first\r\n+        ExecutableElement overrideMethod = getOverrideMethod(processingEnv, serviceType, serviceMethod);\r\n+        if (supports(processingEnv, serviceType, serviceInterfaceType, overrideMethod)) {\r\n+            return overrideMethod;\r\n+        }\r\n+        // or, try to judge the declared method\r\n+        return supports(processingEnv, serviceType, serviceInterfaceType, serviceMethod) ? serviceMethod : null;\r\n+    }\r\n+\r\n+    /**\r\n+     * Does the specified method support REST or not ?\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param method        the method may be declared on the interface or class\r\n+     * @return if supports, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    protected abstract boolean supports(ProcessingEnvironment processingEnv,\r\n+                                        TypeElement serviceType,\r\n+                                        TypeElement serviceInterfaceType,\r\n+                                        ExecutableElement method);\r\n+\r\n+\r\n+    /**\r\n+     * Post-Process for {@link RestMethodMetadata}, sub-type could override this method for further works\r\n+     *\r\n+     * @param processingEnv {@link ProcessingEnvironment}\r\n+     * @param serviceType   The type that @Service annotated\r\n+     * @param method        The public method of <code>serviceType</code>\r\n+     * @param metadata      {@link RestMethodMetadata} maybe updated\r\n+     */\r\n+    protected void postProcessRestMethodMetadata(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                                 ExecutableElement method, RestMethodMetadata metadata) {\r\n+    }\r\n+\r\n+    protected abstract String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                                 ExecutableElement method);\r\n+\r\n+    protected abstract String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                                   ExecutableElement method);\r\n+\r\n+    protected MethodDefinition resolveMethodDefinition(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                                       ExecutableElement method) {\r\n+        return build(processingEnv, method);\r\n+    }\r\n+\r\n+    protected void processAnnotatedMethodParameters(ExecutableElement method, TypeElement type,\r\n+                                                    RestMethodMetadata metadata) {\r\n+        List<? extends VariableElement> methodParameters = method.getParameters();\r\n+        int size = methodParameters.size();\r\n+        for (int i = 0; i < size; i++) {\r\n+            VariableElement parameter = methodParameters.get(i);\r\n+            // Add indexed parameter name\r\n+            metadata.addIndexToName(i, parameter.getSimpleName().toString());\r\n+            processAnnotatedMethodParameter(parameter, i, method, type, metadata);\r\n+        }\r\n+    }\r\n+\r\n+    protected void processAnnotatedMethodParameter(VariableElement parameter, int parameterIndex,\r\n+                                                   ExecutableElement method, TypeElement serviceType,\r\n+                                                   RestMethodMetadata metadata) {\r\n+\r\n+        parameter.getAnnotationMirrors().forEach(annotation -> {\r\n+            String annotationType = annotation.getAnnotationType().toString();\r\n+            parameterProcessorsMap.getOrDefault(annotationType, emptyList())\r\n+                    .forEach(parameterProcessor -> {\r\n+                        parameterProcessor.process(annotation, parameter, parameterIndex, method, metadata);\r\n+                    });\r\n+        });\r\n+    }\r\n+\r\n+    protected abstract void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                            ExecutableElement method, Set<String> produces);\r\n+\r\n+    protected abstract void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                            ExecutableElement method, Set<String> consumes);\r\n+\r\n+    protected static final void put(String name, Object value) {\r\n+        Map<String, Object> cache = getCache();\r\n+        cache.put(name, value);\r\n+    }\r\n+\r\n+    protected static final <T> T get(String name) throws ClassCastException {\r\n+        Map<String, Object> cache = getCache();\r\n+        return (T) cache.get(name);\r\n+    }\r\n+\r\n+    protected static final <V> V computeIfAbsent(String name, Function<? super String, ? extends V> mappingFunction) {\r\n+        return (V) getCache().computeIfAbsent(name, mappingFunction);\r\n+    }\r\n+\r\n+    private static Map<String, List<AnnotatedMethodParameterProcessor>> loadAnnotatedMethodParameterProcessors() {\r\n+        Map<String, List<AnnotatedMethodParameterProcessor>> parameterProcessorsMap = new LinkedHashMap<>();\r\n+\r\n+//        load(AnnotatedMethodParameterProcessor.class, AnnotatedMethodParameterProcessor.class.getClassLoader())\r\n+\r\n+        getExtensionLoader(AnnotatedMethodParameterProcessor.class)\r\n+                .getSupportedExtensionInstances()\r\n+                .forEach(processor -> {\r\n+                    List<AnnotatedMethodParameterProcessor> processors =\r\n+                            parameterProcessorsMap.computeIfAbsent(processor.getAnnotationType(), k -> new LinkedList<>());\r\n+                    processors.add(processor);\r\n+                });\r\n+\r\n+        return parameterProcessorsMap;\r\n+    }\r\n+\r\n+    private static Map<String, Object> getCache() {\r\n+        return threadLocalCache.get();\r\n+    }\r\n+\r\n+    private static void clearCache() {\r\n+        Map<String, Object> cache = getCache();\r\n+        cache.clear();\r\n+        threadLocalCache.remove();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/AnnotatedMethodParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/AnnotatedMethodParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,64 +1,64 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-/**\n- * The interface to process the parameter of method that was annotated\n- *\n- * @since 2.7.6\n- */\n-@SPI\n-public interface AnnotatedMethodParameterProcessor extends Prioritized {\n-\n-    /**\n-     * The string presenting the annotation type\n-     *\n-     * @return non-null\n-     */\n-    String getAnnotationType();\n-\n-    /**\n-     * Process the specified method {@link VariableElement parameter}\n-     *\n-     * @param annotation         {@link AnnotationMirror the target annotation} whose type is {@link #getAnnotationType()}\n-     * @param parameter          {@link VariableElement method parameter}\n-     * @param parameterIndex     the index of parameter in the method\n-     * @param method             {@link ExecutableElement method that parameter belongs to}\n-     * @param restMethodMetadata {@link RestMethodMetadata the metadata is used to update}\n-     */\n-    void process(AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method,\n-                 RestMethodMetadata restMethodMetadata);\n-\n-\n-    /**\n-     * Build the default value\n-     *\n-     * @param parameterIndex the index of parameter\n-     * @return the placeholder\n-     */\n-    static String buildDefaultValue(int parameterIndex) {\n-        return \"{\" + parameterIndex + \"}\";\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+/**\r\n+ * The interface to process the parameter of method that was annotated\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI\r\n+public interface AnnotatedMethodParameterProcessor extends Prioritized {\r\n+\r\n+    /**\r\n+     * The string presenting the annotation type\r\n+     *\r\n+     * @return non-null\r\n+     */\r\n+    String getAnnotationType();\r\n+\r\n+    /**\r\n+     * Process the specified method {@link VariableElement parameter}\r\n+     *\r\n+     * @param annotation         {@link AnnotationMirror the target annotation} whose type is {@link #getAnnotationType()}\r\n+     * @param parameter          {@link VariableElement method parameter}\r\n+     * @param parameterIndex     the index of parameter in the method\r\n+     * @param method             {@link ExecutableElement method that parameter belongs to}\r\n+     * @param restMethodMetadata {@link RestMethodMetadata the metadata is used to update}\r\n+     */\r\n+    void process(AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method,\r\n+                 RestMethodMetadata restMethodMetadata);\r\n+\r\n+\r\n+    /**\r\n+     * Build the default value\r\n+     *\r\n+     * @param parameterIndex the index of parameter\r\n+     * @return the placeholder\r\n+     */\r\n+    static String buildDefaultValue(int parameterIndex) {\r\n+        return \"{\" + parameterIndex + \"}\";\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/DefaultServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/DefaultServiceRestMetadataResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,186 +1,186 @@\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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.common.convert.Converter;\n-import org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.JAXRSServiceRestMetadataResolver;\n-import org.apache.dubbo.metadata.annotation.processing.rest.springmvc.SpringMvcServiceRestMetadataResolver;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.element.VariableElement;\n-import javax.lang.model.type.TypeMirror;\n-import java.util.LinkedHashSet;\n-import java.util.List;\n-import java.util.Set;\n-\n-import static java.lang.String.valueOf;\n-import static java.util.Arrays.asList;\n-import static org.apache.dubbo.common.convert.Converter.getConverter;\n-import static org.apache.dubbo.common.utils.ClassUtils.forName;\n-import static org.apache.dubbo.common.utils.StringUtils.SLASH_CHAR;\n-import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.warn;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.resolveServiceInterfaceName;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.findInterface;\n-\n-/**\n- * The default implementation of {@link ServiceRestMetadataResolver}\n- *\n- * @since 2.7.6\n- */\n-public class DefaultServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    private static final char PACKAGE_SEPARATOR = '.';\n-\n-    private static final char PATH_SEPARATOR = SLASH_CHAR;\n-\n-    private static final String HTTP_REQUEST_METHOD = \"POST\";\n-\n-    private static final List<String> MEDIA_TYPES = asList(\n-            \"application/json;\",\n-            \"application/*+json\",\n-            \"application/xml;charset=UTF-8\",\n-            \"text/xml;charset=UTF-8\",\n-            \"application/*+xml;charset=UTF-8\"\n-    );\n-\n-    private final Set<ExecutableElement> hasComplexParameterTypeMethods = new LinkedHashSet<>();\n-\n-    @Override\n-    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\n-        return !JAXRSServiceRestMetadataResolver.supports(serviceType) &&\n-                !SpringMvcServiceRestMetadataResolver.supports(serviceType);\n-    }\n-\n-    @Override\n-    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                               TypeElement serviceInterfaceType, ExecutableElement method) {\n-        // TODO add some criterion\n-        return true;\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                        ExecutableElement method) {\n-\n-        AnnotationMirror serviceAnnotation = getAnnotation(serviceType);\n-\n-        String serviceInterfaceName = resolveServiceInterfaceName(serviceType, serviceAnnotation);\n-\n-        TypeMirror serviceInterface = findInterface(serviceType.asType(), serviceInterfaceName);\n-\n-        StringBuilder requestPathBuilder = new StringBuilder();\n-        // the name of service type as the root path\n-        String rootPath = buildRootPath(serviceInterface);\n-        // the method name as the sub path\n-        String subPath = buildSubPath(method);\n-\n-        requestPathBuilder.append(rootPath).append(subPath);\n-        // the methods' parameters as the the path variables\n-        List<? extends VariableElement> parameters = method.getParameters();\n-\n-        for (int i = 0; i < parameters.size(); i++) {\n-            VariableElement parameter = parameters.get(i);\n-            TypeMirror parameterType = parameter.asType();\n-            if (isComplexType(parameterType)) {\n-                if (addComplexParameterType(method)) {\n-                    continue;\n-                } else {\n-                    // The count of complex types must be only one, or return immediately\n-                    warn(\"The method[%s] contains more than one complex parameter type, \" +\n-                            \"thus it will not be chosen as the REST service\", method.toString());\n-                }\n-            }\n-            String parameterName = parameter.getSimpleName().toString();\n-            // If \"-parameters\" option is enabled, take the parameter name as the path variable name,\n-            // or use the index of parameter\n-            String pathVariableName = isEnabledParametersCompilerOption(parameterName) ? parameterName : valueOf(i);\n-            requestPathBuilder.append(PATH_SEPARATOR).append(\"{\").append(pathVariableName).append(\"}\");\n-        }\n-\n-        return requestPathBuilder.toString();\n-    }\n-\n-    private String buildRootPath(TypeMirror serviceInterface) {\n-        return PATH_SEPARATOR + serviceInterface.toString().replace(PACKAGE_SEPARATOR, PATH_SEPARATOR);\n-    }\n-\n-    private String buildSubPath(ExecutableElement method) {\n-        return PATH_SEPARATOR + method.getSimpleName().toString();\n-    }\n-\n-    private boolean isEnabledParametersCompilerOption(String parameterName) {\n-        return !parameterName.startsWith(\"arg\");\n-    }\n-\n-    private boolean isComplexType(TypeMirror parameterType) {\n-        return !supportsPathVariableType(parameterType);\n-    }\n-\n-    /**\n-     * Supports the type of parameter or not, based by {@link Converter}'s conversion feature\n-     *\n-     * @param parameterType the type of parameter\n-     * @return if supports, this method will return <code>true</code>, or <code>false</code>\n-     */\n-    private boolean supportsPathVariableType(TypeMirror parameterType) {\n-        String className = parameterType.toString();\n-        ClassLoader classLoader = getClass().getClassLoader();\n-        boolean supported;\n-        try {\n-            Class<?> targetType = forName(className, classLoader);\n-            supported = getConverter(String.class, targetType) != null;\n-        } catch (ClassNotFoundException e) {\n-            supported = false;\n-        }\n-        return supported;\n-    }\n-\n-    @Override\n-    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                          ExecutableElement method) {\n-        return HTTP_REQUEST_METHOD;\n-    }\n-\n-    @Override\n-    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> produces) {\n-        TypeMirror returnType = method.getReturnType();\n-        if (isComplexType(returnType)) {\n-            produces.addAll(MEDIA_TYPES);\n-        }\n-    }\n-\n-    @Override\n-    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> consumes) {\n-        if (hasComplexParameterType(method)) {\n-            consumes.addAll(MEDIA_TYPES);\n-        }\n-    }\n-\n-    private boolean addComplexParameterType(ExecutableElement method) {\n-        return hasComplexParameterTypeMethods.add(method);\n-    }\n-\n-    private boolean hasComplexParameterType(ExecutableElement method) {\n-        return hasComplexParameterTypeMethods.remove(method);\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.common.convert.Converter;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.jaxrs.JAXRSServiceRestMetadataResolver;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.springmvc.SpringMvcServiceRestMetadataResolver;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.util.Arrays.asList;\r\n+import static org.apache.dubbo.common.convert.Converter.getConverter;\r\n+import static org.apache.dubbo.common.utils.ClassUtils.forName;\r\n+import static org.apache.dubbo.common.utils.StringUtils.SLASH_CHAR;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.LoggerUtils.warn;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.getAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.resolveServiceInterfaceName;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.findInterface;\r\n+\r\n+/**\r\n+ * The default implementation of {@link ServiceRestMetadataResolver}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class DefaultServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    private static final char PACKAGE_SEPARATOR = '.';\r\n+\r\n+    private static final char PATH_SEPARATOR = SLASH_CHAR;\r\n+\r\n+    private static final String HTTP_REQUEST_METHOD = \"POST\";\r\n+\r\n+    private static final List<String> MEDIA_TYPES = asList(\r\n+            \"application/json;\",\r\n+            \"application/*+json\",\r\n+            \"application/xml;charset=UTF-8\",\r\n+            \"text/xml;charset=UTF-8\",\r\n+            \"application/*+xml;charset=UTF-8\"\r\n+    );\r\n+\r\n+    private final Set<ExecutableElement> hasComplexParameterTypeMethods = new LinkedHashSet<>();\r\n+\r\n+    @Override\r\n+    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\r\n+        return !JAXRSServiceRestMetadataResolver.supports(serviceType) &&\r\n+                !SpringMvcServiceRestMetadataResolver.supports(serviceType);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                               TypeElement serviceInterfaceType, ExecutableElement method) {\r\n+        // TODO add some criterion\r\n+        return true;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                        ExecutableElement method) {\r\n+\r\n+        AnnotationMirror serviceAnnotation = getAnnotation(serviceType);\r\n+\r\n+        String serviceInterfaceName = resolveServiceInterfaceName(serviceType, serviceAnnotation);\r\n+\r\n+        TypeMirror serviceInterface = findInterface(serviceType.asType(), serviceInterfaceName);\r\n+\r\n+        StringBuilder requestPathBuilder = new StringBuilder();\r\n+        // the name of service type as the root path\r\n+        String rootPath = buildRootPath(serviceInterface);\r\n+        // the method name as the sub path\r\n+        String subPath = buildSubPath(method);\r\n+\r\n+        requestPathBuilder.append(rootPath).append(subPath);\r\n+        // the methods' parameters as the the path variables\r\n+        List<? extends VariableElement> parameters = method.getParameters();\r\n+\r\n+        for (int i = 0; i < parameters.size(); i++) {\r\n+            VariableElement parameter = parameters.get(i);\r\n+            TypeMirror parameterType = parameter.asType();\r\n+            if (isComplexType(parameterType)) {\r\n+                if (addComplexParameterType(method)) {\r\n+                    continue;\r\n+                } else {\r\n+                    // The count of complex types must be only one, or return immediately\r\n+                    warn(\"The method[%s] contains more than one complex parameter type, \" +\r\n+                            \"thus it will not be chosen as the REST service\", method.toString());\r\n+                }\r\n+            }\r\n+            String parameterName = parameter.getSimpleName().toString();\r\n+            // If \"-parameters\" option is enabled, take the parameter name as the path variable name,\r\n+            // or use the index of parameter\r\n+            String pathVariableName = isEnabledParametersCompilerOption(parameterName) ? parameterName : valueOf(i);\r\n+            requestPathBuilder.append(PATH_SEPARATOR).append(\"{\").append(pathVariableName).append(\"}\");\r\n+        }\r\n+\r\n+        return requestPathBuilder.toString();\r\n+    }\r\n+\r\n+    private String buildRootPath(TypeMirror serviceInterface) {\r\n+        return PATH_SEPARATOR + serviceInterface.toString().replace(PACKAGE_SEPARATOR, PATH_SEPARATOR);\r\n+    }\r\n+\r\n+    private String buildSubPath(ExecutableElement method) {\r\n+        return PATH_SEPARATOR + method.getSimpleName().toString();\r\n+    }\r\n+\r\n+    private boolean isEnabledParametersCompilerOption(String parameterName) {\r\n+        return !parameterName.startsWith(\"arg\");\r\n+    }\r\n+\r\n+    private boolean isComplexType(TypeMirror parameterType) {\r\n+        return !supportsPathVariableType(parameterType);\r\n+    }\r\n+\r\n+    /**\r\n+     * Supports the type of parameter or not, based by {@link Converter}'s conversion feature\r\n+     *\r\n+     * @param parameterType the type of parameter\r\n+     * @return if supports, this method will return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    private boolean supportsPathVariableType(TypeMirror parameterType) {\r\n+        String className = parameterType.toString();\r\n+        ClassLoader classLoader = getClass().getClassLoader();\r\n+        boolean supported;\r\n+        try {\r\n+            Class<?> targetType = forName(className, classLoader);\r\n+            supported = getConverter(String.class, targetType) != null;\r\n+        } catch (ClassNotFoundException e) {\r\n+            supported = false;\r\n+        }\r\n+        return supported;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                          ExecutableElement method) {\r\n+        return HTTP_REQUEST_METHOD;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> produces) {\r\n+        TypeMirror returnType = method.getReturnType();\r\n+        if (isComplexType(returnType)) {\r\n+            produces.addAll(MEDIA_TYPES);\r\n+        }\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> consumes) {\r\n+        if (hasComplexParameterType(method)) {\r\n+            consumes.addAll(MEDIA_TYPES);\r\n+        }\r\n+    }\r\n+\r\n+    private boolean addComplexParameterType(ExecutableElement method) {\r\n+        return hasComplexParameterTypeMethods.add(method);\r\n+    }\r\n+\r\n+    private boolean hasComplexParameterType(ExecutableElement method) {\r\n+        return hasComplexParameterTypeMethods.remove(method);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataAnnotationProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataAnnotationProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,86 +1,86 @@\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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.metadata.annotation.processing.AbstractServiceAnnotationProcessor;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.annotation.processing.Processor;\n-import javax.annotation.processing.RoundEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import java.io.IOException;\n-import java.util.LinkedHashSet;\n-import java.util.Set;\n-\n-import static javax.lang.model.util.ElementFilter.typesIn;\n-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\n-import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.isServiceAnnotationPresent;\n-\n-/**\n- * The {@link Processor} class to generate the metadata of REST from the classes that are annotated by Dubbo's\n- *\n- * @Service\n- * @see Processor\n- * @since 2.7.6\n- */\n-public class ServiceRestMetadataAnnotationProcessor extends AbstractServiceAnnotationProcessor {\n-\n-    private Set<ServiceRestMetadataResolver> metadataProcessors;\n-\n-    private ServiceRestMetadataStorage serviceRestMetadataWriter;\n-\n-    private Set<ServiceRestMetadata> serviceRestMetadata = new LinkedHashSet<>();\n-\n-    @Override\n-    public synchronized void init(ProcessingEnvironment processingEnv) {\n-        super.init(processingEnv);\n-        this.metadataProcessors = getExtensionLoader(ServiceRestMetadataResolver.class).getSupportedExtensionInstances();\n-        this.serviceRestMetadataWriter = new ServiceRestMetadataStorage(processingEnv);\n-    }\n-\n-    @Override\n-    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {\n-\n-        typesIn(roundEnv.getRootElements()).forEach(serviceType -> process(processingEnv, serviceType, annotations));\n-\n-        if (roundEnv.processingOver()) {\n-            try {\n-                serviceRestMetadataWriter.append(serviceRestMetadata);\n-            } catch (IOException e) {\n-                throw new IllegalStateException(e);\n-            }\n-        }\n-\n-        return false;\n-    }\n-\n-    private void process(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                         Set<? extends TypeElement> annotations) {\n-        metadataProcessors\n-                .stream()\n-                .filter(processor -> supports(processor, processingEnv, serviceType))\n-                .map(processor -> processor.resolve(processingEnv, serviceType, annotations))\n-                .forEach(serviceRestMetadata::add);\n-    }\n-\n-    private boolean supports(ServiceRestMetadataResolver processor, ProcessingEnvironment processingEnv,\n-                             TypeElement serviceType) {\n-        //  @Service must be present in service type\n-        return isServiceAnnotationPresent(serviceType) && processor.supports(processingEnv, serviceType);\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.AbstractServiceAnnotationProcessor;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.annotation.processing.Processor;\r\n+import javax.annotation.processing.RoundEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import java.io.IOException;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.Set;\r\n+\r\n+import static javax.lang.model.util.ElementFilter.typesIn;\r\n+import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.ServiceAnnotationUtils.isServiceAnnotationPresent;\r\n+\r\n+/**\r\n+ * The {@link Processor} class to generate the metadata of REST from the classes that are annotated by Dubbo's\r\n+ *\r\n+ * @Service\r\n+ * @see Processor\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ServiceRestMetadataAnnotationProcessor extends AbstractServiceAnnotationProcessor {\r\n+\r\n+    private Set<ServiceRestMetadataResolver> metadataProcessors;\r\n+\r\n+    private ServiceRestMetadataStorage serviceRestMetadataWriter;\r\n+\r\n+    private Set<ServiceRestMetadata> serviceRestMetadata = new LinkedHashSet<>();\r\n+\r\n+    @Override\r\n+    public synchronized void init(ProcessingEnvironment processingEnv) {\r\n+        super.init(processingEnv);\r\n+        this.metadataProcessors = getExtensionLoader(ServiceRestMetadataResolver.class).getSupportedExtensionInstances();\r\n+        this.serviceRestMetadataWriter = new ServiceRestMetadataStorage(processingEnv);\r\n+    }\r\n+\r\n+    @Override\r\n+    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {\r\n+\r\n+        typesIn(roundEnv.getRootElements()).forEach(serviceType -> process(processingEnv, serviceType, annotations));\r\n+\r\n+        if (roundEnv.processingOver()) {\r\n+            try {\r\n+                serviceRestMetadataWriter.append(serviceRestMetadata);\r\n+            } catch (IOException e) {\r\n+                throw new IllegalStateException(e);\r\n+            }\r\n+        }\r\n+\r\n+        return false;\r\n+    }\r\n+\r\n+    private void process(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                         Set<? extends TypeElement> annotations) {\r\n+        metadataProcessors\r\n+                .stream()\r\n+                .filter(processor -> supports(processor, processingEnv, serviceType))\r\n+                .map(processor -> processor.resolve(processingEnv, serviceType, annotations))\r\n+                .forEach(serviceRestMetadata::add);\r\n+    }\r\n+\r\n+    private boolean supports(ServiceRestMetadataResolver processor, ProcessingEnvironment processingEnv,\r\n+                             TypeElement serviceType) {\r\n+        //  @Service must be present in service type\r\n+        return isServiceAnnotationPresent(serviceType) && processor.supports(processingEnv, serviceType);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,55 +1,55 @@\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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.common.extension.SPI;\n-import org.apache.dubbo.common.lang.Prioritized;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.TypeElement;\n-import java.util.Set;\n-\n-/**\n- * The class to resolve {@link ServiceRestMetadata} based on Annotation Processor Tool\n- *\n- * @since 2.7.6\n- */\n-@SPI(\"default\")\n-public interface ServiceRestMetadataResolver extends Prioritized {\n-\n-    /**\n-     * Supports or not to the specified service type\n-     *\n-     * @param processingEnvironment {@link ProcessingEnvironment}\n-     * @param serviceType           Dubbo service type or interface\n-     * @return if supports, return <code>true</code>, or <code>false</code>\n-     */\n-    boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType);\n-\n-    /**\n-     * Resolve the {@link ServiceRestMetadata} from given service type\n-     *\n-     * @param processingEnvironment {@link ProcessingEnvironment}\n-     * @param serviceType           Dubbo service type or interface\n-     * @param annotations\n-     * @return non-null\n-     */\n-    ServiceRestMetadata resolve(ProcessingEnvironment processingEnvironment,\n-                                TypeElement serviceType,\n-                                Set<? extends TypeElement> annotations);\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+import org.apache.dubbo.common.lang.Prioritized;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.TypeElement;\r\n+import java.util.Set;\r\n+\r\n+/**\r\n+ * The class to resolve {@link ServiceRestMetadata} based on Annotation Processor Tool\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+@SPI(\"default\")\r\n+public interface ServiceRestMetadataResolver extends Prioritized {\r\n+\r\n+    /**\r\n+     * Supports or not to the specified service type\r\n+     *\r\n+     * @param processingEnvironment {@link ProcessingEnvironment}\r\n+     * @param serviceType           Dubbo service type or interface\r\n+     * @return if supports, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType);\r\n+\r\n+    /**\r\n+     * Resolve the {@link ServiceRestMetadata} from given service type\r\n+     *\r\n+     * @param processingEnvironment {@link ProcessingEnvironment}\r\n+     * @param serviceType           Dubbo service type or interface\r\n+     * @param annotations\r\n+     * @return non-null\r\n+     */\r\n+    ServiceRestMetadata resolve(ProcessingEnvironment processingEnvironment,\r\n+                                TypeElement serviceType,\r\n+                                Set<? extends TypeElement> annotations);\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataStorage.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/ServiceRestMetadataStorage.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,61 +1,61 @@\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.metadata.annotation.processing.rest;\n-\n-import org.apache.dubbo.metadata.annotation.processing.ClassPathMetadataStorage;\n-import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\n-\n-import com.google.gson.Gson;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import java.io.IOException;\n-import java.util.List;\n-import java.util.Set;\n-\n-import static com.google.gson.reflect.TypeToken.getParameterized;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SERVICE_REST_METADATA_RESOURCE_PATH;\n-\n-/**\n- * The storage for {@link ServiceRestMetadata}\n- */\n-public class ServiceRestMetadataStorage {\n-\n-    private final ClassPathMetadataStorage storage;\n-\n-    public ServiceRestMetadataStorage(ProcessingEnvironment processingEnv) {\n-        this.storage = new ClassPathMetadataStorage(processingEnv);\n-    }\n-\n-    public void append(Set<ServiceRestMetadata> serviceRestMetadata) throws IOException {\n-        storage.read(SERVICE_REST_METADATA_RESOURCE_PATH, reader -> {\n-            Gson gson = new Gson();\n-            return (List) gson.fromJson(reader, getParameterized(List.class, ServiceRestMetadata.class).getType());\n-        }).ifPresent(existedMetadata -> {\n-            // Add all existed ServiceRestMetadata\n-            serviceRestMetadata.addAll(existedMetadata);\n-        });\n-        write(serviceRestMetadata);\n-    }\n-\n-    public void write(Set<ServiceRestMetadata> serviceRestMetadata) throws IOException {\n-        if (serviceRestMetadata.isEmpty()) {\n-            return;\n-        }\n-        storage.write(() -> new Gson().toJson(serviceRestMetadata), SERVICE_REST_METADATA_RESOURCE_PATH);\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.metadata.annotation.processing.rest;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.ClassPathMetadataStorage;\r\n+import org.apache.dubbo.metadata.rest.ServiceRestMetadata;\r\n+\r\n+import com.google.gson.Gson;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import java.io.IOException;\r\n+import java.util.List;\r\n+import java.util.Set;\r\n+\r\n+import static com.google.gson.reflect.TypeToken.getParameterized;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SERVICE_REST_METADATA_RESOURCE_PATH;\r\n+\r\n+/**\r\n+ * The storage for {@link ServiceRestMetadata}\r\n+ */\r\n+public class ServiceRestMetadataStorage {\r\n+\r\n+    private final ClassPathMetadataStorage storage;\r\n+\r\n+    public ServiceRestMetadataStorage(ProcessingEnvironment processingEnv) {\r\n+        this.storage = new ClassPathMetadataStorage(processingEnv);\r\n+    }\r\n+\r\n+    public void append(Set<ServiceRestMetadata> serviceRestMetadata) throws IOException {\r\n+        storage.read(SERVICE_REST_METADATA_RESOURCE_PATH, reader -> {\r\n+            Gson gson = new Gson();\r\n+            return (List) gson.fromJson(reader, getParameterized(List.class, ServiceRestMetadata.class).getType());\r\n+        }).ifPresent(existedMetadata -> {\r\n+            // Add all existed ServiceRestMetadata\r\n+            serviceRestMetadata.addAll(existedMetadata);\r\n+        });\r\n+        write(serviceRestMetadata);\r\n+    }\r\n+\r\n+    public void write(Set<ServiceRestMetadata> serviceRestMetadata) throws IOException {\r\n+        if (serviceRestMetadata.isEmpty()) {\r\n+            return;\r\n+        }\r\n+        storage.write(() -> new Gson().toJson(serviceRestMetadata), SERVICE_REST_METADATA_RESOURCE_PATH);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/DefaultValueParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/DefaultValueParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,75 +1,75 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-import java.util.List;\n-import java.util.Map;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\n-\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @DefaultValue\n- * *\n- *\n- * @since 2.7.6\n- */\n-public class DefaultValueParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String annotationValue, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-\n-        // process the request parameters\n-        setDefaultValue(requestMetadata.getParams(), defaultValue, annotationValue);\n-        // process the request headers\n-        setDefaultValue(requestMetadata.getHeaders(), defaultValue, annotationValue);\n-\n-    }\n-\n-    private void setDefaultValue(Map<String, List<String>> source, String placeholderValue, String defaultValue) {\n-        OUTTER:\n-        for (Map.Entry<String, List<String>> entry : source.entrySet()) {\n-            List<String> values = entry.getValue();\n-            int size = values.size();\n-            for (int i = 0; i < size; i++) {\n-                String value = values.get(i);\n-                if (placeholderValue.equals(value)) {\n-                    values.set(i, defaultValue);\n-                    break OUTTER;\n-                }\n-            }\n-        }\n-    }\n-\n-    public int getPriority() {\n-        return MIN_PRIORITY;\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\r\n+\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @DefaultValue\r\n+ * *\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class DefaultValueParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return DEFAULT_VALUE_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String annotationValue, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+\r\n+        // process the request parameters\r\n+        setDefaultValue(requestMetadata.getParams(), defaultValue, annotationValue);\r\n+        // process the request headers\r\n+        setDefaultValue(requestMetadata.getHeaders(), defaultValue, annotationValue);\r\n+\r\n+    }\r\n+\r\n+    private void setDefaultValue(Map<String, List<String>> source, String placeholderValue, String defaultValue) {\r\n+        OUTTER:\r\n+        for (Map.Entry<String, List<String>> entry : source.entrySet()) {\r\n+            List<String> values = entry.getValue();\r\n+            int size = values.size();\r\n+            for (int i = 0; i < size; i++) {\r\n+                String value = values.get(i);\r\n+                if (placeholderValue.equals(value)) {\r\n+                    values.set(i, defaultValue);\r\n+                    break OUTTER;\r\n+                }\r\n+            }\r\n+        }\r\n+    }\r\n+\r\n+    public int getPriority() {\r\n+        return MIN_PRIORITY;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/FormParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/FormParamParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,34 +1,34 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.FORM_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @FormParam\n- *\n- * @since 2.7.6\n- */\n-public class FormParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return FORM_PARAM_ANNOTATION_CLASS_NAME;\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.FORM_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @FormParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class FormParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return FORM_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/HeaderParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/HeaderParamParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,51 +1,51 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HEADER_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @HeaderParam\n- *\n- * @since 2.7.6\n- */\n-public class HeaderParamParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return HEADER_PARAM_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String headerName, String defaultValue, AnnotationMirror annotation,\n-                           VariableElement parameter, int parameterIndex,\n-                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-        // Add the placeholder as header value\n-        requestMetadata.addHeader(headerName, buildDefaultValue(parameterIndex));\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor.buildDefaultValue;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HEADER_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @HeaderParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class HeaderParamParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return HEADER_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String headerName, String defaultValue, AnnotationMirror annotation,\r\n+                           VariableElement parameter, int parameterIndex,\r\n+                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+        // Add the placeholder as header value\r\n+        requestMetadata.addHeader(headerName, buildDefaultValue(parameterIndex));\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/JAXRSServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/JAXRSServiceRestMetadataResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,108 +1,108 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractServiceRestMetadataResolver;\n-import org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.AnnotatedConstruct;\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.TypeElement;\n-import java.util.Set;\n-import java.util.stream.Stream;\n-\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findMetaAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getValue;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.CONSUMES_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HTTP_METHOD_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PATH_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PRODUCES_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * {@link ServiceRestMetadataResolver} implementation for JAX-RS 2 and 1\n- *\n- * @since 2.7.6\n- */\n-public class JAXRSServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    @Override\n-    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\n-        return supports(serviceType);\n-    }\n-\n-    public static boolean supports(TypeElement serviceType) {\n-        return isAnnotationPresent(serviceType, PATH_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    @Override\n-    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                               TypeElement serviceInterfaceType, ExecutableElement method) {\n-        return isAnnotationPresent(method, PATH_ANNOTATION_CLASS_NAME) ||\n-                isAnnotationPresent(method, HTTP_METHOD_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType, ExecutableElement method) {\n-        String pathFromType = getPathValue(processingEnv, serviceType);\n-        String pathFromMethod = getPathValue(method);\n-        return buildPath(pathFromType, pathFromMethod);\n-    }\n-\n-    @Override\n-    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType, ExecutableElement method) {\n-        AnnotationMirror annotation = findMetaAnnotation(method, HTTP_METHOD_ANNOTATION_CLASS_NAME);\n-        return getValue(annotation);\n-    }\n-\n-    @Override\n-    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> produces) {\n-        addAnnotationValues(method, PRODUCES_ANNOTATION_CLASS_NAME, produces);\n-    }\n-\n-    @Override\n-    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> consumes) {\n-        addAnnotationValues(method, CONSUMES_ANNOTATION_CLASS_NAME, consumes);\n-    }\n-\n-\n-    private void addAnnotationValues(Element element, String annotationAttributeName, Set<String> result) {\n-        AnnotationMirror annotation = findAnnotation(element, annotationAttributeName);\n-        String[] value = getValue(annotation);\n-        if (value != null) {\n-            Stream.of(value).forEach(result::add);\n-        }\n-    }\n-\n-    private String getPathValue(ProcessingEnvironment processingEnv, TypeElement serviceType) {\n-        AnnotationMirror annotation = findAnnotation(serviceType, PATH_ANNOTATION_CLASS_NAME);\n-        return getValue(annotation);\n-    }\n-\n-    private String getPathValue(AnnotatedConstruct annotatedConstruct) {\n-        AnnotationMirror annotation = getAnnotation(annotatedConstruct, PATH_ANNOTATION_CLASS_NAME);\n-        return getValue(annotation);\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractServiceRestMetadataResolver;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.AnnotatedConstruct;\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import java.util.Set;\r\n+import java.util.stream.Stream;\r\n+\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findMetaAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getValue;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.CONSUMES_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.HTTP_METHOD_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PATH_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.PRODUCES_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * {@link ServiceRestMetadataResolver} implementation for JAX-RS 2 and 1\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class JAXRSServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    @Override\r\n+    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\r\n+        return supports(serviceType);\r\n+    }\r\n+\r\n+    public static boolean supports(TypeElement serviceType) {\r\n+        return isAnnotationPresent(serviceType, PATH_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                               TypeElement serviceInterfaceType, ExecutableElement method) {\r\n+        return isAnnotationPresent(method, PATH_ANNOTATION_CLASS_NAME) ||\r\n+                isAnnotationPresent(method, HTTP_METHOD_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType, ExecutableElement method) {\r\n+        String pathFromType = getPathValue(processingEnv, serviceType);\r\n+        String pathFromMethod = getPathValue(method);\r\n+        return buildPath(pathFromType, pathFromMethod);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType, ExecutableElement method) {\r\n+        AnnotationMirror annotation = findMetaAnnotation(method, HTTP_METHOD_ANNOTATION_CLASS_NAME);\r\n+        return getValue(annotation);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> produces) {\r\n+        addAnnotationValues(method, PRODUCES_ANNOTATION_CLASS_NAME, produces);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> consumes) {\r\n+        addAnnotationValues(method, CONSUMES_ANNOTATION_CLASS_NAME, consumes);\r\n+    }\r\n+\r\n+\r\n+    private void addAnnotationValues(Element element, String annotationAttributeName, Set<String> result) {\r\n+        AnnotationMirror annotation = findAnnotation(element, annotationAttributeName);\r\n+        String[] value = getValue(annotation);\r\n+        if (value != null) {\r\n+            Stream.of(value).forEach(result::add);\r\n+        }\r\n+    }\r\n+\r\n+    private String getPathValue(ProcessingEnvironment processingEnv, TypeElement serviceType) {\r\n+        AnnotationMirror annotation = findAnnotation(serviceType, PATH_ANNOTATION_CLASS_NAME);\r\n+        return getValue(annotation);\r\n+    }\r\n+\r\n+    private String getPathValue(AnnotatedConstruct annotatedConstruct) {\r\n+        AnnotationMirror annotation = getAnnotation(annotatedConstruct, PATH_ANNOTATION_CLASS_NAME);\r\n+        return getValue(annotation);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/MatrixParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/MatrixParamParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,34 +1,34 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.MATRIX_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @MatrixParam\n- *\n- * @since 2.7.6\n- */\n-public class MatrixParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return MATRIX_PARAM_ANNOTATION_CLASS_NAME;\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.MATRIX_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @MatrixParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class MatrixParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return MATRIX_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/ParamAnnotationParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/ParamAnnotationParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,38 +1,38 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RequestMetadata;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @*Param\n- */\n-public abstract class ParamAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-    protected void process(String name, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex,\n-                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\n-        requestMetadata.addParam(name, defaultValue);\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RequestMetadata;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @*Param\r\n+ */\r\n+public abstract class ParamAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+    protected void process(String name, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex,\r\n+                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        RequestMetadata requestMetadata = restMethodMetadata.getRequest();\r\n+        requestMetadata.addParam(name, defaultValue);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/QueryParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/jaxrs/QueryParamParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,34 +1,34 @@\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.metadata.annotation.processing.rest.jaxrs;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.QUERY_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @QueryParam\n- *\n- * @since 2.7.6\n- */\n-public class QueryParamParameterProcessor extends ParamAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return QUERY_PARAM_ANNOTATION_CLASS_NAME;\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.metadata.annotation.processing.rest.jaxrs;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.JAX_RS.QUERY_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for JAX-RS's @QueryParam\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class QueryParamParameterProcessor extends ParamAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return QUERY_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/AbstractRequestAnnotationParameterProcessor.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,69 +1,69 @@\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.metadata.annotation.processing.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\n-\n-/**\n- * The abstract {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @Request*\n- */\n-public abstract class AbstractRequestAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\n-\n-\n-    protected abstract void process(String name, String defaultValue, AnnotationMirror annotation,\n-                                    VariableElement parameter, int parameterIndex,\n-                                    ExecutableElement method,\n-                                    RestMethodMetadata restMethodMetadata);\n-\n-    @Override\n-    protected String getAnnotationValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\n-        // try to get \"value\" attribute first\n-        String name = super.getAnnotationValue(annotation, parameter, parameterIndex);\n-\n-        // try to get \"name\" attribute if required\n-        if (isEmpty(name)) {\n-            name = getAttribute(annotation, \"name\");\n-        }\n-\n-        // finally , try to the name of parameter\n-        if (isEmpty(name)) {\n-            name = parameter.getSimpleName().toString();\n-        }\n-\n-        return name;\n-    }\n-\n-    protected String getDefaultValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\n-        String defaultValue = getAttribute(annotation, \"defaultValue\");\n-        if (isEmpty(defaultValue)) {\n-            defaultValue = super.getDefaultValue(annotation, parameter, parameterIndex);\n-        }\n-        return defaultValue;\n-    }\n-\n-    protected boolean isEmpty(String str) {\n-        return str == null || str.isEmpty();\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.metadata.annotation.processing.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractAnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\r\n+\r\n+/**\r\n+ * The abstract {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @Request*\r\n+ */\r\n+public abstract class AbstractRequestAnnotationParameterProcessor extends AbstractAnnotatedMethodParameterProcessor {\r\n+\r\n+\r\n+    protected abstract void process(String name, String defaultValue, AnnotationMirror annotation,\r\n+                                    VariableElement parameter, int parameterIndex,\r\n+                                    ExecutableElement method,\r\n+                                    RestMethodMetadata restMethodMetadata);\r\n+\r\n+    @Override\r\n+    protected String getAnnotationValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\r\n+        // try to get \"value\" attribute first\r\n+        String name = super.getAnnotationValue(annotation, parameter, parameterIndex);\r\n+\r\n+        // try to get \"name\" attribute if required\r\n+        if (isEmpty(name)) {\r\n+            name = getAttribute(annotation, \"name\");\r\n+        }\r\n+\r\n+        // finally , try to the name of parameter\r\n+        if (isEmpty(name)) {\r\n+            name = parameter.getSimpleName().toString();\r\n+        }\r\n+\r\n+        return name;\r\n+    }\r\n+\r\n+    protected String getDefaultValue(AnnotationMirror annotation, VariableElement parameter, int parameterIndex) {\r\n+        String defaultValue = getAttribute(annotation, \"defaultValue\");\r\n+        if (isEmpty(defaultValue)) {\r\n+            defaultValue = super.getDefaultValue(annotation, parameter, parameterIndex);\r\n+        }\r\n+        return defaultValue;\r\n+    }\r\n+\r\n+    protected boolean isEmpty(String str) {\r\n+        return str == null || str.isEmpty();\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestHeaderParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestHeaderParameterProcessor.java", "comments": ["Line-ending 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.metadata.annotation.processing.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_HEADER_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestHeader\n- */\n-public class RequestHeaderParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return REQUEST_HEADER_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String name, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        restMethodMetadata.getRequest().addHeader(name, defaultValue);\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.metadata.annotation.processing.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_HEADER_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestHeader\r\n+ */\r\n+public class RequestHeaderParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return REQUEST_HEADER_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String name, String defaultValue, AnnotationMirror annotation, VariableElement parameter, int parameterIndex, ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        restMethodMetadata.getRequest().addHeader(name, defaultValue);\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestParamParameterProcessor.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/RequestParamParameterProcessor.java", "comments": ["Line-ending 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.metadata.annotation.processing.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\n-import org.apache.dubbo.metadata.rest.RestMethodMetadata;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_PARAM_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestParam\n- */\n-public class RequestParamParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\n-\n-    @Override\n-    public String getAnnotationType() {\n-        return REQUEST_PARAM_ANNOTATION_CLASS_NAME;\n-    }\n-\n-    @Override\n-    protected void process(String name, String defaultValue, AnnotationMirror annotation,\n-                           VariableElement parameter, int parameterIndex,\n-                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\n-        restMethodMetadata.getRequest().addParam(name, defaultValue);\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.metadata.annotation.processing.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AnnotatedMethodParameterProcessor;\r\n+import org.apache.dubbo.metadata.rest.RestMethodMetadata;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_PARAM_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * The {@link AnnotatedMethodParameterProcessor} implementation for Spring Web MVC's @RequestParam\r\n+ */\r\n+public class RequestParamParameterProcessor extends AbstractRequestAnnotationParameterProcessor {\r\n+\r\n+    @Override\r\n+    public String getAnnotationType() {\r\n+        return REQUEST_PARAM_ANNOTATION_CLASS_NAME;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void process(String name, String defaultValue, AnnotationMirror annotation,\r\n+                           VariableElement parameter, int parameterIndex,\r\n+                           ExecutableElement method, RestMethodMetadata restMethodMetadata) {\r\n+        restMethodMetadata.getRequest().addParam(name, defaultValue);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/SpringMvcServiceRestMetadataResolver.java", "source2": "org/apache/dubbo/metadata/annotation/processing/rest/springmvc/SpringMvcServiceRestMetadataResolver.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,165 +1,165 @@\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.metadata.annotation.processing.rest.springmvc;\n-\n-import org.apache.dubbo.metadata.annotation.processing.rest.AbstractServiceRestMetadataResolver;\n-import org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.type.DeclaredType;\n-import java.lang.reflect.Array;\n-import java.util.Set;\n-\n-import static java.lang.String.valueOf;\n-import static java.lang.reflect.Array.getLength;\n-import static java.util.stream.Stream.of;\n-import static org.apache.dubbo.common.function.Streams.filterFirst;\n-import static org.apache.dubbo.common.utils.ArrayUtils.isEmpty;\n-import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\n-import static org.apache.dubbo.common.utils.PathUtils.buildPath;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findMetaAnnotation;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAllAnnotations;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.CONTROLLER_ANNOTATION_CLASS_NAME;\n-import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_MAPPING_ANNOTATION_CLASS_NAME;\n-\n-/**\n- * {@link ServiceRestMetadataResolver}\n- *\n- * @since 2.7.6\n- */\n-public class SpringMvcServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\n-\n-    private static final int FIRST_ELEMENT_INDEX = 0;\n-\n-    @Override\n-    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\n-        return supports(serviceType);\n-    }\n-\n-    @Override\n-    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                               TypeElement serviceInterfaceType, ExecutableElement method) {\n-        return isAnnotationPresent(method, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    public static boolean supports(TypeElement serviceType) {\n-        return isAnnotationPresent(serviceType, CONTROLLER_ANNOTATION_CLASS_NAME);\n-    }\n-\n-    @Override\n-    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                        ExecutableElement method) {\n-\n-        String requestPathFromType = getRequestPath(serviceType);\n-\n-        String requestPathFromMethod = getRequestPath(method);\n-\n-        return buildPath(requestPathFromType, requestPathFromMethod);\n-    }\n-\n-\n-    @Override\n-    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                          ExecutableElement method) {\n-\n-        AnnotationMirror requestMapping = getRequestMapping(method);\n-\n-        // httpMethod is an array of RequestMethod\n-        Object httpMethod = getAttribute(requestMapping, \"method\");\n-\n-        if (httpMethod == null || getLength(httpMethod) < 1) {\n-            return null;\n-        }\n-\n-        // TODO Is is required to support more request methods?\n-        return valueOf(Array.get(httpMethod, FIRST_ELEMENT_INDEX));\n-    }\n-\n-    private AnnotationMirror getRequestMapping(Element element) {\n-        // try \"@RequestMapping\" first\n-        AnnotationMirror requestMapping = findAnnotation(element, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\n-        // try the annotation meta-annotated later\n-        if (requestMapping == null) {\n-            requestMapping = findMetaAnnotation(element, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\n-        }\n-        return requestMapping;\n-    }\n-\n-    @Override\n-    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> produces) {\n-        addMediaTypes(method, \"produces\", produces);\n-    }\n-\n-    @Override\n-    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\n-                                   ExecutableElement method, Set<String> consumes) {\n-        addMediaTypes(method, \"consumes\", consumes);\n-    }\n-\n-    private void addMediaTypes(ExecutableElement method, String annotationAttributeName, Set<String> mediaTypesSet) {\n-\n-        AnnotationMirror mappingAnnotation = getMappingAnnotation(method);\n-\n-        String[] mediaTypes = getAttribute(mappingAnnotation, annotationAttributeName);\n-\n-        if (isNotEmpty(mediaTypes)) {\n-            of(mediaTypes).forEach(mediaTypesSet::add);\n-        }\n-    }\n-\n-    private AnnotationMirror getMappingAnnotation(Element element) {\n-        return computeIfAbsent(valueOf(element), key ->\n-                filterFirst(getAllAnnotations(element), annotation -> {\n-                    DeclaredType annotationType = annotation.getAnnotationType();\n-                    // try \"@RequestMapping\" first\n-                    if (REQUEST_MAPPING_ANNOTATION_CLASS_NAME.equals(annotationType.toString())) {\n-                        return true;\n-                    }\n-                    // try meta annotation\n-                    return isAnnotationPresent(annotationType.asElement(), REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\n-                })\n-        );\n-    }\n-\n-    private String getRequestPath(Element element) {\n-        AnnotationMirror mappingAnnotation = getMappingAnnotation(element);\n-        return getRequestPath(mappingAnnotation);\n-    }\n-\n-    private String getRequestPath(AnnotationMirror mappingAnnotation) {\n-        // try \"value\" first\n-        String[] value = getAttribute(mappingAnnotation, \"value\");\n-\n-        if (isEmpty(value)) { // try \"path\" later\n-            value = getAttribute(mappingAnnotation, \"path\");\n-        }\n-\n-        if (isEmpty(value)) {\n-            return \"\";\n-        }\n-        // TODO Is is required to support more request paths?\n-        return value[FIRST_ELEMENT_INDEX];\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.metadata.annotation.processing.rest.springmvc;\r\n+\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.AbstractServiceRestMetadataResolver;\r\n+import org.apache.dubbo.metadata.annotation.processing.rest.ServiceRestMetadataResolver;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.type.DeclaredType;\r\n+import java.lang.reflect.Array;\r\n+import java.util.Set;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.lang.reflect.Array.getLength;\r\n+import static java.util.stream.Stream.of;\r\n+import static org.apache.dubbo.common.function.Streams.filterFirst;\r\n+import static org.apache.dubbo.common.utils.ArrayUtils.isEmpty;\r\n+import static org.apache.dubbo.common.utils.ArrayUtils.isNotEmpty;\r\n+import static org.apache.dubbo.common.utils.PathUtils.buildPath;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.findMetaAnnotation;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAllAnnotations;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.CONTROLLER_ANNOTATION_CLASS_NAME;\r\n+import static org.apache.dubbo.metadata.rest.RestMetadataConstants.SPRING_MVC.REQUEST_MAPPING_ANNOTATION_CLASS_NAME;\r\n+\r\n+/**\r\n+ * {@link ServiceRestMetadataResolver}\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class SpringMvcServiceRestMetadataResolver extends AbstractServiceRestMetadataResolver {\r\n+\r\n+    private static final int FIRST_ELEMENT_INDEX = 0;\r\n+\r\n+    @Override\r\n+    public boolean supports(ProcessingEnvironment processingEnvironment, TypeElement serviceType) {\r\n+        return supports(serviceType);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected boolean supports(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                               TypeElement serviceInterfaceType, ExecutableElement method) {\r\n+        return isAnnotationPresent(method, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    public static boolean supports(TypeElement serviceType) {\r\n+        return isAnnotationPresent(serviceType, CONTROLLER_ANNOTATION_CLASS_NAME);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected String resolveRequestPath(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                        ExecutableElement method) {\r\n+\r\n+        String requestPathFromType = getRequestPath(serviceType);\r\n+\r\n+        String requestPathFromMethod = getRequestPath(method);\r\n+\r\n+        return buildPath(requestPathFromType, requestPathFromMethod);\r\n+    }\r\n+\r\n+\r\n+    @Override\r\n+    protected String resolveRequestMethod(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                          ExecutableElement method) {\r\n+\r\n+        AnnotationMirror requestMapping = getRequestMapping(method);\r\n+\r\n+        // httpMethod is an array of RequestMethod\r\n+        Object httpMethod = getAttribute(requestMapping, \"method\");\r\n+\r\n+        if (httpMethod == null || getLength(httpMethod) < 1) {\r\n+            return null;\r\n+        }\r\n+\r\n+        // TODO Is is required to support more request methods?\r\n+        return valueOf(Array.get(httpMethod, FIRST_ELEMENT_INDEX));\r\n+    }\r\n+\r\n+    private AnnotationMirror getRequestMapping(Element element) {\r\n+        // try \"@RequestMapping\" first\r\n+        AnnotationMirror requestMapping = findAnnotation(element, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\r\n+        // try the annotation meta-annotated later\r\n+        if (requestMapping == null) {\r\n+            requestMapping = findMetaAnnotation(element, REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\r\n+        }\r\n+        return requestMapping;\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processProduces(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> produces) {\r\n+        addMediaTypes(method, \"produces\", produces);\r\n+    }\r\n+\r\n+    @Override\r\n+    protected void processConsumes(ProcessingEnvironment processingEnv, TypeElement serviceType,\r\n+                                   ExecutableElement method, Set<String> consumes) {\r\n+        addMediaTypes(method, \"consumes\", consumes);\r\n+    }\r\n+\r\n+    private void addMediaTypes(ExecutableElement method, String annotationAttributeName, Set<String> mediaTypesSet) {\r\n+\r\n+        AnnotationMirror mappingAnnotation = getMappingAnnotation(method);\r\n+\r\n+        String[] mediaTypes = getAttribute(mappingAnnotation, annotationAttributeName);\r\n+\r\n+        if (isNotEmpty(mediaTypes)) {\r\n+            of(mediaTypes).forEach(mediaTypesSet::add);\r\n+        }\r\n+    }\r\n+\r\n+    private AnnotationMirror getMappingAnnotation(Element element) {\r\n+        return computeIfAbsent(valueOf(element), key ->\r\n+                filterFirst(getAllAnnotations(element), annotation -> {\r\n+                    DeclaredType annotationType = annotation.getAnnotationType();\r\n+                    // try \"@RequestMapping\" first\r\n+                    if (REQUEST_MAPPING_ANNOTATION_CLASS_NAME.equals(annotationType.toString())) {\r\n+                        return true;\r\n+                    }\r\n+                    // try meta annotation\r\n+                    return isAnnotationPresent(annotationType.asElement(), REQUEST_MAPPING_ANNOTATION_CLASS_NAME);\r\n+                })\r\n+        );\r\n+    }\r\n+\r\n+    private String getRequestPath(Element element) {\r\n+        AnnotationMirror mappingAnnotation = getMappingAnnotation(element);\r\n+        return getRequestPath(mappingAnnotation);\r\n+    }\r\n+\r\n+    private String getRequestPath(AnnotationMirror mappingAnnotation) {\r\n+        // try \"value\" first\r\n+        String[] value = getAttribute(mappingAnnotation, \"value\");\r\n+\r\n+        if (isEmpty(value)) { // try \"path\" later\r\n+            value = getAttribute(mappingAnnotation, \"path\");\r\n+        }\r\n+\r\n+        if (isEmpty(value)) {\r\n+            return \"\";\r\n+        }\r\n+        // TODO Is is required to support more request paths?\r\n+        return value[FIRST_ELEMENT_INDEX];\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/AnnotationUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/AnnotationUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,233 +1,233 @@\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.metadata.annotation.processing.util;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.AnnotatedConstruct;\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.AnnotationValue;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.type.ArrayType;\n-import javax.lang.model.type.TypeMirror;\n-import java.lang.annotation.Annotation;\n-import java.lang.reflect.Array;\n-import java.lang.reflect.Type;\n-import java.util.Collection;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Objects;\n-import java.util.function.Predicate;\n-import java.util.stream.Collectors;\n-\n-import static java.lang.Enum.valueOf;\n-import static java.util.Collections.emptyList;\n-import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.function.Streams.filterFirst;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getType;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isSameType;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isTypeElement;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofTypeElement;\n-\n-/**\n- * The utilities class for annotation in the package \"javax.lang.model.*\"\n- *\n- * @since 2.7.6\n- */\n-public interface AnnotationUtils {\n-\n-    static AnnotationMirror getAnnotation(AnnotatedConstruct annotatedConstruct,\n-                                          Class<? extends Annotation> annotationClass) {\n-        return annotationClass == null ?\n-                null :\n-                getAnnotation(annotatedConstruct, annotationClass.getTypeName());\n-    }\n-\n-    static AnnotationMirror getAnnotation(AnnotatedConstruct annotatedConstruct, CharSequence annotationClassName) {\n-        List<AnnotationMirror> annotations = getAnnotations(annotatedConstruct, annotationClassName);\n-        return annotations.isEmpty() ? null : annotations.get(0);\n-    }\n-\n-    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct, Class<? extends Annotation> annotationClass) {\n-        return annotationClass == null ?\n-                emptyList() :\n-                getAnnotations(annotatedConstruct, annotationClass.getTypeName());\n-    }\n-\n-    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct,\n-                                                 CharSequence annotationClassName) {\n-        return getAnnotations(annotatedConstruct,\n-                annotation -> isSameType(annotation.getAnnotationType(), annotationClassName));\n-    }\n-\n-    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct) {\n-        return getAnnotations(annotatedConstruct, EMPTY_ARRAY);\n-    }\n-\n-    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct,\n-                                                 Predicate<AnnotationMirror>... annotationFilters) {\n-\n-        AnnotatedConstruct actualAnnotatedConstruct = annotatedConstruct;\n-\n-        if (annotatedConstruct instanceof TypeMirror) {\n-            actualAnnotatedConstruct = ofTypeElement((TypeMirror) actualAnnotatedConstruct);\n-        }\n-\n-        return actualAnnotatedConstruct == null ?\n-                emptyList() :\n-                filterAll((List<AnnotationMirror>) actualAnnotatedConstruct.getAnnotationMirrors(), annotationFilters);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(TypeMirror type) {\n-        return getAllAnnotations(ofTypeElement(type));\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(Element element) {\n-        return getAllAnnotations(element, EMPTY_ARRAY);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, Class<? extends Annotation> annotationClass) {\n-        return getAllAnnotations(ofTypeElement(type), annotationClass);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(Element element, Class<? extends Annotation> annotationClass) {\n-        return element == null || annotationClass == null ?\n-                emptyList() :\n-                getAllAnnotations(element, annotationClass.getTypeName());\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, CharSequence annotationClassName) {\n-        return getAllAnnotations(ofTypeElement(type), annotationClassName);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(Element element, CharSequence annotationClassName) {\n-        return getAllAnnotations(element, annotation -> isSameType(annotation.getAnnotationType(), annotationClassName));\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, Predicate<AnnotationMirror>... annotationFilters) {\n-        return getAllAnnotations(ofTypeElement(type), annotationFilters);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(Element element, Predicate<AnnotationMirror>... annotationFilters) {\n-\n-        List<AnnotationMirror> allAnnotations = isTypeElement(element) ?\n-                getHierarchicalTypes(ofTypeElement(element))\n-                        .stream()\n-                        .map(AnnotationUtils::getAnnotations)\n-                        .flatMap(Collection::stream)\n-                        .collect(Collectors.toList()) :\n-                element == null ? emptyList() : (List<AnnotationMirror>) element.getAnnotationMirrors();\n-\n-        return filterAll(allAnnotations, annotationFilters);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, Type annotatedType) {\n-        return getAllAnnotations(processingEnv, annotatedType, EMPTY_ARRAY);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, Type annotatedType,\n-                                                    Predicate<AnnotationMirror>... annotationFilters) {\n-        return annotatedType == null ?\n-                emptyList() :\n-                getAllAnnotations(processingEnv, annotatedType.getTypeName(), annotationFilters);\n-    }\n-\n-    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, CharSequence annotatedTypeName,\n-                                                    Predicate<AnnotationMirror>... annotationFilters) {\n-        return getAllAnnotations(getType(processingEnv, annotatedTypeName), annotationFilters);\n-    }\n-\n-    static AnnotationMirror findAnnotation(TypeMirror type, Class<? extends Annotation> annotationClass) {\n-        return annotationClass == null ? null : findAnnotation(type, annotationClass.getTypeName());\n-    }\n-\n-    static AnnotationMirror findAnnotation(TypeMirror type, CharSequence annotationClassName) {\n-        return findAnnotation(ofTypeElement(type), annotationClassName);\n-    }\n-\n-    static AnnotationMirror findAnnotation(Element element, Class<? extends Annotation> annotationClass) {\n-        return annotationClass == null ? null : findAnnotation(element, annotationClass.getTypeName());\n-    }\n-\n-    static AnnotationMirror findAnnotation(Element element, CharSequence annotationClassName) {\n-        return filterFirst(getAllAnnotations(element, annotation -> isSameType(annotation.getAnnotationType(), annotationClassName)));\n-    }\n-\n-    static AnnotationMirror findMetaAnnotation(Element annotatedConstruct, CharSequence metaAnnotationClassName) {\n-        return annotatedConstruct == null ?\n-                null :\n-                getAnnotations(annotatedConstruct)\n-                        .stream()\n-                        .map(annotation -> findAnnotation(annotation.getAnnotationType(), metaAnnotationClassName))\n-                        .filter(Objects::nonNull)\n-                        .findFirst()\n-                        .orElse(null);\n-    }\n-\n-    static boolean isAnnotationPresent(Element element, CharSequence annotationClassName) {\n-        return findAnnotation(element, annotationClassName) != null ||\n-                findMetaAnnotation(element, annotationClassName) != null;\n-    }\n-\n-    static <T> T getAttribute(AnnotationMirror annotation, String attributeName) {\n-        return annotation == null ? null : getAttribute(annotation.getElementValues(), attributeName);\n-    }\n-\n-    static <T> T getAttribute(Map<? extends ExecutableElement, ? extends AnnotationValue> attributesMap,\n-                              String attributeName) {\n-        T annotationValue = null;\n-        for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : attributesMap.entrySet()) {\n-            ExecutableElement attributeMethod = entry.getKey();\n-            if (Objects.equals(attributeName, attributeMethod.getSimpleName().toString())) {\n-                TypeMirror attributeType = attributeMethod.getReturnType();\n-                AnnotationValue value = entry.getValue();\n-                if (attributeType instanceof ArrayType) { // array-typed attribute values\n-                    ArrayType arrayType = (ArrayType) attributeType;\n-                    String componentType = arrayType.getComponentType().toString();\n-                    ClassLoader classLoader = AnnotationUtils.class.getClassLoader();\n-                    List<AnnotationValue> values = (List<AnnotationValue>) value.getValue();\n-                    int size = values.size();\n-                    try {\n-                        Class componentClass = classLoader.loadClass(componentType);\n-                        boolean isEnum = componentClass.isEnum();\n-                        Object array = Array.newInstance(componentClass, values.size());\n-                        for (int i = 0; i < size; i++) {\n-                            Object element = values.get(i).getValue();\n-                            if (isEnum) {\n-                                element = valueOf(componentClass, element.toString());\n-                            }\n-                            Array.set(array, i, element);\n-                        }\n-                        annotationValue = (T) array;\n-                    } catch (ClassNotFoundException e) {\n-                        throw new RuntimeException(e);\n-                    }\n-                } else {\n-                    annotationValue = (T) value.getValue();\n-                }\n-                break;\n-            }\n-        }\n-        return annotationValue;\n-    }\n-\n-    static <T> T getValue(AnnotationMirror annotation) {\n-        return (T) getAttribute(annotation, \"value\");\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.metadata.annotation.processing.util;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.AnnotatedConstruct;\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.AnnotationValue;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.type.ArrayType;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import java.lang.annotation.Annotation;\r\n+import java.lang.reflect.Array;\r\n+import java.lang.reflect.Type;\r\n+import java.util.Collection;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Objects;\r\n+import java.util.function.Predicate;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.lang.Enum.valueOf;\r\n+import static java.util.Collections.emptyList;\r\n+import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.function.Streams.filterFirst;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getType;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isSameType;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isTypeElement;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofTypeElement;\r\n+\r\n+/**\r\n+ * The utilities class for annotation in the package \"javax.lang.model.*\"\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface AnnotationUtils {\r\n+\r\n+    static AnnotationMirror getAnnotation(AnnotatedConstruct annotatedConstruct,\r\n+                                          Class<? extends Annotation> annotationClass) {\r\n+        return annotationClass == null ?\r\n+                null :\r\n+                getAnnotation(annotatedConstruct, annotationClass.getTypeName());\r\n+    }\r\n+\r\n+    static AnnotationMirror getAnnotation(AnnotatedConstruct annotatedConstruct, CharSequence annotationClassName) {\r\n+        List<AnnotationMirror> annotations = getAnnotations(annotatedConstruct, annotationClassName);\r\n+        return annotations.isEmpty() ? null : annotations.get(0);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct, Class<? extends Annotation> annotationClass) {\r\n+        return annotationClass == null ?\r\n+                emptyList() :\r\n+                getAnnotations(annotatedConstruct, annotationClass.getTypeName());\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct,\r\n+                                                 CharSequence annotationClassName) {\r\n+        return getAnnotations(annotatedConstruct,\r\n+                annotation -> isSameType(annotation.getAnnotationType(), annotationClassName));\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct) {\r\n+        return getAnnotations(annotatedConstruct, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAnnotations(AnnotatedConstruct annotatedConstruct,\r\n+                                                 Predicate<AnnotationMirror>... annotationFilters) {\r\n+\r\n+        AnnotatedConstruct actualAnnotatedConstruct = annotatedConstruct;\r\n+\r\n+        if (annotatedConstruct instanceof TypeMirror) {\r\n+            actualAnnotatedConstruct = ofTypeElement((TypeMirror) actualAnnotatedConstruct);\r\n+        }\r\n+\r\n+        return actualAnnotatedConstruct == null ?\r\n+                emptyList() :\r\n+                filterAll((List<AnnotationMirror>) actualAnnotatedConstruct.getAnnotationMirrors(), annotationFilters);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(TypeMirror type) {\r\n+        return getAllAnnotations(ofTypeElement(type));\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(Element element) {\r\n+        return getAllAnnotations(element, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, Class<? extends Annotation> annotationClass) {\r\n+        return getAllAnnotations(ofTypeElement(type), annotationClass);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(Element element, Class<? extends Annotation> annotationClass) {\r\n+        return element == null || annotationClass == null ?\r\n+                emptyList() :\r\n+                getAllAnnotations(element, annotationClass.getTypeName());\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, CharSequence annotationClassName) {\r\n+        return getAllAnnotations(ofTypeElement(type), annotationClassName);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(Element element, CharSequence annotationClassName) {\r\n+        return getAllAnnotations(element, annotation -> isSameType(annotation.getAnnotationType(), annotationClassName));\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(TypeMirror type, Predicate<AnnotationMirror>... annotationFilters) {\r\n+        return getAllAnnotations(ofTypeElement(type), annotationFilters);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(Element element, Predicate<AnnotationMirror>... annotationFilters) {\r\n+\r\n+        List<AnnotationMirror> allAnnotations = isTypeElement(element) ?\r\n+                getHierarchicalTypes(ofTypeElement(element))\r\n+                        .stream()\r\n+                        .map(AnnotationUtils::getAnnotations)\r\n+                        .flatMap(Collection::stream)\r\n+                        .collect(Collectors.toList()) :\r\n+                element == null ? emptyList() : (List<AnnotationMirror>) element.getAnnotationMirrors();\r\n+\r\n+        return filterAll(allAnnotations, annotationFilters);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, Type annotatedType) {\r\n+        return getAllAnnotations(processingEnv, annotatedType, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, Type annotatedType,\r\n+                                                    Predicate<AnnotationMirror>... annotationFilters) {\r\n+        return annotatedType == null ?\r\n+                emptyList() :\r\n+                getAllAnnotations(processingEnv, annotatedType.getTypeName(), annotationFilters);\r\n+    }\r\n+\r\n+    static List<AnnotationMirror> getAllAnnotations(ProcessingEnvironment processingEnv, CharSequence annotatedTypeName,\r\n+                                                    Predicate<AnnotationMirror>... annotationFilters) {\r\n+        return getAllAnnotations(getType(processingEnv, annotatedTypeName), annotationFilters);\r\n+    }\r\n+\r\n+    static AnnotationMirror findAnnotation(TypeMirror type, Class<? extends Annotation> annotationClass) {\r\n+        return annotationClass == null ? null : findAnnotation(type, annotationClass.getTypeName());\r\n+    }\r\n+\r\n+    static AnnotationMirror findAnnotation(TypeMirror type, CharSequence annotationClassName) {\r\n+        return findAnnotation(ofTypeElement(type), annotationClassName);\r\n+    }\r\n+\r\n+    static AnnotationMirror findAnnotation(Element element, Class<? extends Annotation> annotationClass) {\r\n+        return annotationClass == null ? null : findAnnotation(element, annotationClass.getTypeName());\r\n+    }\r\n+\r\n+    static AnnotationMirror findAnnotation(Element element, CharSequence annotationClassName) {\r\n+        return filterFirst(getAllAnnotations(element, annotation -> isSameType(annotation.getAnnotationType(), annotationClassName)));\r\n+    }\r\n+\r\n+    static AnnotationMirror findMetaAnnotation(Element annotatedConstruct, CharSequence metaAnnotationClassName) {\r\n+        return annotatedConstruct == null ?\r\n+                null :\r\n+                getAnnotations(annotatedConstruct)\r\n+                        .stream()\r\n+                        .map(annotation -> findAnnotation(annotation.getAnnotationType(), metaAnnotationClassName))\r\n+                        .filter(Objects::nonNull)\r\n+                        .findFirst()\r\n+                        .orElse(null);\r\n+    }\r\n+\r\n+    static boolean isAnnotationPresent(Element element, CharSequence annotationClassName) {\r\n+        return findAnnotation(element, annotationClassName) != null ||\r\n+                findMetaAnnotation(element, annotationClassName) != null;\r\n+    }\r\n+\r\n+    static <T> T getAttribute(AnnotationMirror annotation, String attributeName) {\r\n+        return annotation == null ? null : getAttribute(annotation.getElementValues(), attributeName);\r\n+    }\r\n+\r\n+    static <T> T getAttribute(Map<? extends ExecutableElement, ? extends AnnotationValue> attributesMap,\r\n+                              String attributeName) {\r\n+        T annotationValue = null;\r\n+        for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : attributesMap.entrySet()) {\r\n+            ExecutableElement attributeMethod = entry.getKey();\r\n+            if (Objects.equals(attributeName, attributeMethod.getSimpleName().toString())) {\r\n+                TypeMirror attributeType = attributeMethod.getReturnType();\r\n+                AnnotationValue value = entry.getValue();\r\n+                if (attributeType instanceof ArrayType) { // array-typed attribute values\r\n+                    ArrayType arrayType = (ArrayType) attributeType;\r\n+                    String componentType = arrayType.getComponentType().toString();\r\n+                    ClassLoader classLoader = AnnotationUtils.class.getClassLoader();\r\n+                    List<AnnotationValue> values = (List<AnnotationValue>) value.getValue();\r\n+                    int size = values.size();\r\n+                    try {\r\n+                        Class componentClass = classLoader.loadClass(componentType);\r\n+                        boolean isEnum = componentClass.isEnum();\r\n+                        Object array = Array.newInstance(componentClass, values.size());\r\n+                        for (int i = 0; i < size; i++) {\r\n+                            Object element = values.get(i).getValue();\r\n+                            if (isEnum) {\r\n+                                element = valueOf(componentClass, element.toString());\r\n+                            }\r\n+                            Array.set(array, i, element);\r\n+                        }\r\n+                        annotationValue = (T) array;\r\n+                    } catch (ClassNotFoundException e) {\r\n+                        throw new RuntimeException(e);\r\n+                    }\r\n+                } else {\r\n+                    annotationValue = (T) value.getValue();\r\n+                }\r\n+                break;\r\n+            }\r\n+        }\r\n+        return annotationValue;\r\n+    }\r\n+\r\n+    static <T> T getValue(AnnotationMirror annotation) {\r\n+        return (T) getAttribute(annotation, \"value\");\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/ExecutableElementComparator.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/ExecutableElementComparator.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,72 +1,72 @@\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.metadata.annotation.processing.util;\n-\n-import org.apache.dubbo.common.utils.CharSequenceComparator;\n-\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.VariableElement;\n-import java.util.Comparator;\n-import java.util.List;\n-\n-/**\n- * The Comparator class for {@link ExecutableElement}, the comparison rule :\n- * <ol>\n- *     <li>Comparing to two {@link ExecutableElement#getSimpleName() element names} {@link String#compareTo(String) lexicographically}.\n- *     If equals, go to step 2</li>\n- *     <li>Comparing to the count of two parameters. If equals, go to step 3</li>\n- *     <li>Comparing to the type names of parameters {@link String#compareTo(String) lexicographically}</li>\n- * </ol>\n- *\n- * @since 2.7.6\n- */\n-public class ExecutableElementComparator implements Comparator<ExecutableElement> {\n-\n-    public final static ExecutableElementComparator INSTANCE = new ExecutableElementComparator();\n-\n-    private ExecutableElementComparator() {\n-    }\n-\n-    @Override\n-    public int compare(ExecutableElement e1, ExecutableElement e2) {\n-\n-        if (e1.equals(e2)) {\n-            return 0;\n-        }\n-\n-        // Step 1\n-        int value = CharSequenceComparator.INSTANCE.compare(e1.getSimpleName(), e2.getSimpleName());\n-\n-        if (value == 0) { // Step 2\n-\n-            List<? extends VariableElement> ps1 = e1.getParameters();\n-            List<? extends VariableElement> ps2 = e1.getParameters();\n-\n-            value = ps1.size() - ps2.size();\n-\n-            if (value == 0) { // Step 3\n-                for (int i = 0; i < ps1.size(); i++) {\n-                    value = CharSequenceComparator.INSTANCE.compare(ps1.get(i).getSimpleName(), ps2.get(i).getSimpleName());\n-                    if (value != 0) {\n-                        break;\n-                    }\n-                }\n-            }\n-        }\n-        return Integer.compare(value, 0);\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.metadata.annotation.processing.util;\r\n+\r\n+import org.apache.dubbo.common.utils.CharSequenceComparator;\r\n+\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import java.util.Comparator;\r\n+import java.util.List;\r\n+\r\n+/**\r\n+ * The Comparator class for {@link ExecutableElement}, the comparison rule :\r\n+ * <ol>\r\n+ *     <li>Comparing to two {@link ExecutableElement#getSimpleName() element names} {@link String#compareTo(String) lexicographically}.\r\n+ *     If equals, go to step 2</li>\r\n+ *     <li>Comparing to the count of two parameters. If equals, go to step 3</li>\r\n+ *     <li>Comparing to the type names of parameters {@link String#compareTo(String) lexicographically}</li>\r\n+ * </ol>\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public class ExecutableElementComparator implements Comparator<ExecutableElement> {\r\n+\r\n+    public final static ExecutableElementComparator INSTANCE = new ExecutableElementComparator();\r\n+\r\n+    private ExecutableElementComparator() {\r\n+    }\r\n+\r\n+    @Override\r\n+    public int compare(ExecutableElement e1, ExecutableElement e2) {\r\n+\r\n+        if (e1.equals(e2)) {\r\n+            return 0;\r\n+        }\r\n+\r\n+        // Step 1\r\n+        int value = CharSequenceComparator.INSTANCE.compare(e1.getSimpleName(), e2.getSimpleName());\r\n+\r\n+        if (value == 0) { // Step 2\r\n+\r\n+            List<? extends VariableElement> ps1 = e1.getParameters();\r\n+            List<? extends VariableElement> ps2 = e1.getParameters();\r\n+\r\n+            value = ps1.size() - ps2.size();\r\n+\r\n+            if (value == 0) { // Step 3\r\n+                for (int i = 0; i < ps1.size(); i++) {\r\n+                    value = CharSequenceComparator.INSTANCE.compare(ps1.get(i).getSimpleName(), ps2.get(i).getSimpleName());\r\n+                    if (value != 0) {\r\n+                        break;\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+        return Integer.compare(value, 0);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/FieldUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/FieldUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,146 +1,146 @@\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.metadata.annotation.processing.util;\n-\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.Modifier;\n-import javax.lang.model.element.VariableElement;\n-import javax.lang.model.type.TypeMirror;\n-import java.util.Collection;\n-import java.util.List;\n-import java.util.function.Predicate;\n-import java.util.stream.Collectors;\n-\n-import static java.util.Collections.emptyList;\n-import static javax.lang.model.element.ElementKind.ENUM_CONSTANT;\n-import static javax.lang.model.element.ElementKind.FIELD;\n-import static javax.lang.model.element.Modifier.STATIC;\n-import static javax.lang.model.util.ElementFilter.fieldsIn;\n-import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.function.Streams.filterFirst;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.getDeclaredMembers;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.hasModifiers;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.matches;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isEnumType;\n-\n-/**\n- * The utilities class for the field in the package \"javax.lang.model.\"\n- *\n- * @since 2.7.6\n- */\n-public interface FieldUtils {\n-\n-    static List<VariableElement> getDeclaredFields(Element element, Predicate<VariableElement>... fieldFilters) {\n-        return element == null ? emptyList() : getDeclaredFields(element.asType(), fieldFilters);\n-    }\n-\n-    static List<VariableElement> getDeclaredFields(Element element) {\n-        return getDeclaredFields(element, EMPTY_ARRAY);\n-    }\n-\n-    static List<VariableElement> getDeclaredFields(TypeMirror type, Predicate<VariableElement>... fieldFilters) {\n-        return filterAll(fieldsIn(getDeclaredMembers(type)), fieldFilters);\n-    }\n-\n-    static List<VariableElement> getDeclaredFields(TypeMirror type) {\n-        return getDeclaredFields(type, EMPTY_ARRAY);\n-    }\n-\n-    static List<VariableElement> getAllDeclaredFields(Element element, Predicate<VariableElement>... fieldFilters) {\n-        return element == null ? emptyList() : getAllDeclaredFields(element.asType(), fieldFilters);\n-    }\n-\n-    static List<VariableElement> getAllDeclaredFields(Element element) {\n-        return getAllDeclaredFields(element, EMPTY_ARRAY);\n-    }\n-\n-    static List<VariableElement> getAllDeclaredFields(TypeMirror type, Predicate<VariableElement>... fieldFilters) {\n-        return getHierarchicalTypes(type)\n-                .stream()\n-                .map(t -> getDeclaredFields(t, fieldFilters))\n-                .flatMap(Collection::stream)\n-                .collect(Collectors.toList());\n-    }\n-\n-    static List<VariableElement> getAllDeclaredFields(TypeMirror type) {\n-        return getAllDeclaredFields(type, EMPTY_ARRAY);\n-    }\n-\n-    static VariableElement getDeclaredField(Element element, String fieldName) {\n-        return element == null ? null : getDeclaredField(element.asType(), fieldName);\n-    }\n-\n-    static VariableElement getDeclaredField(TypeMirror type, String fieldName) {\n-        return filterFirst(getDeclaredFields(type, field -> fieldName.equals(field.getSimpleName().toString())));\n-    }\n-\n-    static VariableElement findField(Element element, String fieldName) {\n-        return element == null ? null : findField(element.asType(), fieldName);\n-    }\n-\n-    static VariableElement findField(TypeMirror type, String fieldName) {\n-        return filterFirst(getAllDeclaredFields(type, field -> equals(field, fieldName)));\n-    }\n-\n-    /**\n-     * is Enum's member field or not\n-     *\n-     * @param field {@link VariableElement} must be public static final fields\n-     * @return if field is public static final, return <code>true</code>, or <code>false</code>\n-     */\n-    static boolean isEnumMemberField(VariableElement field) {\n-        if (field == null || !isEnumType(field.getEnclosingElement())) {\n-            return false;\n-        }\n-        return ENUM_CONSTANT.equals(field.getKind());\n-    }\n-\n-    static boolean isNonStaticField(VariableElement field) {\n-        return isField(field) && !hasModifiers(field, STATIC);\n-    }\n-\n-    static boolean isField(VariableElement field) {\n-        return matches(field, FIELD) || isEnumMemberField(field);\n-    }\n-\n-    static boolean isField(VariableElement field, Modifier... modifiers) {\n-        return isField(field) && hasModifiers(field, modifiers);\n-    }\n-\n-    static List<VariableElement> getNonStaticFields(TypeMirror type) {\n-        return getDeclaredFields(type, FieldUtils::isNonStaticField);\n-    }\n-\n-    static List<VariableElement> getNonStaticFields(Element element) {\n-        return element == null ? emptyList() : getNonStaticFields(element.asType());\n-    }\n-\n-    static List<VariableElement> getAllNonStaticFields(TypeMirror type) {\n-        return getAllDeclaredFields(type, FieldUtils::isNonStaticField);\n-    }\n-\n-    static List<VariableElement> getAllNonStaticFields(Element element) {\n-        return element == null ? emptyList() : getAllNonStaticFields(element.asType());\n-    }\n-\n-    static boolean equals(VariableElement field, CharSequence fieldName) {\n-        return field != null && fieldName != null && field.getSimpleName().toString().equals(fieldName.toString());\n-    }\n-\n-}\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.annotation.processing.util;\r\n+\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.Modifier;\r\n+import javax.lang.model.element.VariableElement;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import java.util.Collection;\r\n+import java.util.List;\r\n+import java.util.function.Predicate;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.util.Collections.emptyList;\r\n+import static javax.lang.model.element.ElementKind.ENUM_CONSTANT;\r\n+import static javax.lang.model.element.ElementKind.FIELD;\r\n+import static javax.lang.model.element.Modifier.STATIC;\r\n+import static javax.lang.model.util.ElementFilter.fieldsIn;\r\n+import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.function.Streams.filterFirst;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.getDeclaredMembers;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.hasModifiers;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.matches;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.isEnumType;\r\n+\r\n+/**\r\n+ * The utilities class for the field in the package \"javax.lang.model.\"\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface FieldUtils {\r\n+\r\n+    static List<VariableElement> getDeclaredFields(Element element, Predicate<VariableElement>... fieldFilters) {\r\n+        return element == null ? emptyList() : getDeclaredFields(element.asType(), fieldFilters);\r\n+    }\r\n+\r\n+    static List<VariableElement> getDeclaredFields(Element element) {\r\n+        return getDeclaredFields(element, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<VariableElement> getDeclaredFields(TypeMirror type, Predicate<VariableElement>... fieldFilters) {\r\n+        return filterAll(fieldsIn(getDeclaredMembers(type)), fieldFilters);\r\n+    }\r\n+\r\n+    static List<VariableElement> getDeclaredFields(TypeMirror type) {\r\n+        return getDeclaredFields(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllDeclaredFields(Element element, Predicate<VariableElement>... fieldFilters) {\r\n+        return element == null ? emptyList() : getAllDeclaredFields(element.asType(), fieldFilters);\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllDeclaredFields(Element element) {\r\n+        return getAllDeclaredFields(element, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllDeclaredFields(TypeMirror type, Predicate<VariableElement>... fieldFilters) {\r\n+        return getHierarchicalTypes(type)\r\n+                .stream()\r\n+                .map(t -> getDeclaredFields(t, fieldFilters))\r\n+                .flatMap(Collection::stream)\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllDeclaredFields(TypeMirror type) {\r\n+        return getAllDeclaredFields(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static VariableElement getDeclaredField(Element element, String fieldName) {\r\n+        return element == null ? null : getDeclaredField(element.asType(), fieldName);\r\n+    }\r\n+\r\n+    static VariableElement getDeclaredField(TypeMirror type, String fieldName) {\r\n+        return filterFirst(getDeclaredFields(type, field -> fieldName.equals(field.getSimpleName().toString())));\r\n+    }\r\n+\r\n+    static VariableElement findField(Element element, String fieldName) {\r\n+        return element == null ? null : findField(element.asType(), fieldName);\r\n+    }\r\n+\r\n+    static VariableElement findField(TypeMirror type, String fieldName) {\r\n+        return filterFirst(getAllDeclaredFields(type, field -> equals(field, fieldName)));\r\n+    }\r\n+\r\n+    /**\r\n+     * is Enum's member field or not\r\n+     *\r\n+     * @param field {@link VariableElement} must be public static final fields\r\n+     * @return if field is public static final, return <code>true</code>, or <code>false</code>\r\n+     */\r\n+    static boolean isEnumMemberField(VariableElement field) {\r\n+        if (field == null || !isEnumType(field.getEnclosingElement())) {\r\n+            return false;\r\n+        }\r\n+        return ENUM_CONSTANT.equals(field.getKind());\r\n+    }\r\n+\r\n+    static boolean isNonStaticField(VariableElement field) {\r\n+        return isField(field) && !hasModifiers(field, STATIC);\r\n+    }\r\n+\r\n+    static boolean isField(VariableElement field) {\r\n+        return matches(field, FIELD) || isEnumMemberField(field);\r\n+    }\r\n+\r\n+    static boolean isField(VariableElement field, Modifier... modifiers) {\r\n+        return isField(field) && hasModifiers(field, modifiers);\r\n+    }\r\n+\r\n+    static List<VariableElement> getNonStaticFields(TypeMirror type) {\r\n+        return getDeclaredFields(type, FieldUtils::isNonStaticField);\r\n+    }\r\n+\r\n+    static List<VariableElement> getNonStaticFields(Element element) {\r\n+        return element == null ? emptyList() : getNonStaticFields(element.asType());\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllNonStaticFields(TypeMirror type) {\r\n+        return getAllDeclaredFields(type, FieldUtils::isNonStaticField);\r\n+    }\r\n+\r\n+    static List<VariableElement> getAllNonStaticFields(Element element) {\r\n+        return element == null ? emptyList() : getAllNonStaticFields(element.asType());\r\n+    }\r\n+\r\n+    static boolean equals(VariableElement field, CharSequence fieldName) {\r\n+        return field != null && fieldName != null && field.getSimpleName().toString().equals(fieldName.toString());\r\n+    }\r\n+\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/LoggerUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/LoggerUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,45 +1,45 @@\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.metadata.annotation.processing.util;\n-\n-\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-\n-import static java.lang.String.format;\n-\n-/**\n- * Logger Utils\n- *\n- * @since 2.7.6\n- */\n-public interface LoggerUtils {\n-\n-    Logger LOGGER = LoggerFactory.getLogger(\"dubbo-metadata-processor\");\n-\n-    static void info(String format, Object... args) {\n-        if (LOGGER.isInfoEnabled()) {\n-            LOGGER.info(format(format, args));\n-        }\n-    }\n-\n-    static void warn(String format, Object... args) {\n-        if (LOGGER.isWarnEnabled()) {\n-            LOGGER.warn(format(format, args));\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.metadata.annotation.processing.util;\r\n+\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 static java.lang.String.format;\r\n+\r\n+/**\r\n+ * Logger Utils\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface LoggerUtils {\r\n+\r\n+    Logger LOGGER = LoggerFactory.getLogger(\"dubbo-metadata-processor\");\r\n+\r\n+    static void info(String format, Object... args) {\r\n+        if (LOGGER.isInfoEnabled()) {\r\n+            LOGGER.info(format(format, args));\r\n+        }\r\n+    }\r\n+\r\n+    static void warn(String format, Object... args) {\r\n+        if (LOGGER.isWarnEnabled()) {\r\n+            LOGGER.warn(format(format, args));\r\n+        }\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/MemberUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/MemberUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,94 +1,94 @@\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.metadata.annotation.processing.util;\n-\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.ElementKind;\n-import javax.lang.model.element.Modifier;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.element.VariableElement;\n-import javax.lang.model.type.TypeMirror;\n-import java.util.Collection;\n-import java.util.List;\n-import java.util.Objects;\n-import java.util.Set;\n-import java.util.stream.Collectors;\n-\n-import static java.util.Collections.emptyList;\n-import static javax.lang.model.element.Modifier.PUBLIC;\n-import static javax.lang.model.element.Modifier.STATIC;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofTypeElement;\n-\n-/**\n- * The utilities class for the members in the package \"javax.lang.model.\", such as \"field\", \"method\", \"constructor\"\n- *\n- * @since 2.7.6\n- */\n-public interface MemberUtils {\n-\n-    static boolean matches(Element member, ElementKind kind) {\n-        return member == null || kind == null ? false : kind.equals(member.getKind());\n-    }\n-\n-    static boolean isPublicNonStatic(Element member) {\n-        return hasModifiers(member, PUBLIC) && !hasModifiers(member, STATIC);\n-    }\n-\n-    static boolean hasModifiers(Element member, Modifier... modifiers) {\n-        if (member == null || modifiers == null) {\n-            return false;\n-        }\n-        Set<Modifier> actualModifiers = member.getModifiers();\n-        for (Modifier modifier : modifiers) {\n-            if (!actualModifiers.contains(modifier)) {\n-                return false;\n-            }\n-        }\n-        return true;\n-    }\n-\n-    static List<? extends Element> getDeclaredMembers(TypeMirror type) {\n-        TypeElement element = ofTypeElement(type);\n-        return element == null ? emptyList() : element.getEnclosedElements();\n-    }\n-\n-    static List<? extends Element> getAllDeclaredMembers(TypeMirror type) {\n-        return getHierarchicalTypes(type)\n-                .stream()\n-                .map(MemberUtils::getDeclaredMembers)\n-                .flatMap(Collection::stream)\n-                .collect(Collectors.toList());\n-    }\n-\n-    static boolean matchParameterTypes(List<? extends VariableElement> parameters, CharSequence... parameterTypes) {\n-\n-        int size = parameters.size();\n-\n-        if (size != parameterTypes.length) {\n-            return false;\n-        }\n-\n-        for (int i = 0; i < size; i++) {\n-            VariableElement parameter = parameters.get(i);\n-            if (!Objects.equals(parameter.asType().toString(), parameterTypes[i])) {\n-                return false;\n-            }\n-        }\n-        return true;\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.metadata.annotation.processing.util;\r\n+\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.ElementKind;\r\n+import javax.lang.model.element.Modifier;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import java.util.Collection;\r\n+import java.util.List;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.util.Collections.emptyList;\r\n+import static javax.lang.model.element.Modifier.PUBLIC;\r\n+import static javax.lang.model.element.Modifier.STATIC;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofTypeElement;\r\n+\r\n+/**\r\n+ * The utilities class for the members in the package \"javax.lang.model.\", such as \"field\", \"method\", \"constructor\"\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface MemberUtils {\r\n+\r\n+    static boolean matches(Element member, ElementKind kind) {\r\n+        return member == null || kind == null ? false : kind.equals(member.getKind());\r\n+    }\r\n+\r\n+    static boolean isPublicNonStatic(Element member) {\r\n+        return hasModifiers(member, PUBLIC) && !hasModifiers(member, STATIC);\r\n+    }\r\n+\r\n+    static boolean hasModifiers(Element member, Modifier... modifiers) {\r\n+        if (member == null || modifiers == null) {\r\n+            return false;\r\n+        }\r\n+        Set<Modifier> actualModifiers = member.getModifiers();\r\n+        for (Modifier modifier : modifiers) {\r\n+            if (!actualModifiers.contains(modifier)) {\r\n+                return false;\r\n+            }\r\n+        }\r\n+        return true;\r\n+    }\r\n+\r\n+    static List<? extends Element> getDeclaredMembers(TypeMirror type) {\r\n+        TypeElement element = ofTypeElement(type);\r\n+        return element == null ? emptyList() : element.getEnclosedElements();\r\n+    }\r\n+\r\n+    static List<? extends Element> getAllDeclaredMembers(TypeMirror type) {\r\n+        return getHierarchicalTypes(type)\r\n+                .stream()\r\n+                .map(MemberUtils::getDeclaredMembers)\r\n+                .flatMap(Collection::stream)\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+\r\n+    static boolean matchParameterTypes(List<? extends VariableElement> parameters, CharSequence... parameterTypes) {\r\n+\r\n+        int size = parameters.size();\r\n+\r\n+        if (size != parameterTypes.length) {\r\n+            return false;\r\n+        }\r\n+\r\n+        for (int i = 0; i < size; i++) {\r\n+            VariableElement parameter = parameters.get(i);\r\n+            if (!Objects.equals(parameter.asType().toString(), parameterTypes[i])) {\r\n+                return false;\r\n+            }\r\n+        }\r\n+        return true;\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/MethodUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/MethodUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,156 +1,156 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.annotation.processing.util;\n-\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.ExecutableElement;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.element.VariableElement;\n-import javax.lang.model.type.TypeMirror;\n-import javax.lang.model.util.Elements;\n-import java.lang.reflect.Type;\n-import java.util.Collection;\n-import java.util.LinkedList;\n-import java.util.List;\n-import java.util.function.Predicate;\n-import java.util.stream.Collectors;\n-\n-import static java.util.Arrays.asList;\n-import static java.util.Collections.emptyList;\n-import static javax.lang.model.element.ElementKind.METHOD;\n-import static javax.lang.model.util.ElementFilter.methodsIn;\n-import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\n-import static org.apache.dubbo.common.function.Streams.filter;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.function.Streams.filterFirst;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.getDeclaredMembers;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.isPublicNonStatic;\n-import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.matchParameterTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\n-import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofDeclaredType;\n-\n-/**\n- * The utilities class for method in the package \"javax.lang.model.\"\n- *\n- * @since 2.7.6\n- */\n-public interface MethodUtils {\n-\n-    static List<ExecutableElement> getDeclaredMethods(TypeElement type, Predicate<ExecutableElement>... methodFilters) {\n-        return type == null ? emptyList() : getDeclaredMethods(type.asType(), methodFilters);\n-    }\n-\n-    static List<ExecutableElement> getDeclaredMethods(TypeMirror type, Predicate<ExecutableElement>... methodFilters) {\n-        return filterAll(methodsIn(getDeclaredMembers(type)), methodFilters);\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type, Predicate<ExecutableElement>... methodFilters) {\n-        return type == null ? emptyList() : getAllDeclaredMethods(type.asType(), methodFilters);\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type) {\n-        return getAllDeclaredMethods(type, EMPTY_ARRAY);\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type, Predicate<ExecutableElement>... methodFilters) {\n-        return getHierarchicalTypes(type)\n-                .stream()\n-                .map(t -> getDeclaredMethods(t, methodFilters))\n-                .flatMap(Collection::stream)\n-                .collect(Collectors.toList());\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type) {\n-        return getAllDeclaredMethods(type, EMPTY_ARRAY);\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type, Type... excludedTypes) {\n-        return type == null ? emptyList() : getAllDeclaredMethods(type.asType(), excludedTypes);\n-    }\n-\n-    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type, Type... excludedTypes) {\n-        return getHierarchicalTypes(type, excludedTypes)\n-                .stream()\n-                .map(t -> getDeclaredMethods(t))\n-                .flatMap(Collection::stream)\n-                .collect(Collectors.toList());\n-    }\n-\n-    static List<ExecutableElement> getPublicNonStaticMethods(TypeElement type, Type... excludedTypes) {\n-        return getPublicNonStaticMethods(ofDeclaredType(type), excludedTypes);\n-    }\n-\n-    static List<ExecutableElement> getPublicNonStaticMethods(TypeMirror type, Type... excludedTypes) {\n-        return filter(getAllDeclaredMethods(type, excludedTypes), MethodUtils::isPublicNonStaticMethod);\n-    }\n-\n-    static boolean isMethod(ExecutableElement method) {\n-        return method != null && METHOD.equals(method.getKind());\n-    }\n-\n-    static boolean isPublicNonStaticMethod(ExecutableElement method) {\n-        return isMethod(method) && isPublicNonStatic(method);\n-    }\n-\n-    static ExecutableElement findMethod(TypeElement type, String methodName, Type oneParameterType, Type... otherParameterTypes) {\n-        return type == null ? null : findMethod(type.asType(), methodName, oneParameterType, otherParameterTypes);\n-    }\n-\n-    static ExecutableElement findMethod(TypeMirror type, String methodName, Type oneParameterType, Type... otherParameterTypes) {\n-        List<Type> parameterTypes = new LinkedList<>();\n-        parameterTypes.add(oneParameterType);\n-        parameterTypes.addAll(asList(otherParameterTypes));\n-        return findMethod(type, methodName, parameterTypes.stream().map(Type::getTypeName).toArray(String[]::new));\n-    }\n-\n-    static ExecutableElement findMethod(TypeElement type, String methodName, CharSequence... parameterTypes) {\n-        return type == null ? null : findMethod(type.asType(), methodName, parameterTypes);\n-    }\n-\n-    static ExecutableElement findMethod(TypeMirror type, String methodName, CharSequence... parameterTypes) {\n-        return filterFirst(getAllDeclaredMethods(type),\n-                method -> methodName.equals(method.getSimpleName().toString()),\n-                method -> matchParameterTypes(method.getParameters(), parameterTypes)\n-        );\n-    }\n-\n-    static ExecutableElement getOverrideMethod(ProcessingEnvironment processingEnv, TypeElement type,\n-                                               ExecutableElement declaringMethod) {\n-        Elements elements = processingEnv.getElementUtils();\n-        return filterFirst(getAllDeclaredMethods(type), method -> elements.overrides(method, declaringMethod, type));\n-    }\n-\n-\n-    static String getMethodName(ExecutableElement method) {\n-        return method == null ? null : method.getSimpleName().toString();\n-    }\n-\n-    static String getReturnType(ExecutableElement method) {\n-        return method == null ? null : TypeUtils.toString(method.getReturnType());\n-    }\n-\n-    static String[] getMethodParameterTypes(ExecutableElement method) {\n-        return method == null ?\n-                new String[0] :\n-                method.getParameters()\n-                        .stream()\n-                        .map(VariableElement::asType)\n-                        .map(TypeUtils::toString)\n-                        .toArray(String[]::new);\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.metadata.annotation.processing.util;\r\n+\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.ExecutableElement;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.element.VariableElement;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import javax.lang.model.util.Elements;\r\n+import java.lang.reflect.Type;\r\n+import java.util.Collection;\r\n+import java.util.LinkedList;\r\n+import java.util.List;\r\n+import java.util.function.Predicate;\r\n+import java.util.stream.Collectors;\r\n+\r\n+import static java.util.Arrays.asList;\r\n+import static java.util.Collections.emptyList;\r\n+import static javax.lang.model.element.ElementKind.METHOD;\r\n+import static javax.lang.model.util.ElementFilter.methodsIn;\r\n+import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\r\n+import static org.apache.dubbo.common.function.Streams.filter;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.function.Streams.filterFirst;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.getDeclaredMembers;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.isPublicNonStatic;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.MemberUtils.matchParameterTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.getHierarchicalTypes;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.TypeUtils.ofDeclaredType;\r\n+\r\n+/**\r\n+ * The utilities class for method in the package \"javax.lang.model.\"\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface MethodUtils {\r\n+\r\n+    static List<ExecutableElement> getDeclaredMethods(TypeElement type, Predicate<ExecutableElement>... methodFilters) {\r\n+        return type == null ? emptyList() : getDeclaredMethods(type.asType(), methodFilters);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getDeclaredMethods(TypeMirror type, Predicate<ExecutableElement>... methodFilters) {\r\n+        return filterAll(methodsIn(getDeclaredMembers(type)), methodFilters);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type, Predicate<ExecutableElement>... methodFilters) {\r\n+        return type == null ? emptyList() : getAllDeclaredMethods(type.asType(), methodFilters);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type) {\r\n+        return getAllDeclaredMethods(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type, Predicate<ExecutableElement>... methodFilters) {\r\n+        return getHierarchicalTypes(type)\r\n+                .stream()\r\n+                .map(t -> getDeclaredMethods(t, methodFilters))\r\n+                .flatMap(Collection::stream)\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type) {\r\n+        return getAllDeclaredMethods(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeElement type, Type... excludedTypes) {\r\n+        return type == null ? emptyList() : getAllDeclaredMethods(type.asType(), excludedTypes);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getAllDeclaredMethods(TypeMirror type, Type... excludedTypes) {\r\n+        return getHierarchicalTypes(type, excludedTypes)\r\n+                .stream()\r\n+                .map(t -> getDeclaredMethods(t))\r\n+                .flatMap(Collection::stream)\r\n+                .collect(Collectors.toList());\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getPublicNonStaticMethods(TypeElement type, Type... excludedTypes) {\r\n+        return getPublicNonStaticMethods(ofDeclaredType(type), excludedTypes);\r\n+    }\r\n+\r\n+    static List<ExecutableElement> getPublicNonStaticMethods(TypeMirror type, Type... excludedTypes) {\r\n+        return filter(getAllDeclaredMethods(type, excludedTypes), MethodUtils::isPublicNonStaticMethod);\r\n+    }\r\n+\r\n+    static boolean isMethod(ExecutableElement method) {\r\n+        return method != null && METHOD.equals(method.getKind());\r\n+    }\r\n+\r\n+    static boolean isPublicNonStaticMethod(ExecutableElement method) {\r\n+        return isMethod(method) && isPublicNonStatic(method);\r\n+    }\r\n+\r\n+    static ExecutableElement findMethod(TypeElement type, String methodName, Type oneParameterType, Type... otherParameterTypes) {\r\n+        return type == null ? null : findMethod(type.asType(), methodName, oneParameterType, otherParameterTypes);\r\n+    }\r\n+\r\n+    static ExecutableElement findMethod(TypeMirror type, String methodName, Type oneParameterType, Type... otherParameterTypes) {\r\n+        List<Type> parameterTypes = new LinkedList<>();\r\n+        parameterTypes.add(oneParameterType);\r\n+        parameterTypes.addAll(asList(otherParameterTypes));\r\n+        return findMethod(type, methodName, parameterTypes.stream().map(Type::getTypeName).toArray(String[]::new));\r\n+    }\r\n+\r\n+    static ExecutableElement findMethod(TypeElement type, String methodName, CharSequence... parameterTypes) {\r\n+        return type == null ? null : findMethod(type.asType(), methodName, parameterTypes);\r\n+    }\r\n+\r\n+    static ExecutableElement findMethod(TypeMirror type, String methodName, CharSequence... parameterTypes) {\r\n+        return filterFirst(getAllDeclaredMethods(type),\r\n+                method -> methodName.equals(method.getSimpleName().toString()),\r\n+                method -> matchParameterTypes(method.getParameters(), parameterTypes)\r\n+        );\r\n+    }\r\n+\r\n+    static ExecutableElement getOverrideMethod(ProcessingEnvironment processingEnv, TypeElement type,\r\n+                                               ExecutableElement declaringMethod) {\r\n+        Elements elements = processingEnv.getElementUtils();\r\n+        return filterFirst(getAllDeclaredMethods(type), method -> elements.overrides(method, declaringMethod, type));\r\n+    }\r\n+\r\n+\r\n+    static String getMethodName(ExecutableElement method) {\r\n+        return method == null ? null : method.getSimpleName().toString();\r\n+    }\r\n+\r\n+    static String getReturnType(ExecutableElement method) {\r\n+        return method == null ? null : TypeUtils.toString(method.getReturnType());\r\n+    }\r\n+\r\n+    static String[] getMethodParameterTypes(ExecutableElement method) {\r\n+        return method == null ?\r\n+                new String[0] :\r\n+                method.getParameters()\r\n+                        .stream()\r\n+                        .map(VariableElement::asType)\r\n+                        .map(TypeUtils::toString)\r\n+                        .toArray(String[]::new);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/ServiceAnnotationUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/ServiceAnnotationUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,137 +1,137 @@\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.metadata.annotation.processing.util;\n-\n-import javax.lang.model.element.AnnotationMirror;\n-import javax.lang.model.element.TypeElement;\n-import java.util.LinkedHashSet;\n-import java.util.Objects;\n-import java.util.Set;\n-\n-import static java.lang.String.valueOf;\n-import static java.util.Arrays.asList;\n-import static java.util.Collections.unmodifiableSet;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\n-import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\n-\n-/**\n- * The utilities class for @Service annotation\n- *\n- * @since 2.7.6\n- */\n-public interface ServiceAnnotationUtils {\n-\n-    /**\n-     * The class name of @Service\n-     *\n-     * @deprecated Recommend {@link #DUBBO_SERVICE_ANNOTATION_TYPE}\n-     */\n-    @Deprecated\n-    String SERVICE_ANNOTATION_TYPE = \"org.apache.dubbo.config.annotation.Service\";\n-\n-    /**\n-     * The class name of the legacy @Service\n-     *\n-     * @deprecated Recommend {@link #DUBBO_SERVICE_ANNOTATION_TYPE}\n-     */\n-    @Deprecated\n-    String LEGACY_SERVICE_ANNOTATION_TYPE = \"com.alibaba.dubbo.config.annotation.Service\";\n-\n-    /**\n-     * The class name of @DubboService\n-     *\n-     * @since 2.7.9\n-     */\n-    String DUBBO_SERVICE_ANNOTATION_TYPE = \"org.apache.dubbo.config.annotation.DubboService\";\n-\n-    /**\n-     * the attribute name of @Service.interfaceClass()\n-     */\n-    String INTERFACE_CLASS_ATTRIBUTE_NAME = \"interfaceClass\";\n-\n-    /**\n-     * the attribute name of @Service.interfaceName()\n-     */\n-    String INTERFACE_NAME_ATTRIBUTE_NAME = \"interfaceName\";\n-\n-    /**\n-     * the attribute name of @Service.group()\n-     */\n-    String GROUP_ATTRIBUTE_NAME = \"group\";\n-\n-    /**\n-     * the attribute name of @Service.version()\n-     */\n-    String VERSION_ATTRIBUTE_NAME = \"version\";\n-\n-    Set<String> SUPPORTED_ANNOTATION_TYPES = unmodifiableSet(new LinkedHashSet<>(asList(DUBBO_SERVICE_ANNOTATION_TYPE, SERVICE_ANNOTATION_TYPE, LEGACY_SERVICE_ANNOTATION_TYPE)));\n-\n-    static boolean isServiceAnnotationPresent(TypeElement annotatedType) {\n-        return SUPPORTED_ANNOTATION_TYPES.stream()\n-                .filter(type -> isAnnotationPresent(annotatedType, type))\n-                .findFirst()\n-                .isPresent();\n-    }\n-\n-    static AnnotationMirror getAnnotation(TypeElement annotatedClass) {\n-        return getAnnotation(annotatedClass.getAnnotationMirrors());\n-    }\n-\n-    static AnnotationMirror getAnnotation(Iterable<? extends AnnotationMirror> annotationMirrors) {\n-        AnnotationMirror matchedAnnotationMirror = null;\n-\n-        MAIN:\n-        for (String supportedAnnotationType : SUPPORTED_ANNOTATION_TYPES) { // Prioritized\n-            for (AnnotationMirror annotationMirror : annotationMirrors) {\n-                String annotationType = annotationMirror.getAnnotationType().toString();\n-                if (Objects.equals(supportedAnnotationType, annotationType)) {\n-                    matchedAnnotationMirror = annotationMirror;\n-                    break MAIN;\n-                }\n-            }\n-        }\n-\n-        if (matchedAnnotationMirror == null) {\n-            throw new IllegalArgumentException(\"The annotated element must be annotated any of \" + SUPPORTED_ANNOTATION_TYPES);\n-        }\n-\n-        return matchedAnnotationMirror;\n-    }\n-\n-    static String resolveServiceInterfaceName(TypeElement annotatedClass, AnnotationMirror serviceAnnotation) {\n-        Object interfaceClass = getAttribute(serviceAnnotation, INTERFACE_CLASS_ATTRIBUTE_NAME);\n-\n-        if (interfaceClass == null) { // try to find the \"interfaceName\" attribute\n-            interfaceClass = getAttribute(serviceAnnotation, INTERFACE_NAME_ATTRIBUTE_NAME);\n-        }\n-\n-        if (interfaceClass == null) {\n-            // last, get the interface class from first one\n-            interfaceClass = ((TypeElement) annotatedClass).getInterfaces().get(0);\n-        }\n-\n-        return valueOf(interfaceClass);\n-    }\n-\n-    static String getGroup(AnnotationMirror serviceAnnotation) {\n-        return getAttribute(serviceAnnotation, GROUP_ATTRIBUTE_NAME);\n-    }\n-\n-    static String getVersion(AnnotationMirror serviceAnnotation) {\n-        return getAttribute(serviceAnnotation, VERSION_ATTRIBUTE_NAME);\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.metadata.annotation.processing.util;\r\n+\r\n+import javax.lang.model.element.AnnotationMirror;\r\n+import javax.lang.model.element.TypeElement;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.util.Arrays.asList;\r\n+import static java.util.Collections.unmodifiableSet;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.getAttribute;\r\n+import static org.apache.dubbo.metadata.annotation.processing.util.AnnotationUtils.isAnnotationPresent;\r\n+\r\n+/**\r\n+ * The utilities class for @Service annotation\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface ServiceAnnotationUtils {\r\n+\r\n+    /**\r\n+     * The class name of @Service\r\n+     *\r\n+     * @deprecated Recommend {@link #DUBBO_SERVICE_ANNOTATION_TYPE}\r\n+     */\r\n+    @Deprecated\r\n+    String SERVICE_ANNOTATION_TYPE = \"org.apache.dubbo.config.annotation.Service\";\r\n+\r\n+    /**\r\n+     * The class name of the legacy @Service\r\n+     *\r\n+     * @deprecated Recommend {@link #DUBBO_SERVICE_ANNOTATION_TYPE}\r\n+     */\r\n+    @Deprecated\r\n+    String LEGACY_SERVICE_ANNOTATION_TYPE = \"com.alibaba.dubbo.config.annotation.Service\";\r\n+\r\n+    /**\r\n+     * The class name of @DubboService\r\n+     *\r\n+     * @since 2.7.9\r\n+     */\r\n+    String DUBBO_SERVICE_ANNOTATION_TYPE = \"org.apache.dubbo.config.annotation.DubboService\";\r\n+\r\n+    /**\r\n+     * the attribute name of @Service.interfaceClass()\r\n+     */\r\n+    String INTERFACE_CLASS_ATTRIBUTE_NAME = \"interfaceClass\";\r\n+\r\n+    /**\r\n+     * the attribute name of @Service.interfaceName()\r\n+     */\r\n+    String INTERFACE_NAME_ATTRIBUTE_NAME = \"interfaceName\";\r\n+\r\n+    /**\r\n+     * the attribute name of @Service.group()\r\n+     */\r\n+    String GROUP_ATTRIBUTE_NAME = \"group\";\r\n+\r\n+    /**\r\n+     * the attribute name of @Service.version()\r\n+     */\r\n+    String VERSION_ATTRIBUTE_NAME = \"version\";\r\n+\r\n+    Set<String> SUPPORTED_ANNOTATION_TYPES = unmodifiableSet(new LinkedHashSet<>(asList(DUBBO_SERVICE_ANNOTATION_TYPE, SERVICE_ANNOTATION_TYPE, LEGACY_SERVICE_ANNOTATION_TYPE)));\r\n+\r\n+    static boolean isServiceAnnotationPresent(TypeElement annotatedType) {\r\n+        return SUPPORTED_ANNOTATION_TYPES.stream()\r\n+                .filter(type -> isAnnotationPresent(annotatedType, type))\r\n+                .findFirst()\r\n+                .isPresent();\r\n+    }\r\n+\r\n+    static AnnotationMirror getAnnotation(TypeElement annotatedClass) {\r\n+        return getAnnotation(annotatedClass.getAnnotationMirrors());\r\n+    }\r\n+\r\n+    static AnnotationMirror getAnnotation(Iterable<? extends AnnotationMirror> annotationMirrors) {\r\n+        AnnotationMirror matchedAnnotationMirror = null;\r\n+\r\n+        MAIN:\r\n+        for (String supportedAnnotationType : SUPPORTED_ANNOTATION_TYPES) { // Prioritized\r\n+            for (AnnotationMirror annotationMirror : annotationMirrors) {\r\n+                String annotationType = annotationMirror.getAnnotationType().toString();\r\n+                if (Objects.equals(supportedAnnotationType, annotationType)) {\r\n+                    matchedAnnotationMirror = annotationMirror;\r\n+                    break MAIN;\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        if (matchedAnnotationMirror == null) {\r\n+            throw new IllegalArgumentException(\"The annotated element must be annotated any of \" + SUPPORTED_ANNOTATION_TYPES);\r\n+        }\r\n+\r\n+        return matchedAnnotationMirror;\r\n+    }\r\n+\r\n+    static String resolveServiceInterfaceName(TypeElement annotatedClass, AnnotationMirror serviceAnnotation) {\r\n+        Object interfaceClass = getAttribute(serviceAnnotation, INTERFACE_CLASS_ATTRIBUTE_NAME);\r\n+\r\n+        if (interfaceClass == null) { // try to find the \"interfaceName\" attribute\r\n+            interfaceClass = getAttribute(serviceAnnotation, INTERFACE_NAME_ATTRIBUTE_NAME);\r\n+        }\r\n+\r\n+        if (interfaceClass == null) {\r\n+            // last, get the interface class from first one\r\n+            interfaceClass = ((TypeElement) annotatedClass).getInterfaces().get(0);\r\n+        }\r\n+\r\n+        return valueOf(interfaceClass);\r\n+    }\r\n+\r\n+    static String getGroup(AnnotationMirror serviceAnnotation) {\r\n+        return getAttribute(serviceAnnotation, GROUP_ATTRIBUTE_NAME);\r\n+    }\r\n+\r\n+    static String getVersion(AnnotationMirror serviceAnnotation) {\r\n+        return getAttribute(serviceAnnotation, VERSION_ATTRIBUTE_NAME);\r\n+    }\r\n+}\r\n"}, {"source1": "org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java", "source2": "org/apache/dubbo/metadata/annotation/processing/util/TypeUtils.java", "comments": ["Line-ending differences only"], "unified_diff": "@@ -1,400 +1,400 @@\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.metadata.annotation.processing.util;\n-\n-import org.apache.dubbo.common.utils.ClassUtils;\n-\n-import javax.annotation.processing.ProcessingEnvironment;\n-import javax.lang.model.element.Element;\n-import javax.lang.model.element.TypeElement;\n-import javax.lang.model.element.TypeParameterElement;\n-import javax.lang.model.type.DeclaredType;\n-import javax.lang.model.type.TypeKind;\n-import javax.lang.model.type.TypeMirror;\n-import javax.lang.model.util.Elements;\n-import javax.tools.FileObject;\n-import javax.tools.StandardLocation;\n-import java.io.IOException;\n-import java.lang.reflect.Type;\n-import java.net.URL;\n-import java.util.ArrayList;\n-import java.util.LinkedHashSet;\n-import java.util.List;\n-import java.util.Objects;\n-import java.util.Set;\n-import java.util.function.Predicate;\n-\n-import static java.lang.String.valueOf;\n-import static java.util.Arrays.asList;\n-import static java.util.Collections.emptyList;\n-import static java.util.Collections.emptySet;\n-import static java.util.stream.Collectors.toSet;\n-import static java.util.stream.Stream.of;\n-import static java.util.stream.StreamSupport.stream;\n-import static javax.lang.model.element.ElementKind.ANNOTATION_TYPE;\n-import static javax.lang.model.element.ElementKind.CLASS;\n-import static javax.lang.model.element.ElementKind.ENUM;\n-import static javax.lang.model.element.ElementKind.INTERFACE;\n-import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\n-import static org.apache.dubbo.common.function.Streams.filterAll;\n-import static org.apache.dubbo.common.function.Streams.filterFirst;\n-import static org.apache.dubbo.common.utils.MethodUtils.invokeMethod;\n-\n-/**\n- * The utilities class for type in the package \"javax.lang.model.*\"\n- *\n- * @since 2.7.6\n- */\n-public interface TypeUtils {\n-\n-    List<String> SIMPLE_TYPES = asList(\n-            ClassUtils.SIMPLE_TYPES\n-                    .stream()\n-                    .map(Class::getName)\n-                    .toArray(String[]::new)\n-    );\n-\n-    static boolean isSimpleType(Element element) {\n-        return element != null && isSimpleType(element.asType());\n-    }\n-\n-    static boolean isSimpleType(TypeMirror type) {\n-        return type != null && SIMPLE_TYPES.contains(type.toString());\n-    }\n-\n-    static boolean isSameType(TypeMirror type, CharSequence typeName) {\n-        if (type == null || typeName == null) {\n-            return false;\n-        }\n-        return Objects.equals(valueOf(type), valueOf(typeName));\n-    }\n-\n-    static boolean isSameType(TypeMirror typeMirror, Type type) {\n-        return type != null && isSameType(typeMirror, type.getTypeName());\n-    }\n-\n-    static boolean isArrayType(TypeMirror type) {\n-        return type != null && TypeKind.ARRAY.equals(type.getKind());\n-    }\n-\n-    static boolean isArrayType(Element element) {\n-        return element != null && isArrayType(element.asType());\n-    }\n-\n-    static boolean isEnumType(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        return declaredType != null && ENUM.equals(declaredType.asElement().getKind());\n-    }\n-\n-    static boolean isEnumType(Element element) {\n-        return element != null && isEnumType(element.asType());\n-    }\n-\n-    static boolean isClassType(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        return declaredType != null && isClassType(declaredType.asElement());\n-    }\n-\n-    static boolean isClassType(Element element) {\n-        return element != null && CLASS.equals(element.getKind());\n-    }\n-\n-    static boolean isPrimitiveType(TypeMirror type) {\n-        return type != null && type.getKind().isPrimitive();\n-    }\n-\n-    static boolean isPrimitiveType(Element element) {\n-        return element != null && isPrimitiveType(element.asType());\n-    }\n-\n-    static boolean isInterfaceType(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        return declaredType != null && isInterfaceType(declaredType.asElement());\n-    }\n-\n-    static boolean isInterfaceType(Element element) {\n-        return element != null && INTERFACE.equals(element.getKind());\n-    }\n-\n-    static boolean isAnnotationType(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        return declaredType != null && isAnnotationType(declaredType.asElement());\n-    }\n-\n-    static boolean isAnnotationType(Element element) {\n-        return element != null && ANNOTATION_TYPE.equals(element.getKind());\n-    }\n-\n-    static Set<TypeElement> getHierarchicalTypes(TypeElement type) {\n-        return getHierarchicalTypes(type, true, true, true);\n-    }\n-\n-    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type) {\n-        return getHierarchicalTypes(type, EMPTY_ARRAY);\n-    }\n-\n-    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, Predicate<DeclaredType>... typeFilters) {\n-        return filterAll(ofDeclaredTypes(getHierarchicalTypes(ofTypeElement(type))), typeFilters);\n-    }\n-\n-    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, Type... excludedTypes) {\n-        return getHierarchicalTypes(type, of(excludedTypes).map(Type::getTypeName).toArray(String[]::new));\n-    }\n-\n-    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, CharSequence... excludedTypeNames) {\n-        Set<String> typeNames = of(excludedTypeNames).map(CharSequence::toString).collect(toSet());\n-        return getHierarchicalTypes(type, t -> !typeNames.contains(t.toString()));\n-    }\n-\n-    static Set<TypeElement> getHierarchicalTypes(TypeElement type,\n-                                                 boolean includeSelf,\n-                                                 boolean includeSuperTypes,\n-                                                 boolean includeSuperInterfaces,\n-                                                 Predicate<TypeElement>... typeFilters) {\n-\n-        if (type == null) {\n-            return emptySet();\n-        }\n-\n-        Set<TypeElement> hierarchicalTypes = new LinkedHashSet<>();\n-\n-        if (includeSelf) {\n-            hierarchicalTypes.add(type);\n-        }\n-\n-        if (includeSuperTypes) {\n-            hierarchicalTypes.addAll(getAllSuperTypes(type));\n-        }\n-\n-        if (includeSuperInterfaces) {\n-            hierarchicalTypes.addAll(getAllInterfaces(type));\n-        }\n-\n-        return filterAll(hierarchicalTypes, typeFilters);\n-    }\n-\n-    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type,\n-                                                  boolean includeSelf,\n-                                                  boolean includeSuperTypes,\n-                                                  boolean includeSuperInterfaces) {\n-        return ofDeclaredTypes(getHierarchicalTypes(ofTypeElement(type),\n-                includeSelf,\n-                includeSuperTypes,\n-                includeSuperInterfaces));\n-    }\n-\n-    static List<TypeMirror> getInterfaces(TypeElement type, Predicate<TypeMirror>... interfaceFilters) {\n-        return type == null ? emptyList() : filterAll((List<TypeMirror>) ofTypeElement(type).getInterfaces(), interfaceFilters);\n-    }\n-\n-    static List<TypeMirror> getInterfaces(TypeMirror type, Predicate<TypeMirror>... interfaceFilters) {\n-        return getInterfaces(ofTypeElement(type), interfaceFilters);\n-    }\n-\n-    static Set<TypeElement> getAllInterfaces(TypeElement type, Predicate<TypeElement>... interfaceFilters) {\n-        return type == null ? emptySet() : filterAll(ofTypeElements(getAllInterfaces(type.asType())), interfaceFilters);\n-    }\n-\n-    static Set<? extends TypeMirror> getAllInterfaces(TypeMirror type, Predicate<TypeMirror>... interfaceFilters) {\n-        if (type == null) {\n-            return emptySet();\n-        }\n-        Set<TypeMirror> allInterfaces = new LinkedHashSet<>();\n-        getInterfaces(type).forEach(i -> {\n-            // Add current type's interfaces\n-            allInterfaces.add(i);\n-            // Add\n-            allInterfaces.addAll(getAllInterfaces(i));\n-        });\n-        // Add all super types' interfaces\n-        getAllSuperTypes(type).forEach(superType -> allInterfaces.addAll(getAllInterfaces(superType)));\n-        return filterAll(allInterfaces, interfaceFilters);\n-    }\n-\n-    static TypeMirror findInterface(TypeMirror type, CharSequence interfaceClassName) {\n-        return filterFirst(getAllInterfaces(type), t -> isSameType(t, interfaceClassName));\n-    }\n-\n-    static TypeElement getType(ProcessingEnvironment processingEnv, Type type) {\n-        return type == null ? null : getType(processingEnv, type.getTypeName());\n-    }\n-\n-    static TypeElement getType(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        return type == null ? null : getType(processingEnv, type.toString());\n-    }\n-\n-    static TypeElement getType(ProcessingEnvironment processingEnv, CharSequence typeName) {\n-        if (processingEnv == null || typeName == null) {\n-            return null;\n-        }\n-        Elements elements = processingEnv.getElementUtils();\n-        return elements.getTypeElement(typeName);\n-    }\n-\n-    static TypeElement getSuperType(TypeElement type) {\n-        return type == null ? null : ofTypeElement(type.getSuperclass());\n-    }\n-\n-    static DeclaredType getSuperType(TypeMirror type) {\n-        TypeElement superType = getSuperType(ofTypeElement(type));\n-        return superType == null ? null : ofDeclaredType(superType.asType());\n-    }\n-\n-    static Set<TypeElement> getAllSuperTypes(TypeElement type) {\n-        return getAllSuperTypes(type, EMPTY_ARRAY);\n-    }\n-\n-    static Set<TypeElement> getAllSuperTypes(TypeElement type, Predicate<TypeElement>... typeFilters) {\n-        if (type == null) {\n-            return emptySet();\n-        }\n-\n-        Set<TypeElement> allSuperTypes = new LinkedHashSet<>();\n-        TypeElement superType = getSuperType(type);\n-        if (superType != null) {\n-            // add super type\n-            allSuperTypes.add(superType);\n-            // add ancestors' types\n-            allSuperTypes.addAll(getAllSuperTypes(superType));\n-        }\n-        return filterAll(allSuperTypes, typeFilters);\n-    }\n-\n-    static Set<DeclaredType> getAllSuperTypes(TypeMirror type) {\n-        return getAllSuperTypes(type, EMPTY_ARRAY);\n-    }\n-\n-    static Set<DeclaredType> getAllSuperTypes(TypeMirror type, Predicate<DeclaredType>... typeFilters) {\n-        return filterAll(ofDeclaredTypes(getAllSuperTypes(ofTypeElement(type))), typeFilters);\n-    }\n-\n-    static boolean isDeclaredType(Element element) {\n-        return element != null && isDeclaredType(element.asType());\n-    }\n-\n-    static boolean isDeclaredType(TypeMirror type) {\n-        return type instanceof DeclaredType;\n-    }\n-\n-    static DeclaredType ofDeclaredType(Element element) {\n-        return element == null ? null : ofDeclaredType(element.asType());\n-    }\n-\n-    static DeclaredType ofDeclaredType(TypeMirror type) {\n-        return isDeclaredType(type) ? (DeclaredType) type : null;\n-    }\n-\n-    static boolean isTypeElement(Element element) {\n-        return element instanceof TypeElement;\n-    }\n-\n-    static boolean isTypeElement(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        return declaredType != null && isTypeElement(declaredType.asElement());\n-    }\n-\n-    static TypeElement ofTypeElement(Element element) {\n-        return isTypeElement(element) ? (TypeElement) element : null;\n-    }\n-\n-    static TypeElement ofTypeElement(TypeMirror type) {\n-        DeclaredType declaredType = ofDeclaredType(type);\n-        if (declaredType != null) {\n-            return ofTypeElement(declaredType.asElement());\n-        }\n-        return null;\n-    }\n-\n-    static Set<DeclaredType> ofDeclaredTypes(Iterable<? extends Element> elements) {\n-        return elements == null ?\n-                emptySet() :\n-                stream(elements.spliterator(), false)\n-                        .map(TypeUtils::ofTypeElement)\n-                        .filter(Objects::nonNull)\n-                        .map(Element::asType)\n-                        .map(TypeUtils::ofDeclaredType)\n-                        .filter(Objects::nonNull)\n-                        .collect(LinkedHashSet::new, Set::add, Set::addAll);\n-    }\n-\n-    static Set<TypeElement> ofTypeElements(Iterable<? extends TypeMirror> types) {\n-        return types == null ?\n-                emptySet() :\n-                stream(types.spliterator(), false)\n-                        .map(TypeUtils::ofTypeElement)\n-                        .filter(Objects::nonNull)\n-                        .collect(LinkedHashSet::new, Set::add, Set::addAll);\n-    }\n-\n-    static List<DeclaredType> listDeclaredTypes(Iterable<? extends Element> elements) {\n-        return new ArrayList<>(ofDeclaredTypes(elements));\n-    }\n-\n-    static List<TypeElement> listTypeElements(Iterable<? extends TypeMirror> types) {\n-        return new ArrayList<>(ofTypeElements(types));\n-    }\n-\n-    static URL getResource(ProcessingEnvironment processingEnv, Element type) {\n-        return getResource(processingEnv, ofDeclaredType(type));\n-    }\n-\n-    static URL getResource(ProcessingEnvironment processingEnv, TypeMirror type) {\n-        return type == null ? null : getResource(processingEnv, type.toString());\n-    }\n-\n-    static URL getResource(ProcessingEnvironment processingEnv, CharSequence type) {\n-        String relativeName = getResourceName(type);\n-        URL resource = null;\n-        try {\n-            if (relativeName != null) {\n-                FileObject fileObject = processingEnv.getFiler().getResource(StandardLocation.CLASS_OUTPUT, \"\", relativeName);\n-                resource = fileObject.toUri().toURL();\n-                // try to open it\n-                resource.getContent();\n-            }\n-        } catch (IOException e) {\n-            throw new RuntimeException(e);\n-        }\n-\n-        return resource;\n-    }\n-\n-    static String getResourceName(CharSequence type) {\n-        return type == null ? null : type.toString().replace('.', '/').concat(\".class\");\n-    }\n-\n-    static String toString(TypeMirror type) {\n-        TypeElement element = ofTypeElement(type);\n-        if (element != null) {\n-            List<? extends TypeParameterElement> typeParameterElements = element.getTypeParameters();\n-            if (!typeParameterElements.isEmpty()) {\n-                List<TypeMirror> typeMirrors = invokeMethod(type, \"getTypeArguments\");\n-                StringBuilder typeBuilder = new StringBuilder(element.toString());\n-                typeBuilder.append(\"<\");\n-                for (int i = 0; i < typeMirrors.size(); i++) {\n-                    if (i > 0) {\n-                        typeBuilder.append(\", \");\n-                    }\n-                    typeBuilder.append(typeMirrors.get(i).toString());\n-                }\n-                typeBuilder.append(\">\");\n-                return typeBuilder.toString();\n-            }\n-        }\n-        return type.toString();\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.metadata.annotation.processing.util;\r\n+\r\n+import org.apache.dubbo.common.utils.ClassUtils;\r\n+\r\n+import javax.annotation.processing.ProcessingEnvironment;\r\n+import javax.lang.model.element.Element;\r\n+import javax.lang.model.element.TypeElement;\r\n+import javax.lang.model.element.TypeParameterElement;\r\n+import javax.lang.model.type.DeclaredType;\r\n+import javax.lang.model.type.TypeKind;\r\n+import javax.lang.model.type.TypeMirror;\r\n+import javax.lang.model.util.Elements;\r\n+import javax.tools.FileObject;\r\n+import javax.tools.StandardLocation;\r\n+import java.io.IOException;\r\n+import java.lang.reflect.Type;\r\n+import java.net.URL;\r\n+import java.util.ArrayList;\r\n+import java.util.LinkedHashSet;\r\n+import java.util.List;\r\n+import java.util.Objects;\r\n+import java.util.Set;\r\n+import java.util.function.Predicate;\r\n+\r\n+import static java.lang.String.valueOf;\r\n+import static java.util.Arrays.asList;\r\n+import static java.util.Collections.emptyList;\r\n+import static java.util.Collections.emptySet;\r\n+import static java.util.stream.Collectors.toSet;\r\n+import static java.util.stream.Stream.of;\r\n+import static java.util.stream.StreamSupport.stream;\r\n+import static javax.lang.model.element.ElementKind.ANNOTATION_TYPE;\r\n+import static javax.lang.model.element.ElementKind.CLASS;\r\n+import static javax.lang.model.element.ElementKind.ENUM;\r\n+import static javax.lang.model.element.ElementKind.INTERFACE;\r\n+import static org.apache.dubbo.common.function.Predicates.EMPTY_ARRAY;\r\n+import static org.apache.dubbo.common.function.Streams.filterAll;\r\n+import static org.apache.dubbo.common.function.Streams.filterFirst;\r\n+import static org.apache.dubbo.common.utils.MethodUtils.invokeMethod;\r\n+\r\n+/**\r\n+ * The utilities class for type in the package \"javax.lang.model.*\"\r\n+ *\r\n+ * @since 2.7.6\r\n+ */\r\n+public interface TypeUtils {\r\n+\r\n+    List<String> SIMPLE_TYPES = asList(\r\n+            ClassUtils.SIMPLE_TYPES\r\n+                    .stream()\r\n+                    .map(Class::getName)\r\n+                    .toArray(String[]::new)\r\n+    );\r\n+\r\n+    static boolean isSimpleType(Element element) {\r\n+        return element != null && isSimpleType(element.asType());\r\n+    }\r\n+\r\n+    static boolean isSimpleType(TypeMirror type) {\r\n+        return type != null && SIMPLE_TYPES.contains(type.toString());\r\n+    }\r\n+\r\n+    static boolean isSameType(TypeMirror type, CharSequence typeName) {\r\n+        if (type == null || typeName == null) {\r\n+            return false;\r\n+        }\r\n+        return Objects.equals(valueOf(type), valueOf(typeName));\r\n+    }\r\n+\r\n+    static boolean isSameType(TypeMirror typeMirror, Type type) {\r\n+        return type != null && isSameType(typeMirror, type.getTypeName());\r\n+    }\r\n+\r\n+    static boolean isArrayType(TypeMirror type) {\r\n+        return type != null && TypeKind.ARRAY.equals(type.getKind());\r\n+    }\r\n+\r\n+    static boolean isArrayType(Element element) {\r\n+        return element != null && isArrayType(element.asType());\r\n+    }\r\n+\r\n+    static boolean isEnumType(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        return declaredType != null && ENUM.equals(declaredType.asElement().getKind());\r\n+    }\r\n+\r\n+    static boolean isEnumType(Element element) {\r\n+        return element != null && isEnumType(element.asType());\r\n+    }\r\n+\r\n+    static boolean isClassType(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        return declaredType != null && isClassType(declaredType.asElement());\r\n+    }\r\n+\r\n+    static boolean isClassType(Element element) {\r\n+        return element != null && CLASS.equals(element.getKind());\r\n+    }\r\n+\r\n+    static boolean isPrimitiveType(TypeMirror type) {\r\n+        return type != null && type.getKind().isPrimitive();\r\n+    }\r\n+\r\n+    static boolean isPrimitiveType(Element element) {\r\n+        return element != null && isPrimitiveType(element.asType());\r\n+    }\r\n+\r\n+    static boolean isInterfaceType(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        return declaredType != null && isInterfaceType(declaredType.asElement());\r\n+    }\r\n+\r\n+    static boolean isInterfaceType(Element element) {\r\n+        return element != null && INTERFACE.equals(element.getKind());\r\n+    }\r\n+\r\n+    static boolean isAnnotationType(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        return declaredType != null && isAnnotationType(declaredType.asElement());\r\n+    }\r\n+\r\n+    static boolean isAnnotationType(Element element) {\r\n+        return element != null && ANNOTATION_TYPE.equals(element.getKind());\r\n+    }\r\n+\r\n+    static Set<TypeElement> getHierarchicalTypes(TypeElement type) {\r\n+        return getHierarchicalTypes(type, true, true, true);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type) {\r\n+        return getHierarchicalTypes(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, Predicate<DeclaredType>... typeFilters) {\r\n+        return filterAll(ofDeclaredTypes(getHierarchicalTypes(ofTypeElement(type))), typeFilters);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, Type... excludedTypes) {\r\n+        return getHierarchicalTypes(type, of(excludedTypes).map(Type::getTypeName).toArray(String[]::new));\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type, CharSequence... excludedTypeNames) {\r\n+        Set<String> typeNames = of(excludedTypeNames).map(CharSequence::toString).collect(toSet());\r\n+        return getHierarchicalTypes(type, t -> !typeNames.contains(t.toString()));\r\n+    }\r\n+\r\n+    static Set<TypeElement> getHierarchicalTypes(TypeElement type,\r\n+                                                 boolean includeSelf,\r\n+                                                 boolean includeSuperTypes,\r\n+                                                 boolean includeSuperInterfaces,\r\n+                                                 Predicate<TypeElement>... typeFilters) {\r\n+\r\n+        if (type == null) {\r\n+            return emptySet();\r\n+        }\r\n+\r\n+        Set<TypeElement> hierarchicalTypes = new LinkedHashSet<>();\r\n+\r\n+        if (includeSelf) {\r\n+            hierarchicalTypes.add(type);\r\n+        }\r\n+\r\n+        if (includeSuperTypes) {\r\n+            hierarchicalTypes.addAll(getAllSuperTypes(type));\r\n+        }\r\n+\r\n+        if (includeSuperInterfaces) {\r\n+            hierarchicalTypes.addAll(getAllInterfaces(type));\r\n+        }\r\n+\r\n+        return filterAll(hierarchicalTypes, typeFilters);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getHierarchicalTypes(TypeMirror type,\r\n+                                                  boolean includeSelf,\r\n+                                                  boolean includeSuperTypes,\r\n+                                                  boolean includeSuperInterfaces) {\r\n+        return ofDeclaredTypes(getHierarchicalTypes(ofTypeElement(type),\r\n+                includeSelf,\r\n+                includeSuperTypes,\r\n+                includeSuperInterfaces));\r\n+    }\r\n+\r\n+    static List<TypeMirror> getInterfaces(TypeElement type, Predicate<TypeMirror>... interfaceFilters) {\r\n+        return type == null ? emptyList() : filterAll((List<TypeMirror>) ofTypeElement(type).getInterfaces(), interfaceFilters);\r\n+    }\r\n+\r\n+    static List<TypeMirror> getInterfaces(TypeMirror type, Predicate<TypeMirror>... interfaceFilters) {\r\n+        return getInterfaces(ofTypeElement(type), interfaceFilters);\r\n+    }\r\n+\r\n+    static Set<TypeElement> getAllInterfaces(TypeElement type, Predicate<TypeElement>... interfaceFilters) {\r\n+        return type == null ? emptySet() : filterAll(ofTypeElements(getAllInterfaces(type.asType())), interfaceFilters);\r\n+    }\r\n+\r\n+    static Set<? extends TypeMirror> getAllInterfaces(TypeMirror type, Predicate<TypeMirror>... interfaceFilters) {\r\n+        if (type == null) {\r\n+            return emptySet();\r\n+        }\r\n+        Set<TypeMirror> allInterfaces = new LinkedHashSet<>();\r\n+        getInterfaces(type).forEach(i -> {\r\n+            // Add current type's interfaces\r\n+            allInterfaces.add(i);\r\n+            // Add\r\n+            allInterfaces.addAll(getAllInterfaces(i));\r\n+        });\r\n+        // Add all super types' interfaces\r\n+        getAllSuperTypes(type).forEach(superType -> allInterfaces.addAll(getAllInterfaces(superType)));\r\n+        return filterAll(allInterfaces, interfaceFilters);\r\n+    }\r\n+\r\n+    static TypeMirror findInterface(TypeMirror type, CharSequence interfaceClassName) {\r\n+        return filterFirst(getAllInterfaces(type), t -> isSameType(t, interfaceClassName));\r\n+    }\r\n+\r\n+    static TypeElement getType(ProcessingEnvironment processingEnv, Type type) {\r\n+        return type == null ? null : getType(processingEnv, type.getTypeName());\r\n+    }\r\n+\r\n+    static TypeElement getType(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        return type == null ? null : getType(processingEnv, type.toString());\r\n+    }\r\n+\r\n+    static TypeElement getType(ProcessingEnvironment processingEnv, CharSequence typeName) {\r\n+        if (processingEnv == null || typeName == null) {\r\n+            return null;\r\n+        }\r\n+        Elements elements = processingEnv.getElementUtils();\r\n+        return elements.getTypeElement(typeName);\r\n+    }\r\n+\r\n+    static TypeElement getSuperType(TypeElement type) {\r\n+        return type == null ? null : ofTypeElement(type.getSuperclass());\r\n+    }\r\n+\r\n+    static DeclaredType getSuperType(TypeMirror type) {\r\n+        TypeElement superType = getSuperType(ofTypeElement(type));\r\n+        return superType == null ? null : ofDeclaredType(superType.asType());\r\n+    }\r\n+\r\n+    static Set<TypeElement> getAllSuperTypes(TypeElement type) {\r\n+        return getAllSuperTypes(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static Set<TypeElement> getAllSuperTypes(TypeElement type, Predicate<TypeElement>... typeFilters) {\r\n+        if (type == null) {\r\n+            return emptySet();\r\n+        }\r\n+\r\n+        Set<TypeElement> allSuperTypes = new LinkedHashSet<>();\r\n+        TypeElement superType = getSuperType(type);\r\n+        if (superType != null) {\r\n+            // add super type\r\n+            allSuperTypes.add(superType);\r\n+            // add ancestors' types\r\n+            allSuperTypes.addAll(getAllSuperTypes(superType));\r\n+        }\r\n+        return filterAll(allSuperTypes, typeFilters);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getAllSuperTypes(TypeMirror type) {\r\n+        return getAllSuperTypes(type, EMPTY_ARRAY);\r\n+    }\r\n+\r\n+    static Set<DeclaredType> getAllSuperTypes(TypeMirror type, Predicate<DeclaredType>... typeFilters) {\r\n+        return filterAll(ofDeclaredTypes(getAllSuperTypes(ofTypeElement(type))), typeFilters);\r\n+    }\r\n+\r\n+    static boolean isDeclaredType(Element element) {\r\n+        return element != null && isDeclaredType(element.asType());\r\n+    }\r\n+\r\n+    static boolean isDeclaredType(TypeMirror type) {\r\n+        return type instanceof DeclaredType;\r\n+    }\r\n+\r\n+    static DeclaredType ofDeclaredType(Element element) {\r\n+        return element == null ? null : ofDeclaredType(element.asType());\r\n+    }\r\n+\r\n+    static DeclaredType ofDeclaredType(TypeMirror type) {\r\n+        return isDeclaredType(type) ? (DeclaredType) type : null;\r\n+    }\r\n+\r\n+    static boolean isTypeElement(Element element) {\r\n+        return element instanceof TypeElement;\r\n+    }\r\n+\r\n+    static boolean isTypeElement(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        return declaredType != null && isTypeElement(declaredType.asElement());\r\n+    }\r\n+\r\n+    static TypeElement ofTypeElement(Element element) {\r\n+        return isTypeElement(element) ? (TypeElement) element : null;\r\n+    }\r\n+\r\n+    static TypeElement ofTypeElement(TypeMirror type) {\r\n+        DeclaredType declaredType = ofDeclaredType(type);\r\n+        if (declaredType != null) {\r\n+            return ofTypeElement(declaredType.asElement());\r\n+        }\r\n+        return null;\r\n+    }\r\n+\r\n+    static Set<DeclaredType> ofDeclaredTypes(Iterable<? extends Element> elements) {\r\n+        return elements == null ?\r\n+                emptySet() :\r\n+                stream(elements.spliterator(), false)\r\n+                        .map(TypeUtils::ofTypeElement)\r\n+                        .filter(Objects::nonNull)\r\n+                        .map(Element::asType)\r\n+                        .map(TypeUtils::ofDeclaredType)\r\n+                        .filter(Objects::nonNull)\r\n+                        .collect(LinkedHashSet::new, Set::add, Set::addAll);\r\n+    }\r\n+\r\n+    static Set<TypeElement> ofTypeElements(Iterable<? extends TypeMirror> types) {\r\n+        return types == null ?\r\n+                emptySet() :\r\n+                stream(types.spliterator(), false)\r\n+                        .map(TypeUtils::ofTypeElement)\r\n+                        .filter(Objects::nonNull)\r\n+                        .collect(LinkedHashSet::new, Set::add, Set::addAll);\r\n+    }\r\n+\r\n+    static List<DeclaredType> listDeclaredTypes(Iterable<? extends Element> elements) {\r\n+        return new ArrayList<>(ofDeclaredTypes(elements));\r\n+    }\r\n+\r\n+    static List<TypeElement> listTypeElements(Iterable<? extends TypeMirror> types) {\r\n+        return new ArrayList<>(ofTypeElements(types));\r\n+    }\r\n+\r\n+    static URL getResource(ProcessingEnvironment processingEnv, Element type) {\r\n+        return getResource(processingEnv, ofDeclaredType(type));\r\n+    }\r\n+\r\n+    static URL getResource(ProcessingEnvironment processingEnv, TypeMirror type) {\r\n+        return type == null ? null : getResource(processingEnv, type.toString());\r\n+    }\r\n+\r\n+    static URL getResource(ProcessingEnvironment processingEnv, CharSequence type) {\r\n+        String relativeName = getResourceName(type);\r\n+        URL resource = null;\r\n+        try {\r\n+            if (relativeName != null) {\r\n+                FileObject fileObject = processingEnv.getFiler().getResource(StandardLocation.CLASS_OUTPUT, \"\", relativeName);\r\n+                resource = fileObject.toUri().toURL();\r\n+                // try to open it\r\n+                resource.getContent();\r\n+            }\r\n+        } catch (IOException e) {\r\n+            throw new RuntimeException(e);\r\n+        }\r\n+\r\n+        return resource;\r\n+    }\r\n+\r\n+    static String getResourceName(CharSequence type) {\r\n+        return type == null ? null : type.toString().replace('.', '/').concat(\".class\");\r\n+    }\r\n+\r\n+    static String toString(TypeMirror type) {\r\n+        TypeElement element = ofTypeElement(type);\r\n+        if (element != null) {\r\n+            List<? extends TypeParameterElement> typeParameterElements = element.getTypeParameters();\r\n+            if (!typeParameterElements.isEmpty()) {\r\n+                List<TypeMirror> typeMirrors = invokeMethod(type, \"getTypeArguments\");\r\n+                StringBuilder typeBuilder = new StringBuilder(element.toString());\r\n+                typeBuilder.append(\"<\");\r\n+                for (int i = 0; i < typeMirrors.size(); i++) {\r\n+                    if (i > 0) {\r\n+                        typeBuilder.append(\", \");\r\n+                    }\r\n+                    typeBuilder.append(typeMirrors.get(i).toString());\r\n+                }\r\n+                typeBuilder.append(\">\");\r\n+                return typeBuilder.toString();\r\n+            }\r\n+        }\r\n+        return type.toString();\r\n+    }\r\n }\n"}]}
