{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,8 +1,8 @@\n-Zip file size: 15559 bytes, number of entries: 23\n+Zip file size: 15616 bytes, number of entries: 23\n -rw-r--r--  2.0 unx       64 b- defN 20-Apr-01 08:04 META-INF/MANIFEST.MF\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/metadata/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 org/apache/dubbo/metadata/store/\n@@ -11,15 +11,15 @@\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/dubbo/internal/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/\n drwxr-xr-x  2.0 unx        0 b- stor 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-report-failover/\n -rw-r--r--  2.0 unx     3533 b- defN 20-Apr-01 08:04 META-INF/DEPENDENCIES\n -rw-r--r--  2.0 unx    11358 b- defN 20-Apr-01 08:04 META-INF/LICENSE\n -rw-r--r--  2.0 unx      187 b- defN 20-Apr-01 08:04 META-INF/NOTICE\n--rw-r--r--  2.0 unx     1687 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/store/failover/FailoverCondition.java\n--rw-r--r--  2.0 unx    23562 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/store/failover/FailoverMetadataReport.java\n--rw-r--r--  2.0 unx     1239 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/store/failover/FailoverMetadataReportFactory.java\n--rw-r--r--  2.0 unx     3157 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/store/failover/StrategyMetadataReport.java\n--rw-r--r--  2.0 unx       80 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory\n--rw-r--r--  2.0 unx     1806 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-report-failover/pom.xml\n+-rw-r--r--  2.0 unx     1737 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/store/failover/FailoverCondition.java\n+-rw-r--r--  2.0 unx    24142 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/store/failover/FailoverMetadataReport.java\n+-rw-r--r--  2.0 unx     1267 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/store/failover/FailoverMetadataReportFactory.java\n+-rw-r--r--  2.0 unx     3244 b- defN 20-Apr-01 08:04 org/apache/dubbo/metadata/store/failover/StrategyMetadataReport.java\n+-rw-r--r--  2.0 unx       81 b- defN 20-Apr-01 08:04 META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory\n+-rw-r--r--  2.0 unx     1763 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-report-failover/pom.xml\n -rw-r--r--  2.0 unx       85 b- defN 20-Apr-01 08:04 META-INF/maven/org.apache.dubbo/dubbo-metadata-report-failover/pom.properties\n-23 files, 46758 bytes uncompressed, 12069 bytes compressed:  74.2%\n+23 files, 47461 bytes uncompressed, 12126 bytes compressed:  74.5%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -300,879 +300,879 @@\n 16CE Extract Zip Spec      14 (20) '2.0'\n 16CF Extract OS            00 (0) 'MS-DOS'\n 16D0 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n 16D2 Compression Method    0008 (8) 'Deflated'\n 16D4 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-16D8 CRC                   AB30D581 (2872104321)\n-16DC Compressed Size       000002FE (766)\n-16E0 Uncompressed Size     00000697 (1687)\n+16D8 CRC                   C5E6E015 (3320242197)\n+16DC Compressed Size       00000307 (775)\n+16E0 Uncompressed Size     000006C9 (1737)\n 16E4 Filename Length       003F (63)\n 16E6 Extra Length          0000 (0)\n 16E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n # WARNING: Offset 0x16E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 1727 PAYLOAD\n \n-1A25 LOCAL HEADER #18      04034B50 (67324752)\n-1A29 Extract Zip Spec      14 (20) '2.0'\n-1A2A Extract OS            00 (0) 'MS-DOS'\n-1A2B General Purpose Flag  0800 (2048)\n+1A2E LOCAL HEADER #18      04034B50 (67324752)\n+1A32 Extract Zip Spec      14 (20) '2.0'\n+1A33 Extract OS            00 (0) 'MS-DOS'\n+1A34 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-1A2D Compression Method    0008 (8) 'Deflated'\n-1A2F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-1A33 CRC                   546B40F4 (1416315124)\n-1A37 Compressed Size       00000DFC (3580)\n-1A3B Uncompressed Size     00005C0A (23562)\n-1A3F Filename Length       0044 (68)\n-1A41 Extra Length          0000 (0)\n-1A43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1A36 Compression Method    0008 (8) 'Deflated'\n+1A38 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+1A3C CRC                   95EACAEA (2515192554)\n+1A40 Compressed Size       00000E1E (3614)\n+1A44 Uncompressed Size     00005E4E (24142)\n+1A48 Filename Length       0044 (68)\n+1A4A Extra Length          0000 (0)\n+1A4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1A43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1A4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1A87 PAYLOAD\n+1A90 PAYLOAD\n \n-2883 LOCAL HEADER #19      04034B50 (67324752)\n-2887 Extract Zip Spec      14 (20) '2.0'\n-2888 Extract OS            00 (0) 'MS-DOS'\n-2889 General Purpose Flag  0800 (2048)\n+28AE LOCAL HEADER #19      04034B50 (67324752)\n+28B2 Extract Zip Spec      14 (20) '2.0'\n+28B3 Extract OS            00 (0) 'MS-DOS'\n+28B4 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-288B Compression Method    0008 (8) 'Deflated'\n-288D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2891 CRC                   3F1A06E9 (1058670313)\n-2895 Compressed Size       00000267 (615)\n-2899 Uncompressed Size     000004D7 (1239)\n-289D Filename Length       004B (75)\n-289F Extra Length          0000 (0)\n-28A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+28B6 Compression Method    0008 (8) 'Deflated'\n+28B8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+28BC CRC                   880754E1 (2282181857)\n+28C0 Compressed Size       00000270 (624)\n+28C4 Uncompressed Size     000004F3 (1267)\n+28C8 Filename Length       004B (75)\n+28CA Extra Length          0000 (0)\n+28CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x28A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x28CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-28EC PAYLOAD\n+2917 PAYLOAD\n \n-2B53 LOCAL HEADER #20      04034B50 (67324752)\n-2B57 Extract Zip Spec      14 (20) '2.0'\n-2B58 Extract OS            00 (0) 'MS-DOS'\n-2B59 General Purpose Flag  0800 (2048)\n+2B87 LOCAL HEADER #20      04034B50 (67324752)\n+2B8B Extract Zip Spec      14 (20) '2.0'\n+2B8C Extract OS            00 (0) 'MS-DOS'\n+2B8D General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-2B5B Compression Method    0008 (8) 'Deflated'\n-2B5D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-2B61 CRC                   A5D0004C (2781872204)\n-2B65 Compressed Size       00000498 (1176)\n-2B69 Uncompressed Size     00000C55 (3157)\n-2B6D Filename Length       0044 (68)\n-2B6F Extra Length          0000 (0)\n-2B71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B8F Compression Method    0008 (8) 'Deflated'\n+2B91 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+2B95 CRC                   3DD6411C (1037451548)\n+2B99 Compressed Size       000004A3 (1187)\n+2B9D Uncompressed Size     00000CAC (3244)\n+2BA1 Filename Length       0044 (68)\n+2BA3 Extra Length          0000 (0)\n+2BA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2BA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2BB5 PAYLOAD\n+2BE9 PAYLOAD\n \n-304D LOCAL HEADER #21      04034B50 (67324752)\n-3051 Extract Zip Spec      14 (20) '2.0'\n-3052 Extract OS            00 (0) 'MS-DOS'\n-3053 General Purpose Flag  0800 (2048)\n+308C LOCAL HEADER #21      04034B50 (67324752)\n+3090 Extract Zip Spec      14 (20) '2.0'\n+3091 Extract OS            00 (0) 'MS-DOS'\n+3092 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3055 Compression Method    0008 (8) 'Deflated'\n-3057 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-305B CRC                   09B68607 (162956807)\n-305F Compressed Size       00000041 (65)\n-3063 Uncompressed Size     00000050 (80)\n-3067 Filename Length       004E (78)\n-3069 Extra Length          0000 (0)\n-306B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3094 Compression Method    0008 (8) 'Deflated'\n+3096 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+309A CRC                   E3FBB371 (3824923505)\n+309E Compressed Size       00000042 (66)\n+30A2 Uncompressed Size     00000051 (81)\n+30A6 Filename Length       004E (78)\n+30A8 Extra Length          0000 (0)\n+30AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x306B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x30AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-30B9 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+30F8 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-30FA LOCAL HEADER #22      04034B50 (67324752)\n-30FE Extract Zip Spec      14 (20) '2.0'\n-30FF Extract OS            00 (0) 'MS-DOS'\n-3100 General Purpose Flag  0800 (2048)\n+313A LOCAL HEADER #22      04034B50 (67324752)\n+313E Extract Zip Spec      14 (20) '2.0'\n+313F Extract OS            00 (0) 'MS-DOS'\n+3140 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3102 Compression Method    0008 (8) 'Deflated'\n-3104 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3108 CRC                   2219CEA0 (572116640)\n-310C Compressed Size       0000031B (795)\n-3110 Uncompressed Size     0000070E (1806)\n-3114 Filename Length       0046 (70)\n-3116 Extra Length          0000 (0)\n-3118 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3142 Compression Method    0008 (8) 'Deflated'\n+3144 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3148 CRC                   9E243A48 (2653174344)\n+314C Compressed Size       00000314 (788)\n+3150 Uncompressed Size     000006E3 (1763)\n+3154 Filename Length       0046 (70)\n+3156 Extra Length          0000 (0)\n+3158 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3118: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3158: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-315E PAYLOAD\n+319E PAYLOAD\n \n-3479 LOCAL HEADER #23      04034B50 (67324752)\n-347D Extract Zip Spec      14 (20) '2.0'\n-347E Extract OS            00 (0) 'MS-DOS'\n-347F General Purpose Flag  0800 (2048)\n+34B2 LOCAL HEADER #23      04034B50 (67324752)\n+34B6 Extract Zip Spec      14 (20) '2.0'\n+34B7 Extract OS            00 (0) 'MS-DOS'\n+34B8 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3481 Compression Method    0008 (8) 'Deflated'\n-3483 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3487 CRC                   B914F821 (3105159201)\n-348B Compressed Size       0000004F (79)\n-348F Uncompressed Size     00000055 (85)\n-3493 Filename Length       004D (77)\n-3495 Extra Length          0000 (0)\n-3497 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+34BA Compression Method    0008 (8) 'Deflated'\n+34BC Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+34C0 CRC                   B914F821 (3105159201)\n+34C4 Compressed Size       0000004F (79)\n+34C8 Uncompressed Size     00000055 (85)\n+34CC Filename Length       004D (77)\n+34CE Extra Length          0000 (0)\n+34D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3497: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x34D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-34E4 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+351D PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-3533 CENTRAL HEADER #1     02014B50 (33639248)\n-3537 Created Zip Spec      14 (20) '2.0'\n-3538 Created OS            03 (3) 'Unix'\n-3539 Extract Zip Spec      14 (20) '2.0'\n-353A Extract OS            00 (0) 'MS-DOS'\n-353B General Purpose Flag  0800 (2048)\n+356C CENTRAL HEADER #1     02014B50 (33639248)\n+3570 Created Zip Spec      14 (20) '2.0'\n+3571 Created OS            03 (3) 'Unix'\n+3572 Extract Zip Spec      14 (20) '2.0'\n+3573 Extract OS            00 (0) 'MS-DOS'\n+3574 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-353D Compression Method    0008 (8) 'Deflated'\n-353F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3543 CRC                   A689EB18 (2794056472)\n-3547 Compressed Size       00000042 (66)\n-354B Uncompressed Size     00000040 (64)\n-354F Filename Length       0014 (20)\n-3551 Extra Length          0000 (0)\n-3553 Comment Length        0000 (0)\n-3555 Disk Start            0000 (0)\n-3557 Int File Attributes   0000 (0)\n+3576 Compression Method    0008 (8) 'Deflated'\n+3578 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+357C CRC                   A689EB18 (2794056472)\n+3580 Compressed Size       00000042 (66)\n+3584 Uncompressed Size     00000040 (64)\n+3588 Filename Length       0014 (20)\n+358A Extra Length          0000 (0)\n+358C Comment Length        0000 (0)\n+358E Disk Start            0000 (0)\n+3590 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3559 Ext File Attributes   81A40000 (2175008768)\n+3592 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-355D Local Header Offset   00000000 (0)\n-3561 Filename              'XXXXXXXXXXXXXXXXXXXX'\n+3596 Local Header Offset   00000000 (0)\n+359A Filename              'XXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3561: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x359A: Filename 'XXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3575 CENTRAL HEADER #2     02014B50 (33639248)\n-3579 Created Zip Spec      14 (20) '2.0'\n-357A Created OS            03 (3) 'Unix'\n-357B Extract Zip Spec      0A (10) '1.0'\n-357C Extract OS            00 (0) 'MS-DOS'\n-357D General Purpose Flag  0800 (2048)\n+35AE CENTRAL HEADER #2     02014B50 (33639248)\n+35B2 Created Zip Spec      14 (20) '2.0'\n+35B3 Created OS            03 (3) 'Unix'\n+35B4 Extract Zip Spec      0A (10) '1.0'\n+35B5 Extract OS            00 (0) 'MS-DOS'\n+35B6 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-357F Compression Method    0000 (0) 'Stored'\n-3581 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3585 CRC                   00000000 (0)\n-3589 Compressed Size       00000000 (0)\n-358D Uncompressed Size     00000000 (0)\n-3591 Filename Length       0009 (9)\n-3593 Extra Length          0000 (0)\n-3595 Comment Length        0000 (0)\n-3597 Disk Start            0000 (0)\n-3599 Int File Attributes   0000 (0)\n+35B8 Compression Method    0000 (0) 'Stored'\n+35BA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+35BE CRC                   00000000 (0)\n+35C2 Compressed Size       00000000 (0)\n+35C6 Uncompressed Size     00000000 (0)\n+35CA Filename Length       0009 (9)\n+35CC Extra Length          0000 (0)\n+35CE Comment Length        0000 (0)\n+35D0 Disk Start            0000 (0)\n+35D2 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-359B Ext File Attributes   41ED0010 (1106051088)\n+35D4 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-359F Local Header Offset   00000074 (116)\n-35A3 Filename              'XXXXXXXXX'\n+35D8 Local Header Offset   00000074 (116)\n+35DC Filename              'XXXXXXXXX'\n #\n-# WARNING: Offset 0x35A3: Filename 'XXXXXXXXX'\n+# WARNING: Offset 0x35DC: Filename 'XXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x35A3: Directory 'XXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x35DC: Directory 'XXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x357B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n+# WARNING: Offset 0x35B4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n #\n \n-35AC CENTRAL HEADER #3     02014B50 (33639248)\n-35B0 Created Zip Spec      14 (20) '2.0'\n-35B1 Created OS            03 (3) 'Unix'\n-35B2 Extract Zip Spec      0A (10) '1.0'\n-35B3 Extract OS            00 (0) 'MS-DOS'\n-35B4 General Purpose Flag  0800 (2048)\n+35E5 CENTRAL HEADER #3     02014B50 (33639248)\n+35E9 Created Zip Spec      14 (20) '2.0'\n+35EA Created OS            03 (3) 'Unix'\n+35EB Extract Zip Spec      0A (10) '1.0'\n+35EC Extract OS            00 (0) 'MS-DOS'\n+35ED General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-35B6 Compression Method    0000 (0) 'Stored'\n-35B8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-35BC CRC                   00000000 (0)\n-35C0 Compressed Size       00000000 (0)\n-35C4 Uncompressed Size     00000000 (0)\n-35C8 Filename Length       0004 (4)\n-35CA Extra Length          0000 (0)\n-35CC Comment Length        0000 (0)\n-35CE Disk Start            0000 (0)\n-35D0 Int File Attributes   0000 (0)\n+35EF Compression Method    0000 (0) 'Stored'\n+35F1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+35F5 CRC                   00000000 (0)\n+35F9 Compressed Size       00000000 (0)\n+35FD Uncompressed Size     00000000 (0)\n+3601 Filename Length       0004 (4)\n+3603 Extra Length          0000 (0)\n+3605 Comment Length        0000 (0)\n+3607 Disk Start            0000 (0)\n+3609 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-35D2 Ext File Attributes   41ED0010 (1106051088)\n+360B Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-35D6 Local Header Offset   0000009B (155)\n-35DA Filename              'XXXX'\n+360F Local Header Offset   0000009B (155)\n+3613 Filename              'XXXX'\n #\n-# WARNING: Offset 0x35DA: Filename 'XXXX'\n+# WARNING: Offset 0x3613: Filename 'XXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x35DA: Directory 'XXXX' must end in a '/'\n+# ERROR: Offset 0x3613: Directory 'XXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x35B2: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n+# WARNING: Offset 0x35EB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXX'\n #\n \n-35DE CENTRAL HEADER #4     02014B50 (33639248)\n-35E2 Created Zip Spec      14 (20) '2.0'\n-35E3 Created OS            03 (3) 'Unix'\n-35E4 Extract Zip Spec      0A (10) '1.0'\n-35E5 Extract OS            00 (0) 'MS-DOS'\n-35E6 General Purpose Flag  0800 (2048)\n-     [Bit 11]              1 'Language Encoding'\n-35E8 Compression Method    0000 (0) 'Stored'\n-35EA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-35EE CRC                   00000000 (0)\n-35F2 Compressed Size       00000000 (0)\n-35F6 Uncompressed Size     00000000 (0)\n-35FA Filename Length       000B (11)\n-35FC Extra Length          0000 (0)\n-35FE Comment Length        0000 (0)\n-3600 Disk Start            0000 (0)\n-3602 Int File Attributes   0000 (0)\n-     [Bit 0]               0 'Binary Data'\n-3604 Ext File Attributes   41ED0010 (1106051088)\n-     [Bit 4]               Directory\n-     [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n-     [Bits 28-31]          04 (4) 'Directory'\n-3608 Local Header Offset   000000BD (189)\n-360C Filename              'XXXXXXXXXXX'\n-#\n-# WARNING: Offset 0x360C: Filename 'XXXXXXXXXXX'\n-#          Zero length filename\n-#\n-# ERROR: Offset 0x360C: Directory 'XXXXXXXXXXX' must end in a '/'\n-#        'External Attributes' flag this as a directory\n-#\n-# WARNING: Offset 0x35E4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n-#\n-\n-3617 CENTRAL HEADER #5     02014B50 (33639248)\n+3617 CENTRAL HEADER #4     02014B50 (33639248)\n 361B Created Zip Spec      14 (20) '2.0'\n 361C Created OS            03 (3) 'Unix'\n 361D Extract Zip Spec      0A (10) '1.0'\n 361E Extract OS            00 (0) 'MS-DOS'\n 361F General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n 3621 Compression Method    0000 (0) 'Stored'\n 3623 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n 3627 CRC                   00000000 (0)\n 362B Compressed Size       00000000 (0)\n 362F Uncompressed Size     00000000 (0)\n-3633 Filename Length       0011 (17)\n+3633 Filename Length       000B (11)\n 3635 Extra Length          0000 (0)\n 3637 Comment Length        0000 (0)\n 3639 Disk Start            0000 (0)\n 363B Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n 363D Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-3641 Local Header Offset   000000E6 (230)\n-3645 Filename              'XXXXXXXXXXXXXXXXX'\n+3641 Local Header Offset   000000BD (189)\n+3645 Filename              'XXXXXXXXXXX'\n+#\n+# WARNING: Offset 0x3645: Filename 'XXXXXXXXXXX'\n+#          Zero length filename\n+#\n+# ERROR: Offset 0x3645: Directory 'XXXXXXXXXXX' must end in a '/'\n+#        'External Attributes' flag this as a directory\n+#\n+# WARNING: Offset 0x361D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXX'\n+#\n+\n+3650 CENTRAL HEADER #5     02014B50 (33639248)\n+3654 Created Zip Spec      14 (20) '2.0'\n+3655 Created OS            03 (3) 'Unix'\n+3656 Extract Zip Spec      0A (10) '1.0'\n+3657 Extract OS            00 (0) 'MS-DOS'\n+3658 General Purpose Flag  0800 (2048)\n+     [Bit 11]              1 'Language Encoding'\n+365A Compression Method    0000 (0) 'Stored'\n+365C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3660 CRC                   00000000 (0)\n+3664 Compressed Size       00000000 (0)\n+3668 Uncompressed Size     00000000 (0)\n+366C Filename Length       0011 (17)\n+366E Extra Length          0000 (0)\n+3670 Comment Length        0000 (0)\n+3672 Disk Start            0000 (0)\n+3674 Int File Attributes   0000 (0)\n+     [Bit 0]               0 'Binary Data'\n+3676 Ext File Attributes   41ED0010 (1106051088)\n+     [Bit 4]               Directory\n+     [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n+     [Bits 28-31]          04 (4) 'Directory'\n+367A Local Header Offset   000000E6 (230)\n+367E Filename              'XXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3645: Filename 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x367E: Filename 'XXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x3645: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x367E: Directory 'XXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x361D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3656: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXX'\n #\n \n-3656 CENTRAL HEADER #6     02014B50 (33639248)\n-365A Created Zip Spec      14 (20) '2.0'\n-365B Created OS            03 (3) 'Unix'\n-365C Extract Zip Spec      0A (10) '1.0'\n-365D Extract OS            00 (0) 'MS-DOS'\n-365E General Purpose Flag  0800 (2048)\n+368F CENTRAL HEADER #6     02014B50 (33639248)\n+3693 Created Zip Spec      14 (20) '2.0'\n+3694 Created OS            03 (3) 'Unix'\n+3695 Extract Zip Spec      0A (10) '1.0'\n+3696 Extract OS            00 (0) 'MS-DOS'\n+3697 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-3660 Compression Method    0000 (0) 'Stored'\n-3662 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3666 CRC                   00000000 (0)\n-366A Compressed Size       00000000 (0)\n-366E Uncompressed Size     00000000 (0)\n-3672 Filename Length       001A (26)\n-3674 Extra Length          0000 (0)\n-3676 Comment Length        0000 (0)\n-3678 Disk Start            0000 (0)\n-367A Int File Attributes   0000 (0)\n+3699 Compression Method    0000 (0) 'Stored'\n+369B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+369F CRC                   00000000 (0)\n+36A3 Compressed Size       00000000 (0)\n+36A7 Uncompressed Size     00000000 (0)\n+36AB Filename Length       001A (26)\n+36AD Extra Length          0000 (0)\n+36AF Comment Length        0000 (0)\n+36B1 Disk Start            0000 (0)\n+36B3 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-367C Ext File Attributes   41ED0010 (1106051088)\n+36B5 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-3680 Local Header Offset   00000115 (277)\n-3684 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+36B9 Local Header Offset   00000115 (277)\n+36BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3684: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x36BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x3684: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x36BD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x365C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3695: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-369E CENTRAL HEADER #7     02014B50 (33639248)\n-36A2 Created Zip Spec      14 (20) '2.0'\n-36A3 Created OS            03 (3) 'Unix'\n-36A4 Extract Zip Spec      0A (10) '1.0'\n-36A5 Extract OS            00 (0) 'MS-DOS'\n-36A6 General Purpose Flag  0800 (2048)\n+36D7 CENTRAL HEADER #7     02014B50 (33639248)\n+36DB Created Zip Spec      14 (20) '2.0'\n+36DC Created OS            03 (3) 'Unix'\n+36DD Extract Zip Spec      0A (10) '1.0'\n+36DE Extract OS            00 (0) 'MS-DOS'\n+36DF General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-36A8 Compression Method    0000 (0) 'Stored'\n-36AA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-36AE CRC                   00000000 (0)\n-36B2 Compressed Size       00000000 (0)\n-36B6 Uncompressed Size     00000000 (0)\n-36BA Filename Length       0020 (32)\n-36BC Extra Length          0000 (0)\n-36BE Comment Length        0000 (0)\n-36C0 Disk Start            0000 (0)\n-36C2 Int File Attributes   0000 (0)\n+36E1 Compression Method    0000 (0) 'Stored'\n+36E3 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+36E7 CRC                   00000000 (0)\n+36EB Compressed Size       00000000 (0)\n+36EF Uncompressed Size     00000000 (0)\n+36F3 Filename Length       0020 (32)\n+36F5 Extra Length          0000 (0)\n+36F7 Comment Length        0000 (0)\n+36F9 Disk Start            0000 (0)\n+36FB Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-36C4 Ext File Attributes   41ED0010 (1106051088)\n+36FD Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-36C8 Local Header Offset   0000014D (333)\n-36CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3701 Local Header Offset   0000014D (333)\n+3705 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x36CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3705: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x36CC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x3705: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x36A4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x36DD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-36EC CENTRAL HEADER #8     02014B50 (33639248)\n-36F0 Created Zip Spec      14 (20) '2.0'\n-36F1 Created OS            03 (3) 'Unix'\n-36F2 Extract Zip Spec      0A (10) '1.0'\n-36F3 Extract OS            00 (0) 'MS-DOS'\n-36F4 General Purpose Flag  0800 (2048)\n+3725 CENTRAL HEADER #8     02014B50 (33639248)\n+3729 Created Zip Spec      14 (20) '2.0'\n+372A Created OS            03 (3) 'Unix'\n+372B Extract Zip Spec      0A (10) '1.0'\n+372C Extract OS            00 (0) 'MS-DOS'\n+372D General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-36F6 Compression Method    0000 (0) 'Stored'\n-36F8 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-36FC CRC                   00000000 (0)\n-3700 Compressed Size       00000000 (0)\n-3704 Uncompressed Size     00000000 (0)\n-3708 Filename Length       0029 (41)\n-370A Extra Length          0000 (0)\n-370C Comment Length        0000 (0)\n-370E Disk Start            0000 (0)\n-3710 Int File Attributes   0000 (0)\n+372F Compression Method    0000 (0) 'Stored'\n+3731 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3735 CRC                   00000000 (0)\n+3739 Compressed Size       00000000 (0)\n+373D Uncompressed Size     00000000 (0)\n+3741 Filename Length       0029 (41)\n+3743 Extra Length          0000 (0)\n+3745 Comment Length        0000 (0)\n+3747 Disk Start            0000 (0)\n+3749 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3712 Ext File Attributes   41ED0010 (1106051088)\n+374B Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-3716 Local Header Offset   0000018B (395)\n-371A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+374F Local Header Offset   0000018B (395)\n+3753 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x371A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3753: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x371A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x3753: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x36F2: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x372B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-3743 CENTRAL HEADER #9     02014B50 (33639248)\n-3747 Created Zip Spec      14 (20) '2.0'\n-3748 Created OS            03 (3) 'Unix'\n-3749 Extract Zip Spec      0A (10) '1.0'\n-374A Extract OS            00 (0) 'MS-DOS'\n-374B General Purpose Flag  0800 (2048)\n+377C CENTRAL HEADER #9     02014B50 (33639248)\n+3780 Created Zip Spec      14 (20) '2.0'\n+3781 Created OS            03 (3) 'Unix'\n+3782 Extract Zip Spec      0A (10) '1.0'\n+3783 Extract OS            00 (0) 'MS-DOS'\n+3784 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-374D Compression Method    0000 (0) 'Stored'\n-374F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3753 CRC                   00000000 (0)\n-3757 Compressed Size       00000000 (0)\n-375B Uncompressed Size     00000000 (0)\n-375F Filename Length       000F (15)\n-3761 Extra Length          0000 (0)\n-3763 Comment Length        0000 (0)\n-3765 Disk Start            0000 (0)\n-3767 Int File Attributes   0000 (0)\n+3786 Compression Method    0000 (0) 'Stored'\n+3788 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+378C CRC                   00000000 (0)\n+3790 Compressed Size       00000000 (0)\n+3794 Uncompressed Size     00000000 (0)\n+3798 Filename Length       000F (15)\n+379A Extra Length          0000 (0)\n+379C Comment Length        0000 (0)\n+379E Disk Start            0000 (0)\n+37A0 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3769 Ext File Attributes   41ED0010 (1106051088)\n+37A2 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-376D Local Header Offset   000001D2 (466)\n-3771 Filename              'XXXXXXXXXXXXXXX'\n+37A6 Local Header Offset   000001D2 (466)\n+37AA Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3771: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x37AA: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x3771: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x37AA: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x3749: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3782: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-3780 CENTRAL HEADER #10    02014B50 (33639248)\n-3784 Created Zip Spec      14 (20) '2.0'\n-3785 Created OS            03 (3) 'Unix'\n-3786 Extract Zip Spec      0A (10) '1.0'\n-3787 Extract OS            00 (0) 'MS-DOS'\n-3788 General Purpose Flag  0800 (2048)\n+37B9 CENTRAL HEADER #10    02014B50 (33639248)\n+37BD Created Zip Spec      14 (20) '2.0'\n+37BE Created OS            03 (3) 'Unix'\n+37BF Extract Zip Spec      0A (10) '1.0'\n+37C0 Extract OS            00 (0) 'MS-DOS'\n+37C1 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-378A Compression Method    0000 (0) 'Stored'\n-378C Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3790 CRC                   00000000 (0)\n-3794 Compressed Size       00000000 (0)\n-3798 Uncompressed Size     00000000 (0)\n-379C Filename Length       0018 (24)\n-379E Extra Length          0000 (0)\n-37A0 Comment Length        0000 (0)\n-37A2 Disk Start            0000 (0)\n-37A4 Int File Attributes   0000 (0)\n+37C3 Compression Method    0000 (0) 'Stored'\n+37C5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+37C9 CRC                   00000000 (0)\n+37CD Compressed Size       00000000 (0)\n+37D1 Uncompressed Size     00000000 (0)\n+37D5 Filename Length       0018 (24)\n+37D7 Extra Length          0000 (0)\n+37D9 Comment Length        0000 (0)\n+37DB Disk Start            0000 (0)\n+37DD Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-37A6 Ext File Attributes   41ED0010 (1106051088)\n+37DF Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-37AA Local Header Offset   000001FF (511)\n-37AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n+37E3 Local Header Offset   000001FF (511)\n+37E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x37AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x37E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x37AE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x37E7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x3786: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x37BF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-37C6 CENTRAL HEADER #11    02014B50 (33639248)\n-37CA Created Zip Spec      14 (20) '2.0'\n-37CB Created OS            03 (3) 'Unix'\n-37CC Extract Zip Spec      0A (10) '1.0'\n-37CD Extract OS            00 (0) 'MS-DOS'\n-37CE General Purpose Flag  0800 (2048)\n+37FF CENTRAL HEADER #11    02014B50 (33639248)\n+3803 Created Zip Spec      14 (20) '2.0'\n+3804 Created OS            03 (3) 'Unix'\n+3805 Extract Zip Spec      0A (10) '1.0'\n+3806 Extract OS            00 (0) 'MS-DOS'\n+3807 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-37D0 Compression Method    0000 (0) 'Stored'\n-37D2 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-37D6 CRC                   00000000 (0)\n-37DA Compressed Size       00000000 (0)\n-37DE Uncompressed Size     00000000 (0)\n-37E2 Filename Length       000F (15)\n-37E4 Extra Length          0000 (0)\n-37E6 Comment Length        0000 (0)\n-37E8 Disk Start            0000 (0)\n-37EA Int File Attributes   0000 (0)\n+3809 Compression Method    0000 (0) 'Stored'\n+380B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+380F CRC                   00000000 (0)\n+3813 Compressed Size       00000000 (0)\n+3817 Uncompressed Size     00000000 (0)\n+381B Filename Length       000F (15)\n+381D Extra Length          0000 (0)\n+381F Comment Length        0000 (0)\n+3821 Disk Start            0000 (0)\n+3823 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-37EC Ext File Attributes   41ED0010 (1106051088)\n+3825 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-37F0 Local Header Offset   00000235 (565)\n-37F4 Filename              'XXXXXXXXXXXXXXX'\n+3829 Local Header Offset   00000235 (565)\n+382D Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x37F4: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x382D: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x37F4: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x382D: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x37CC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3805: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-3803 CENTRAL HEADER #12    02014B50 (33639248)\n-3807 Created Zip Spec      14 (20) '2.0'\n-3808 Created OS            03 (3) 'Unix'\n-3809 Extract Zip Spec      0A (10) '1.0'\n-380A Extract OS            00 (0) 'MS-DOS'\n-380B General Purpose Flag  0800 (2048)\n+383C CENTRAL HEADER #12    02014B50 (33639248)\n+3840 Created Zip Spec      14 (20) '2.0'\n+3841 Created OS            03 (3) 'Unix'\n+3842 Extract Zip Spec      0A (10) '1.0'\n+3843 Extract OS            00 (0) 'MS-DOS'\n+3844 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-380D Compression Method    0000 (0) 'Stored'\n-380F Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3813 CRC                   00000000 (0)\n-3817 Compressed Size       00000000 (0)\n-381B Uncompressed Size     00000000 (0)\n-381F Filename Length       0020 (32)\n-3821 Extra Length          0000 (0)\n-3823 Comment Length        0000 (0)\n-3825 Disk Start            0000 (0)\n-3827 Int File Attributes   0000 (0)\n+3846 Compression Method    0000 (0) 'Stored'\n+3848 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+384C CRC                   00000000 (0)\n+3850 Compressed Size       00000000 (0)\n+3854 Uncompressed Size     00000000 (0)\n+3858 Filename Length       0020 (32)\n+385A Extra Length          0000 (0)\n+385C Comment Length        0000 (0)\n+385E Disk Start            0000 (0)\n+3860 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3829 Ext File Attributes   41ED0010 (1106051088)\n+3862 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-382D Local Header Offset   00000262 (610)\n-3831 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3866 Local Header Offset   00000262 (610)\n+386A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3831: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x386A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x3831: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x386A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x3809: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3842: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-3851 CENTRAL HEADER #13    02014B50 (33639248)\n-3855 Created Zip Spec      14 (20) '2.0'\n-3856 Created OS            03 (3) 'Unix'\n-3857 Extract Zip Spec      0A (10) '1.0'\n-3858 Extract OS            00 (0) 'MS-DOS'\n-3859 General Purpose Flag  0800 (2048)\n+388A CENTRAL HEADER #13    02014B50 (33639248)\n+388E Created Zip Spec      14 (20) '2.0'\n+388F Created OS            03 (3) 'Unix'\n+3890 Extract Zip Spec      0A (10) '1.0'\n+3891 Extract OS            00 (0) 'MS-DOS'\n+3892 General Purpose Flag  0800 (2048)\n      [Bit 11]              1 'Language Encoding'\n-385B Compression Method    0000 (0) 'Stored'\n-385D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3861 CRC                   00000000 (0)\n-3865 Compressed Size       00000000 (0)\n-3869 Uncompressed Size     00000000 (0)\n-386D Filename Length       003F (63)\n-386F Extra Length          0000 (0)\n-3871 Comment Length        0000 (0)\n-3873 Disk Start            0000 (0)\n-3875 Int File Attributes   0000 (0)\n+3894 Compression Method    0000 (0) 'Stored'\n+3896 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+389A CRC                   00000000 (0)\n+389E Compressed Size       00000000 (0)\n+38A2 Uncompressed Size     00000000 (0)\n+38A6 Filename Length       003F (63)\n+38A8 Extra Length          0000 (0)\n+38AA Comment Length        0000 (0)\n+38AC Disk Start            0000 (0)\n+38AE Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3877 Ext File Attributes   41ED0010 (1106051088)\n+38B0 Ext File Attributes   41ED0010 (1106051088)\n      [Bit 4]               Directory\n      [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n      [Bits 28-31]          04 (4) 'Directory'\n-387B Local Header Offset   000002A0 (672)\n-387F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+38B4 Local Header Offset   000002A0 (672)\n+38B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x387F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x38B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0x387F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0x38B8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0x3857: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3890: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-38BE CENTRAL HEADER #14    02014B50 (33639248)\n-38C2 Created Zip Spec      14 (20) '2.0'\n-38C3 Created OS            03 (3) 'Unix'\n-38C4 Extract Zip Spec      14 (20) '2.0'\n-38C5 Extract OS            00 (0) 'MS-DOS'\n-38C6 General Purpose Flag  0800 (2048)\n+38F7 CENTRAL HEADER #14    02014B50 (33639248)\n+38FB Created Zip Spec      14 (20) '2.0'\n+38FC Created OS            03 (3) 'Unix'\n+38FD Extract Zip Spec      14 (20) '2.0'\n+38FE Extract OS            00 (0) 'MS-DOS'\n+38FF General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-38C8 Compression Method    0008 (8) 'Deflated'\n-38CA Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-38CE CRC                   2E61A3FD (778150909)\n-38D2 Compressed Size       0000034B (843)\n-38D6 Uncompressed Size     00000DCD (3533)\n-38DA Filename Length       0015 (21)\n-38DC Extra Length          0000 (0)\n-38DE Comment Length        0000 (0)\n-38E0 Disk Start            0000 (0)\n-38E2 Int File Attributes   0000 (0)\n+3901 Compression Method    0008 (8) 'Deflated'\n+3903 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3907 CRC                   2E61A3FD (778150909)\n+390B Compressed Size       0000034B (843)\n+390F Uncompressed Size     00000DCD (3533)\n+3913 Filename Length       0015 (21)\n+3915 Extra Length          0000 (0)\n+3917 Comment Length        0000 (0)\n+3919 Disk Start            0000 (0)\n+391B Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-38E4 Ext File Attributes   81A40000 (2175008768)\n+391D Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-38E8 Local Header Offset   000002FD (765)\n-38EC Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+3921 Local Header Offset   000002FD (765)\n+3925 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x38EC: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3925: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3901 CENTRAL HEADER #15    02014B50 (33639248)\n-3905 Created Zip Spec      14 (20) '2.0'\n-3906 Created OS            03 (3) 'Unix'\n-3907 Extract Zip Spec      14 (20) '2.0'\n-3908 Extract OS            00 (0) 'MS-DOS'\n-3909 General Purpose Flag  0800 (2048)\n+393A CENTRAL HEADER #15    02014B50 (33639248)\n+393E Created Zip Spec      14 (20) '2.0'\n+393F Created OS            03 (3) 'Unix'\n+3940 Extract Zip Spec      14 (20) '2.0'\n+3941 Extract OS            00 (0) 'MS-DOS'\n+3942 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-390B Compression Method    0008 (8) 'Deflated'\n-390D Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3911 CRC                   86E2B4B4 (2263004340)\n-3915 Compressed Size       00000F6D (3949)\n-3919 Uncompressed Size     00002C5E (11358)\n-391D Filename Length       0010 (16)\n-391F Extra Length          0000 (0)\n-3921 Comment Length        0000 (0)\n-3923 Disk Start            0000 (0)\n-3925 Int File Attributes   0000 (0)\n+3944 Compression Method    0008 (8) 'Deflated'\n+3946 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+394A CRC                   86E2B4B4 (2263004340)\n+394E Compressed Size       00000F6D (3949)\n+3952 Uncompressed Size     00002C5E (11358)\n+3956 Filename Length       0010 (16)\n+3958 Extra Length          0000 (0)\n+395A Comment Length        0000 (0)\n+395C Disk Start            0000 (0)\n+395E Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3927 Ext File Attributes   81A40000 (2175008768)\n+3960 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-392B Local Header Offset   0000067B (1659)\n-392F Filename              'XXXXXXXXXXXXXXXX'\n+3964 Local Header Offset   0000067B (1659)\n+3968 Filename              'XXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x392F: Filename 'XXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3968: Filename 'XXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-393F CENTRAL HEADER #16    02014B50 (33639248)\n-3943 Created Zip Spec      14 (20) '2.0'\n-3944 Created OS            03 (3) 'Unix'\n-3945 Extract Zip Spec      14 (20) '2.0'\n-3946 Extract OS            00 (0) 'MS-DOS'\n-3947 General Purpose Flag  0800 (2048)\n+3978 CENTRAL HEADER #16    02014B50 (33639248)\n+397C Created Zip Spec      14 (20) '2.0'\n+397D Created OS            03 (3) 'Unix'\n+397E Extract Zip Spec      14 (20) '2.0'\n+397F Extract OS            00 (0) 'MS-DOS'\n+3980 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3949 Compression Method    0008 (8) 'Deflated'\n-394B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-394F CRC                   43330610 (1127417360)\n-3953 Compressed Size       00000087 (135)\n-3957 Uncompressed Size     000000BB (187)\n-395B Filename Length       000F (15)\n-395D Extra Length          0000 (0)\n-395F Comment Length        0000 (0)\n-3961 Disk Start            0000 (0)\n-3963 Int File Attributes   0000 (0)\n+3982 Compression Method    0008 (8) 'Deflated'\n+3984 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3988 CRC                   43330610 (1127417360)\n+398C Compressed Size       00000087 (135)\n+3990 Uncompressed Size     000000BB (187)\n+3994 Filename Length       000F (15)\n+3996 Extra Length          0000 (0)\n+3998 Comment Length        0000 (0)\n+399A Disk Start            0000 (0)\n+399C Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3965 Ext File Attributes   81A40000 (2175008768)\n+399E Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3969 Local Header Offset   00001616 (5654)\n-396D Filename              'XXXXXXXXXXXXXXX'\n+39A2 Local Header Offset   00001616 (5654)\n+39A6 Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x396D: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x39A6: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-397C CENTRAL HEADER #17    02014B50 (33639248)\n-3980 Created Zip Spec      14 (20) '2.0'\n-3981 Created OS            03 (3) 'Unix'\n-3982 Extract Zip Spec      14 (20) '2.0'\n-3983 Extract OS            00 (0) 'MS-DOS'\n-3984 General Purpose Flag  0800 (2048)\n+39B5 CENTRAL HEADER #17    02014B50 (33639248)\n+39B9 Created Zip Spec      14 (20) '2.0'\n+39BA Created OS            03 (3) 'Unix'\n+39BB Extract Zip Spec      14 (20) '2.0'\n+39BC Extract OS            00 (0) 'MS-DOS'\n+39BD General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3986 Compression Method    0008 (8) 'Deflated'\n-3988 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-398C CRC                   AB30D581 (2872104321)\n-3990 Compressed Size       000002FE (766)\n-3994 Uncompressed Size     00000697 (1687)\n-3998 Filename Length       003F (63)\n-399A Extra Length          0000 (0)\n-399C Comment Length        0000 (0)\n-399E Disk Start            0000 (0)\n-39A0 Int File Attributes   0000 (0)\n+39BF Compression Method    0008 (8) 'Deflated'\n+39C1 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+39C5 CRC                   C5E6E015 (3320242197)\n+39C9 Compressed Size       00000307 (775)\n+39CD Uncompressed Size     000006C9 (1737)\n+39D1 Filename Length       003F (63)\n+39D3 Extra Length          0000 (0)\n+39D5 Comment Length        0000 (0)\n+39D7 Disk Start            0000 (0)\n+39D9 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-39A2 Ext File Attributes   81A40000 (2175008768)\n+39DB Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-39A6 Local Header Offset   000016CA (5834)\n-39AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+39DF Local Header Offset   000016CA (5834)\n+39E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x39AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x39E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-39E9 CENTRAL HEADER #18    02014B50 (33639248)\n-39ED Created Zip Spec      14 (20) '2.0'\n-39EE Created OS            03 (3) 'Unix'\n-39EF Extract Zip Spec      14 (20) '2.0'\n-39F0 Extract OS            00 (0) 'MS-DOS'\n-39F1 General Purpose Flag  0800 (2048)\n+3A22 CENTRAL HEADER #18    02014B50 (33639248)\n+3A26 Created Zip Spec      14 (20) '2.0'\n+3A27 Created OS            03 (3) 'Unix'\n+3A28 Extract Zip Spec      14 (20) '2.0'\n+3A29 Extract OS            00 (0) 'MS-DOS'\n+3A2A General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-39F3 Compression Method    0008 (8) 'Deflated'\n-39F5 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-39F9 CRC                   546B40F4 (1416315124)\n-39FD Compressed Size       00000DFC (3580)\n-3A01 Uncompressed Size     00005C0A (23562)\n-3A05 Filename Length       0044 (68)\n-3A07 Extra Length          0000 (0)\n-3A09 Comment Length        0000 (0)\n-3A0B Disk Start            0000 (0)\n-3A0D Int File Attributes   0000 (0)\n+3A2C Compression Method    0008 (8) 'Deflated'\n+3A2E Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3A32 CRC                   95EACAEA (2515192554)\n+3A36 Compressed Size       00000E1E (3614)\n+3A3A Uncompressed Size     00005E4E (24142)\n+3A3E Filename Length       0044 (68)\n+3A40 Extra Length          0000 (0)\n+3A42 Comment Length        0000 (0)\n+3A44 Disk Start            0000 (0)\n+3A46 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3A0F Ext File Attributes   81A40000 (2175008768)\n+3A48 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3A13 Local Header Offset   00001A25 (6693)\n-3A17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3A4C Local Header Offset   00001A2E (6702)\n+3A50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3A17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3A50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3A5B CENTRAL HEADER #19    02014B50 (33639248)\n-3A5F Created Zip Spec      14 (20) '2.0'\n-3A60 Created OS            03 (3) 'Unix'\n-3A61 Extract Zip Spec      14 (20) '2.0'\n-3A62 Extract OS            00 (0) 'MS-DOS'\n-3A63 General Purpose Flag  0800 (2048)\n+3A94 CENTRAL HEADER #19    02014B50 (33639248)\n+3A98 Created Zip Spec      14 (20) '2.0'\n+3A99 Created OS            03 (3) 'Unix'\n+3A9A Extract Zip Spec      14 (20) '2.0'\n+3A9B Extract OS            00 (0) 'MS-DOS'\n+3A9C General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3A65 Compression Method    0008 (8) 'Deflated'\n-3A67 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3A6B CRC                   3F1A06E9 (1058670313)\n-3A6F Compressed Size       00000267 (615)\n-3A73 Uncompressed Size     000004D7 (1239)\n-3A77 Filename Length       004B (75)\n-3A79 Extra Length          0000 (0)\n-3A7B Comment Length        0000 (0)\n-3A7D Disk Start            0000 (0)\n-3A7F Int File Attributes   0000 (0)\n+3A9E Compression Method    0008 (8) 'Deflated'\n+3AA0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3AA4 CRC                   880754E1 (2282181857)\n+3AA8 Compressed Size       00000270 (624)\n+3AAC Uncompressed Size     000004F3 (1267)\n+3AB0 Filename Length       004B (75)\n+3AB2 Extra Length          0000 (0)\n+3AB4 Comment Length        0000 (0)\n+3AB6 Disk Start            0000 (0)\n+3AB8 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3A81 Ext File Attributes   81A40000 (2175008768)\n+3ABA Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3A85 Local Header Offset   00002883 (10371)\n-3A89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3ABE Local Header Offset   000028AE (10414)\n+3AC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3A89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3AC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3AD4 CENTRAL HEADER #20    02014B50 (33639248)\n-3AD8 Created Zip Spec      14 (20) '2.0'\n-3AD9 Created OS            03 (3) 'Unix'\n-3ADA Extract Zip Spec      14 (20) '2.0'\n-3ADB Extract OS            00 (0) 'MS-DOS'\n-3ADC General Purpose Flag  0800 (2048)\n+3B0D CENTRAL HEADER #20    02014B50 (33639248)\n+3B11 Created Zip Spec      14 (20) '2.0'\n+3B12 Created OS            03 (3) 'Unix'\n+3B13 Extract Zip Spec      14 (20) '2.0'\n+3B14 Extract OS            00 (0) 'MS-DOS'\n+3B15 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3ADE Compression Method    0008 (8) 'Deflated'\n-3AE0 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3AE4 CRC                   A5D0004C (2781872204)\n-3AE8 Compressed Size       00000498 (1176)\n-3AEC Uncompressed Size     00000C55 (3157)\n-3AF0 Filename Length       0044 (68)\n-3AF2 Extra Length          0000 (0)\n-3AF4 Comment Length        0000 (0)\n-3AF6 Disk Start            0000 (0)\n-3AF8 Int File Attributes   0000 (0)\n+3B17 Compression Method    0008 (8) 'Deflated'\n+3B19 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3B1D CRC                   3DD6411C (1037451548)\n+3B21 Compressed Size       000004A3 (1187)\n+3B25 Uncompressed Size     00000CAC (3244)\n+3B29 Filename Length       0044 (68)\n+3B2B Extra Length          0000 (0)\n+3B2D Comment Length        0000 (0)\n+3B2F Disk Start            0000 (0)\n+3B31 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3AFA Ext File Attributes   81A40000 (2175008768)\n+3B33 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3AFE Local Header Offset   00002B53 (11091)\n-3B02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3B37 Local Header Offset   00002B87 (11143)\n+3B3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3B02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3B3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3B46 CENTRAL HEADER #21    02014B50 (33639248)\n-3B4A Created Zip Spec      14 (20) '2.0'\n-3B4B Created OS            03 (3) 'Unix'\n-3B4C Extract Zip Spec      14 (20) '2.0'\n-3B4D Extract OS            00 (0) 'MS-DOS'\n-3B4E General Purpose Flag  0800 (2048)\n+3B7F CENTRAL HEADER #21    02014B50 (33639248)\n+3B83 Created Zip Spec      14 (20) '2.0'\n+3B84 Created OS            03 (3) 'Unix'\n+3B85 Extract Zip Spec      14 (20) '2.0'\n+3B86 Extract OS            00 (0) 'MS-DOS'\n+3B87 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3B50 Compression Method    0008 (8) 'Deflated'\n-3B52 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3B56 CRC                   09B68607 (162956807)\n-3B5A Compressed Size       00000041 (65)\n-3B5E Uncompressed Size     00000050 (80)\n-3B62 Filename Length       004E (78)\n-3B64 Extra Length          0000 (0)\n-3B66 Comment Length        0000 (0)\n-3B68 Disk Start            0000 (0)\n-3B6A Int File Attributes   0000 (0)\n+3B89 Compression Method    0008 (8) 'Deflated'\n+3B8B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3B8F CRC                   E3FBB371 (3824923505)\n+3B93 Compressed Size       00000042 (66)\n+3B97 Uncompressed Size     00000051 (81)\n+3B9B Filename Length       004E (78)\n+3B9D Extra Length          0000 (0)\n+3B9F Comment Length        0000 (0)\n+3BA1 Disk Start            0000 (0)\n+3BA3 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3B6C Ext File Attributes   81A40000 (2175008768)\n+3BA5 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3B70 Local Header Offset   0000304D (12365)\n-3B74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3BA9 Local Header Offset   0000308C (12428)\n+3BAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3B74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3BAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3BC2 CENTRAL HEADER #22    02014B50 (33639248)\n-3BC6 Created Zip Spec      14 (20) '2.0'\n-3BC7 Created OS            03 (3) 'Unix'\n-3BC8 Extract Zip Spec      14 (20) '2.0'\n-3BC9 Extract OS            00 (0) 'MS-DOS'\n-3BCA General Purpose Flag  0800 (2048)\n+3BFB CENTRAL HEADER #22    02014B50 (33639248)\n+3BFF Created Zip Spec      14 (20) '2.0'\n+3C00 Created OS            03 (3) 'Unix'\n+3C01 Extract Zip Spec      14 (20) '2.0'\n+3C02 Extract OS            00 (0) 'MS-DOS'\n+3C03 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3BCC Compression Method    0008 (8) 'Deflated'\n-3BCE Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3BD2 CRC                   2219CEA0 (572116640)\n-3BD6 Compressed Size       0000031B (795)\n-3BDA Uncompressed Size     0000070E (1806)\n-3BDE Filename Length       0046 (70)\n-3BE0 Extra Length          0000 (0)\n-3BE2 Comment Length        0000 (0)\n-3BE4 Disk Start            0000 (0)\n-3BE6 Int File Attributes   0000 (0)\n+3C05 Compression Method    0008 (8) 'Deflated'\n+3C07 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3C0B CRC                   9E243A48 (2653174344)\n+3C0F Compressed Size       00000314 (788)\n+3C13 Uncompressed Size     000006E3 (1763)\n+3C17 Filename Length       0046 (70)\n+3C19 Extra Length          0000 (0)\n+3C1B Comment Length        0000 (0)\n+3C1D Disk Start            0000 (0)\n+3C1F Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3BE8 Ext File Attributes   81A40000 (2175008768)\n+3C21 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3BEC Local Header Offset   000030FA (12538)\n-3BF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3C25 Local Header Offset   0000313A (12602)\n+3C29 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3BF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3C29: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3C36 CENTRAL HEADER #23    02014B50 (33639248)\n-3C3A Created Zip Spec      14 (20) '2.0'\n-3C3B Created OS            03 (3) 'Unix'\n-3C3C Extract Zip Spec      14 (20) '2.0'\n-3C3D Extract OS            00 (0) 'MS-DOS'\n-3C3E General Purpose Flag  0800 (2048)\n+3C6F CENTRAL HEADER #23    02014B50 (33639248)\n+3C73 Created Zip Spec      14 (20) '2.0'\n+3C74 Created OS            03 (3) 'Unix'\n+3C75 Extract Zip Spec      14 (20) '2.0'\n+3C76 Extract OS            00 (0) 'MS-DOS'\n+3C77 General Purpose Flag  0800 (2048)\n      [Bits 1-2]            0 'Normal Compression'\n      [Bit 11]              1 'Language Encoding'\n-3C40 Compression Method    0008 (8) 'Deflated'\n-3C42 Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n-3C46 CRC                   B914F821 (3105159201)\n-3C4A Compressed Size       0000004F (79)\n-3C4E Uncompressed Size     00000055 (85)\n-3C52 Filename Length       004D (77)\n-3C54 Extra Length          0000 (0)\n-3C56 Comment Length        0000 (0)\n-3C58 Disk Start            0000 (0)\n-3C5A Int File Attributes   0000 (0)\n+3C79 Compression Method    0008 (8) 'Deflated'\n+3C7B Modification Time     50814080 (1350647936) 'Wed Apr  1 08:04:00 2020'\n+3C7F CRC                   B914F821 (3105159201)\n+3C83 Compressed Size       0000004F (79)\n+3C87 Uncompressed Size     00000055 (85)\n+3C8B Filename Length       004D (77)\n+3C8D Extra Length          0000 (0)\n+3C8F Comment Length        0000 (0)\n+3C91 Disk Start            0000 (0)\n+3C93 Int File Attributes   0000 (0)\n      [Bit 0]               0 'Binary Data'\n-3C5C Ext File Attributes   81A40000 (2175008768)\n+3C95 Ext File Attributes   81A40000 (2175008768)\n      [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n      [Bits 28-31]          08 (8) 'Regular File'\n-3C60 Local Header Offset   00003479 (13433)\n-3C64 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3C99 Local Header Offset   000034B2 (13490)\n+3C9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3C64: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3C9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-3CB1 END CENTRAL HEADER    06054B50 (101010256)\n-3CB5 Number of this disk   0000 (0)\n-3CB7 Central Dir Disk no   0000 (0)\n-3CB9 Entries in this disk  0017 (23)\n-3CBB Total Entries         0017 (23)\n-3CBD Size of Central Dir   0000077E (1918)\n-3CC1 Offset to Central Dir 00003533 (13619)\n-3CC5 Comment Length        0000 (0)\n+3CEA END CENTRAL HEADER    06054B50 (101010256)\n+3CEE Number of this disk   0000 (0)\n+3CF0 Central Dir Disk no   0000 (0)\n+3CF2 Entries in this disk  0017 (23)\n+3CF4 Total Entries         0017 (23)\n+3CF6 Size of Central Dir   0000077E (1918)\n+3CFA Offset to Central Dir 0000356C (13676)\n+3CFE Comment Length        0000 (0)\n #\n # Error Count: 12\n # Warning Count: 58\n #\n # Done\n"}, {"source1": "org/apache/dubbo/metadata/store/failover/FailoverCondition.java", "source2": "org/apache/dubbo/metadata/store/failover/FailoverCondition.java", "comments": ["Ordering 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.store.failover;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.SPI;\n-\n-@SPI(\"failover\")\n-public interface FailoverCondition {\n-\n-    /**\n-     * Whether metadata should be reported.\n-     *\n-     * @param url registry url, eg: zookeeper://127.0.0.1:2181\n-     * @return true store metadata to the specified URL.\n-     */\n-    boolean shouldRegister(URL url);\n-\n-    /**\n-     * Whether metadata should be read from specified url.\n-     *\n-     * @param url registry url, eg: zookeeper://127.0.0.1:2181\n-     * @return true read metadata from specified URL.\n-     */\n-    boolean shouldQuery(URL url);\n-\n-    /**\n-     * Judge whether it is a local region or a local datacenter.\n-     * <p>\n-     * Allows the local region or datacenter to be read first.\n-     *\n-     * @param url\n-     * @return\n-     */\n-    boolean isLocalDataCenter(URL url);\n-\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.store.failover;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.SPI;\r\n+\r\n+@SPI(\"failover\")\r\n+public interface FailoverCondition {\r\n+\r\n+    /**\r\n+     * Whether metadata should be reported.\r\n+     *\r\n+     * @param url registry url, eg: zookeeper://127.0.0.1:2181\r\n+     * @return true store metadata to the specified URL.\r\n+     */\r\n+    boolean shouldRegister(URL url);\r\n+\r\n+    /**\r\n+     * Whether metadata should be read from specified url.\r\n+     *\r\n+     * @param url registry url, eg: zookeeper://127.0.0.1:2181\r\n+     * @return true read metadata from specified URL.\r\n+     */\r\n+    boolean shouldQuery(URL url);\r\n+\r\n+    /**\r\n+     * Judge whether it is a local region or a local datacenter.\r\n+     * <p>\r\n+     * Allows the local region or datacenter to be read first.\r\n+     *\r\n+     * @param url\r\n+     * @return\r\n+     */\r\n+    boolean isLocalDataCenter(URL url);\r\n+\r\n }\n"}, {"source1": "org/apache/dubbo/metadata/store/failover/FailoverMetadataReport.java", "source2": "org/apache/dubbo/metadata/store/failover/FailoverMetadataReport.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,581 +1,581 @@\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.store.failover;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.constants.RemotingConstants;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.common.logger.Logger;\n-import org.apache.dubbo.common.logger.LoggerFactory;\n-import org.apache.dubbo.metadata.MappingListener;\n-import org.apache.dubbo.metadata.MetadataInfo;\n-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\n-import org.apache.dubbo.metadata.report.MetadataReport;\n-import org.apache.dubbo.metadata.report.MetadataReportFactory;\n-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;\n-import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;\n-import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;\n-\n-import java.util.ArrayList;\n-import java.util.Collections;\n-import java.util.List;\n-import java.util.Map;\n-import java.util.Set;\n-import java.util.regex.Pattern;\n-\n-import static org.apache.dubbo.common.constants.CommonConstants.CHECK_KEY;\n-import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\n-import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_SPLIT_PATTERN;\n-\n-/**\n- * @author yiji@apache.org\n- */\n-public class FailoverMetadataReport extends StrategyMetadataReport {\n-\n-    private static final Logger logger = LoggerFactory.getLogger(FailoverMetadataReport.class);\n-\n-    // proxy metadata report protocol, eg: zookeeper\n-    private static final String PROTOCOL_KEY = \"protocol\";\n-\n-    private static final String CLUSTER_KEY = \"clusters\";\n-\n-    // A cluster may have multiple instances\n-    private static final String HOST_KEY = \"hosts\";\n-\n-    private static final Pattern HOST_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[|:]+\\\\s*\");\n-\n-    // The metadata address of the agent.\n-    private List<URL> failoverUrls;\n-\n-    // The metadata report instance.\n-    private List<MetadataReportHolder> proxyReports;\n-\n-    // Local priority metadata center\n-    private MetadataReportHolder localDataCenterReportHolder;\n-\n-    public FailoverMetadataReport(URL url) {\n-        super(url);\n-        this.failoverUrls = fetchBackupUrls();\n-        this.proxyReports = buildProxyReports();\n-    }\n-\n-    protected List<URL> fetchBackupUrls() {\n-        String protocol = url.getParameter(PROTOCOL_KEY);\n-        if (protocol == null || !ExtensionLoader.getExtensionLoader(MetadataReportFactory.class).hasExtension(protocol)) {\n-            throw new IllegalArgumentException(\n-                    \"No '\" + protocol\n-                            + \"' metadata report extension found, please check if metadata report module dependencies are included.\");\n-        }\n-\n-        List<URL> urls = new ArrayList<>();\n-\n-        String clusters = this.url.getParameter(CLUSTER_KEY);\n-        String backupHost = this.url.getParameter(HOST_KEY);\n-        URL url = this.url.removeParameters(CLUSTER_KEY, HOST_KEY, PROTOCOL_KEY).setProtocol(protocol);\n-\n-        URL metadataURL = url;\n-        if (backupHost != null && backupHost.length() > 0) {\n-            metadataURL = metadataURL.addParameter(RemotingConstants.BACKUP_KEY, backupHost);\n-        }\n-        urls.add(metadataURL);\n-\n-        if (clusters != null && (clusters = clusters.trim()).length() > 0) {\n-            String[] addresses = REGISTRY_SPLIT_PATTERN.split(clusters);\n-            for (String address : addresses) {\n-                /**\n-                 * find multiple cluster hosts, supports multiple\n-                 * metadata report center read and write operations.\n-                 */\n-                String[] hosts = COMMA_SPLIT_PATTERN.split(address);\n-                if (hosts.length > 0) {\n-                    String node = hosts[0];\n-                    // contains user name and password with address ?\n-                    String username = null, password = null;\n-                    int index = node.indexOf(\"@\");\n-                    if (index > 0) {\n-                        String[] authority = HOST_SPLIT_PATTERN.split(node.substring(0, index));\n-                        username = authority[0];\n-                        password = authority[1];\n-                        node = node.substring(index + 1);\n-                    }\n-\n-                    String[] hostInfo = HOST_SPLIT_PATTERN.split(node);\n-                    String host = hostInfo[0];\n-                    int port = Integer.parseInt(hostInfo[1]);\n-                    URL clusterURL = new URL(protocol, username, password, host, port, url.getPath(), url.getParameters());\n-                    /**\n-                     * append backup address if required,\n-                     * the same cluster may have more than one node.\n-                     */\n-                    if (hosts.length > 1) {\n-                        StringBuilder buffer = new StringBuilder();\n-                        for (int i = 1; i < hosts.length; i++) {\n-                            if (i > 1) {\n-                                buffer.append(\",\");\n-                            }\n-                            buffer.append(hosts[i]);\n-                        }\n-                        clusterURL = clusterURL.addParameters(RemotingConstants.BACKUP_KEY, buffer.toString());\n-                    }\n-                    urls.add(clusterURL);\n-                }\n-            }\n-        }\n-        return urls;\n-    }\n-\n-    protected List<MetadataReportHolder> buildProxyReports() {\n-        List<MetadataReportHolder> reports = new ArrayList<>();\n-        if (this.failoverUrls != null && !this.failoverUrls.isEmpty()) {\n-            ExtensionLoader<MetadataReportFactory> factoryLoader = ExtensionLoader.getExtensionLoader(MetadataReportFactory.class);\n-            for (URL url : this.failoverUrls) {\n-                try {\n-                    MetadataReportHolder holder = new MetadataReportHolder(url,\n-                            factoryLoader.getExtension(url.getProtocol()).getMetadataReport(url));\n-                    reports.add(holder);\n-                } catch (Exception e) {\n-                    if (url.getParameter(CHECK_KEY, true)) {\n-                        throw new RuntimeException(\"Failed to create + '\" + url.getProtocol() + \"' metadata report extension instance\", e);\n-                    }\n-                    if (logger.isWarnEnabled()) {\n-                        logger.warn(\"Failed to create + '\" + url.getProtocol()\n-                                + \"' metadata report extension instance, check=false found.\");\n-                    }\n-                }\n-            }\n-        }\n-\n-        Collections.shuffle(reports);\n-\n-        /**\n-         * Select the local priority metadata cluster.\n-         * In order to prevent clients from all connecting\n-         * to the same cluster, random sorting has been done.\n-         */\n-        reports.forEach(holder -> {\n-            if (isLocalDataCenter(holder.url)) {\n-                this.localDataCenterReportHolder = holder;\n-            }\n-        });\n-\n-        return reports;\n-    }\n-\n-    @Override\n-    public void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {\n-        this.proxyReports.forEach((holder -> {\n-            if (shouldRegister(holder.url)) {\n-                try {\n-                    holder.report.storeProviderMetadata(providerMetadataIdentifier, serviceDefinition);\n-                } catch (Exception e) {\n-                    if (url.getParameter(CHECK_KEY, true)) {\n-                        throw e;\n-                    }\n-                }\n-            } else {\n-                if (logger.isInfoEnabled()) {\n-                    logger.info(\"Cancel to store provider metadata, register is false. url \" + holder.url);\n-                }\n-            }\n-        }));\n-    }\n-\n-    @Override\n-    public void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap) {\n-        this.proxyReports.forEach(holder -> {\n-            if (shouldRegister(holder.url)) {\n-                try {\n-                    holder.report.storeConsumerMetadata(consumerMetadataIdentifier, serviceParameterMap);\n-                } catch (Exception e) {\n-                    if (url.getParameter(CHECK_KEY, true)) {\n-                        throw e;\n-                    }\n-                }\n-            } else {\n-                if (logger.isInfoEnabled()) {\n-                    logger.info(\"Cancel to store consumer metadata, register is false. url \" + holder.url);\n-                }\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public void publishAppMetadata(SubscriberMetadataIdentifier identifier, MetadataInfo metadataInfo) {\n-        this.proxyReports.forEach(holder -> {\n-            if (shouldRegister(holder.url)) {\n-                try {\n-                    holder.report.publishAppMetadata(identifier, metadataInfo);\n-                } catch (Exception e) {\n-                    if (url.getParameter(CHECK_KEY, true)) {\n-                        throw e;\n-                    }\n-                }\n-            } else {\n-                if (logger.isInfoEnabled()) {\n-                    logger.info(\"Cancel to publish app metadata, register is false. url \" + holder.url);\n-                }\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public String getServiceDefinition(MetadataIdentifier metadataIdentifier) {\n-        /**\n-         * Support local region or datacenter to read first,\n-         * If current region or datacenter failed, it will be demoted to another region or datacenter.\n-         */\n-        MetadataReportHolder localReportHolder = this.localDataCenterReportHolder;\n-        if (localReportHolder != null && shouldQuery(localReportHolder.url)) {\n-            try {\n-                String definition = localReportHolder.report.getServiceDefinition(metadataIdentifier);\n-                if (definition != null && definition.length() > 0) {\n-                    return definition;\n-                }\n-            } catch (Exception e) {\n-                if (logger.isWarnEnabled()) {\n-                    logger.warn(\"Failed to get service definition from local metadata report center, url \" + localReportHolder.url);\n-                }\n-            }\n-        }\n-\n-        for (MetadataReportHolder holder : proxyReports) {\n-            /**\n-             * Skip the local region or datacenter read,\n-             * which was queried already.\n-             */\n-            if (localReportHolder != null\n-                    && holder.url == localReportHolder.url) {\n-                continue;\n-            }\n-\n-            if (shouldQuery(holder.url)) {\n-                try {\n-                    String definition = holder.report.getServiceDefinition(metadataIdentifier);\n-                    if (definition != null && definition.length() > 0) {\n-                        return definition;\n-                    }\n-                } catch (Exception e) {\n-                    if (logger.isWarnEnabled()) {\n-                        logger.warn(\"Failed to get service definition from metadata report center, url \" + holder.url);\n-                    }\n-                }\n-            }\n-\n-            // should never happened.\n-            if (logger.isInfoEnabled()) {\n-                logger.info(\"Cancel to get service definition, should query is false. url \" + holder.url);\n-            }\n-        }\n-\n-        return null;\n-    }\n-\n-    @Override\n-    public MetadataInfo getAppMetadata(SubscriberMetadataIdentifier identifier, Map<String, String> instanceMetadata) {\n-        /**\n-         * Support local region or datacenter to read first,\n-         * If current region or datacenter failed, it will be demoted to another region or datacenter.\n-         */\n-        MetadataReportHolder localReportHolder = this.localDataCenterReportHolder;\n-        if (localReportHolder != null && shouldQuery(localReportHolder.url)) {\n-            try {\n-                MetadataInfo metadataInfo = localReportHolder.report.getAppMetadata(identifier, instanceMetadata);\n-                if (metadataInfo != null) {\n-                    return metadataInfo;\n-                }\n-            } catch (Exception e) {\n-                if (logger.isWarnEnabled()) {\n-                    logger.warn(\"Failed to get app metadata from local metadata report center, url \" + localReportHolder.url);\n-                }\n-            }\n-        }\n-\n-        for (MetadataReportHolder holder : proxyReports) {\n-            /**\n-             * Skip the local region or datacenter read,\n-             * which was queried already.\n-             */\n-            if (localReportHolder != null\n-                    && holder.url == localReportHolder.url) {\n-                continue;\n-            }\n-\n-            if (shouldQuery(holder.url)) {\n-                try {\n-                    MetadataInfo metadataInfo = holder.report.getAppMetadata(identifier, instanceMetadata);\n-                    if (metadataInfo != null) {\n-                        return metadataInfo;\n-                    }\n-                } catch (Exception e) {\n-                    if (logger.isWarnEnabled()) {\n-                        logger.warn(\"Failed to get app metadata from metadata report center, url \" + holder.url);\n-                    }\n-                }\n-            }\n-\n-            // should never happened.\n-            if (logger.isInfoEnabled()) {\n-                logger.info(\"Cancel to get app metadata, should query is false. url \" + holder.url);\n-            }\n-        }\n-\n-        return null;\n-    }\n-\n-    @Override\n-    public Set<String> getServiceAppMapping(String serviceKey, MappingListener listener, URL url) {\n-        /**\n-         * Support local region or datacenter to read first,\n-         * If current region or datacenter failed, it will be demoted to another region or datacenter.\n-         */\n-        MetadataReportHolder localReportHolder = this.localDataCenterReportHolder;\n-        if (localReportHolder != null && shouldQuery(localReportHolder.url)) {\n-            try {\n-                Set<String> appMapping = localReportHolder.report.getServiceAppMapping(serviceKey, listener, url);\n-                if (appMapping != null && !appMapping.isEmpty()) {\n-                    return appMapping;\n-                }\n-            } catch (Exception e) {\n-                if (logger.isWarnEnabled()) {\n-                    logger.warn(\"Failed to get service mapping from local metadata report center, url \" + localReportHolder.url);\n-                }\n-            }\n-        }\n-\n-        for (MetadataReportHolder holder : proxyReports) {\n-            /**\n-             * Skip the local region or datacenter read,\n-             * which was queried already.\n-             */\n-            if (localReportHolder != null\n-                    && holder.url == localReportHolder.url) {\n-                continue;\n-            }\n-\n-            if (shouldQuery(holder.url)) {\n-                try {\n-                    Set<String> appMapping = holder.report.getServiceAppMapping(serviceKey, listener, url);\n-                    if (appMapping != null && !appMapping.isEmpty()) {\n-                        return appMapping;\n-                    }\n-                } catch (Exception e) {\n-                    if (logger.isWarnEnabled()) {\n-                        logger.warn(\"Failed to get service mapping from metadata report center, url \" + holder.url);\n-                    }\n-                }\n-            }\n-\n-            // should never happened.\n-            if (logger.isInfoEnabled()) {\n-                logger.info(\"Cancel to get service mapping, should query is false. url \" + holder.url);\n-            }\n-        }\n-\n-        return Collections.EMPTY_SET;\n-    }\n-\n-    @Override\n-    public void registerServiceAppMapping(String serviceKey, String application, URL url) {\n-        this.proxyReports.forEach(holder -> {\n-            if (shouldRegister(holder.url)) {\n-                try {\n-                    holder.report.registerServiceAppMapping(serviceKey, application, url);\n-                } catch (Exception e) {\n-                    if (url.getParameter(CHECK_KEY, true)) {\n-                        throw e;\n-                    }\n-                }\n-            } else {\n-                if (logger.isInfoEnabled()) {\n-                    logger.info(\"Cancel to register service app mapping, register is false. url \" + holder.url);\n-                }\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url) {\n-        this.proxyReports.forEach(holder -> {\n-            if (shouldRegister(holder.url)) {\n-                try {\n-                    holder.report.saveServiceMetadata(metadataIdentifier, url);\n-                } catch (Exception e) {\n-                    if (url.getParameter(CHECK_KEY, true)) {\n-                        throw e;\n-                    }\n-                }\n-            } else {\n-                if (logger.isInfoEnabled()) {\n-                    logger.info(\"Cancel to register service app mapping, register is false. url \" + holder.url);\n-                }\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls) {\n-        this.proxyReports.forEach(holder -> {\n-            if (shouldRegister(holder.url)) {\n-                try {\n-                    holder.report.saveSubscribedData(subscriberMetadataIdentifier, urls);\n-                } catch (Exception e) {\n-                    if (url.getParameter(CHECK_KEY, true)) {\n-                        throw e;\n-                    }\n-                }\n-            } else {\n-                if (logger.isInfoEnabled()) {\n-                    logger.info(\"Cancel to register service app mapping, register is false. url \" + holder.url);\n-                }\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier) {\n-        this.proxyReports.forEach(holder -> {\n-            if (shouldRegister(holder.url)) {\n-                try {\n-                    holder.report.removeServiceMetadata(metadataIdentifier);\n-                } catch (Exception e) {\n-                    if (url.getParameter(CHECK_KEY, true)) {\n-                        throw e;\n-                    }\n-                }\n-            }\n-        });\n-    }\n-\n-    @Override\n-    public List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier) {\n-        /**\n-         * Support local region or datacenter to read first,\n-         * If current region or datacenter failed, it will be demoted to another region or datacenter.\n-         */\n-        MetadataReportHolder localReportHolder = this.localDataCenterReportHolder;\n-        if (localReportHolder != null && shouldQuery(localReportHolder.url)) {\n-            try {\n-                List<String> exportedURLs = localReportHolder.report.getExportedURLs(metadataIdentifier);\n-                if (exportedURLs != null && !exportedURLs.isEmpty()) {\n-                    return exportedURLs;\n-                }\n-            } catch (Exception e) {\n-                if (logger.isWarnEnabled()) {\n-                    logger.warn(\"Failed to get exported urls from local metadata report center, url \" + localReportHolder.url);\n-                }\n-            }\n-        }\n-\n-        for (MetadataReportHolder holder : proxyReports) {\n-            /**\n-             * Skip the local region or datacenter read,\n-             * which was queried already.\n-             */\n-            if (localReportHolder != null\n-                    && holder.url == localReportHolder.url) {\n-                continue;\n-            }\n-\n-            if (shouldQuery(holder.url)) {\n-                try {\n-                    List<String> exportedURLs = holder.report.getExportedURLs(metadataIdentifier);\n-                    if (exportedURLs != null && !exportedURLs.isEmpty()) {\n-                        return exportedURLs;\n-                    }\n-                } catch (Exception e) {\n-                    if (logger.isWarnEnabled()) {\n-                        logger.warn(\"Failed to get exported urls from metadata report center, url \" + holder.url);\n-                    }\n-                }\n-            }\n-\n-            // should never happened.\n-            if (logger.isInfoEnabled()) {\n-                logger.info(\"Cancel to get exported urls, should query is false. url \" + holder.url);\n-            }\n-        }\n-\n-        return Collections.EMPTY_LIST;\n-    }\n-\n-    @Override\n-    public List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {\n-        /**\n-         * Support local region or datacenter to read first,\n-         * If current region or datacenter failed, it will be demoted to another region or datacenter.\n-         */\n-        MetadataReportHolder localReportHolder = this.localDataCenterReportHolder;\n-        if (localReportHolder != null && shouldQuery(localReportHolder.url)) {\n-            try {\n-                List<String> subscribedURLs = localReportHolder.report.getSubscribedURLs(subscriberMetadataIdentifier);\n-                if (subscribedURLs != null && !subscribedURLs.isEmpty()) {\n-                    return subscribedURLs;\n-                }\n-            } catch (Exception e) {\n-                if (logger.isWarnEnabled()) {\n-                    logger.warn(\"Failed to get subscribed urls from local metadata report center, url \" + localReportHolder.url);\n-                }\n-            }\n-        }\n-\n-        for (MetadataReportHolder holder : proxyReports) {\n-            /**\n-             * Skip the local region or datacenter read,\n-             * which was queried already.\n-             */\n-            if (localReportHolder != null\n-                    && holder.url == localReportHolder.url) {\n-                continue;\n-            }\n-\n-            if (shouldQuery(holder.url)) {\n-                try {\n-                    List<String> subscribedURLs = holder.report.getSubscribedURLs(subscriberMetadataIdentifier);\n-                    if (subscribedURLs != null && !subscribedURLs.isEmpty()) {\n-                        return subscribedURLs;\n-                    }\n-                } catch (Exception e) {\n-                    if (logger.isWarnEnabled()) {\n-                        logger.warn(\"Failed to get subscribed urls from metadata report center, url \" + holder.url);\n-                    }\n-                }\n-            }\n-\n-            // should never happened.\n-            if (logger.isInfoEnabled()) {\n-                logger.info(\"Cancel to get subscribed urls, should query is false. url \" + holder.url);\n-            }\n-        }\n-\n-        return Collections.EMPTY_LIST;\n-    }\n-\n-    public List<MetadataReportHolder> getProxyReports() {\n-        return proxyReports;\n-    }\n-\n-    class MetadataReportHolder {\n-\n-        final URL            url;\n-        final MetadataReport report;\n-\n-        public MetadataReportHolder(URL url, MetadataReport report) {\n-            this.url = url;\n-            this.report = report;\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.store.failover;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.constants.RemotingConstants;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.common.logger.Logger;\r\n+import org.apache.dubbo.common.logger.LoggerFactory;\r\n+import org.apache.dubbo.metadata.MappingListener;\r\n+import org.apache.dubbo.metadata.MetadataInfo;\r\n+import org.apache.dubbo.metadata.definition.model.ServiceDefinition;\r\n+import org.apache.dubbo.metadata.report.MetadataReport;\r\n+import org.apache.dubbo.metadata.report.MetadataReportFactory;\r\n+import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;\r\n+import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;\r\n+import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;\r\n+\r\n+import java.util.ArrayList;\r\n+import java.util.Collections;\r\n+import java.util.List;\r\n+import java.util.Map;\r\n+import java.util.Set;\r\n+import java.util.regex.Pattern;\r\n+\r\n+import static org.apache.dubbo.common.constants.CommonConstants.CHECK_KEY;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;\r\n+import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_SPLIT_PATTERN;\r\n+\r\n+/**\r\n+ * @author yiji@apache.org\r\n+ */\r\n+public class FailoverMetadataReport extends StrategyMetadataReport {\r\n+\r\n+    private static final Logger logger = LoggerFactory.getLogger(FailoverMetadataReport.class);\r\n+\r\n+    // proxy metadata report protocol, eg: zookeeper\r\n+    private static final String PROTOCOL_KEY = \"protocol\";\r\n+\r\n+    private static final String CLUSTER_KEY = \"clusters\";\r\n+\r\n+    // A cluster may have multiple instances\r\n+    private static final String HOST_KEY = \"hosts\";\r\n+\r\n+    private static final Pattern HOST_SPLIT_PATTERN = Pattern.compile(\"\\\\s*[|:]+\\\\s*\");\r\n+\r\n+    // The metadata address of the agent.\r\n+    private List<URL> failoverUrls;\r\n+\r\n+    // The metadata report instance.\r\n+    private List<MetadataReportHolder> proxyReports;\r\n+\r\n+    // Local priority metadata center\r\n+    private MetadataReportHolder localDataCenterReportHolder;\r\n+\r\n+    public FailoverMetadataReport(URL url) {\r\n+        super(url);\r\n+        this.failoverUrls = fetchBackupUrls();\r\n+        this.proxyReports = buildProxyReports();\r\n+    }\r\n+\r\n+    protected List<URL> fetchBackupUrls() {\r\n+        String protocol = url.getParameter(PROTOCOL_KEY);\r\n+        if (protocol == null || !ExtensionLoader.getExtensionLoader(MetadataReportFactory.class).hasExtension(protocol)) {\r\n+            throw new IllegalArgumentException(\r\n+                    \"No '\" + protocol\r\n+                            + \"' metadata report extension found, please check if metadata report module dependencies are included.\");\r\n+        }\r\n+\r\n+        List<URL> urls = new ArrayList<>();\r\n+\r\n+        String clusters = this.url.getParameter(CLUSTER_KEY);\r\n+        String backupHost = this.url.getParameter(HOST_KEY);\r\n+        URL url = this.url.removeParameters(CLUSTER_KEY, HOST_KEY, PROTOCOL_KEY).setProtocol(protocol);\r\n+\r\n+        URL metadataURL = url;\r\n+        if (backupHost != null && backupHost.length() > 0) {\r\n+            metadataURL = metadataURL.addParameter(RemotingConstants.BACKUP_KEY, backupHost);\r\n+        }\r\n+        urls.add(metadataURL);\r\n+\r\n+        if (clusters != null && (clusters = clusters.trim()).length() > 0) {\r\n+            String[] addresses = REGISTRY_SPLIT_PATTERN.split(clusters);\r\n+            for (String address : addresses) {\r\n+                /**\r\n+                 * find multiple cluster hosts, supports multiple\r\n+                 * metadata report center read and write operations.\r\n+                 */\r\n+                String[] hosts = COMMA_SPLIT_PATTERN.split(address);\r\n+                if (hosts.length > 0) {\r\n+                    String node = hosts[0];\r\n+                    // contains user name and password with address ?\r\n+                    String username = null, password = null;\r\n+                    int index = node.indexOf(\"@\");\r\n+                    if (index > 0) {\r\n+                        String[] authority = HOST_SPLIT_PATTERN.split(node.substring(0, index));\r\n+                        username = authority[0];\r\n+                        password = authority[1];\r\n+                        node = node.substring(index + 1);\r\n+                    }\r\n+\r\n+                    String[] hostInfo = HOST_SPLIT_PATTERN.split(node);\r\n+                    String host = hostInfo[0];\r\n+                    int port = Integer.parseInt(hostInfo[1]);\r\n+                    URL clusterURL = new URL(protocol, username, password, host, port, url.getPath(), url.getParameters());\r\n+                    /**\r\n+                     * append backup address if required,\r\n+                     * the same cluster may have more than one node.\r\n+                     */\r\n+                    if (hosts.length > 1) {\r\n+                        StringBuilder buffer = new StringBuilder();\r\n+                        for (int i = 1; i < hosts.length; i++) {\r\n+                            if (i > 1) {\r\n+                                buffer.append(\",\");\r\n+                            }\r\n+                            buffer.append(hosts[i]);\r\n+                        }\r\n+                        clusterURL = clusterURL.addParameters(RemotingConstants.BACKUP_KEY, buffer.toString());\r\n+                    }\r\n+                    urls.add(clusterURL);\r\n+                }\r\n+            }\r\n+        }\r\n+        return urls;\r\n+    }\r\n+\r\n+    protected List<MetadataReportHolder> buildProxyReports() {\r\n+        List<MetadataReportHolder> reports = new ArrayList<>();\r\n+        if (this.failoverUrls != null && !this.failoverUrls.isEmpty()) {\r\n+            ExtensionLoader<MetadataReportFactory> factoryLoader = ExtensionLoader.getExtensionLoader(MetadataReportFactory.class);\r\n+            for (URL url : this.failoverUrls) {\r\n+                try {\r\n+                    MetadataReportHolder holder = new MetadataReportHolder(url,\r\n+                            factoryLoader.getExtension(url.getProtocol()).getMetadataReport(url));\r\n+                    reports.add(holder);\r\n+                } catch (Exception e) {\r\n+                    if (url.getParameter(CHECK_KEY, true)) {\r\n+                        throw new RuntimeException(\"Failed to create + '\" + url.getProtocol() + \"' metadata report extension instance\", e);\r\n+                    }\r\n+                    if (logger.isWarnEnabled()) {\r\n+                        logger.warn(\"Failed to create + '\" + url.getProtocol()\r\n+                                + \"' metadata report extension instance, check=false found.\");\r\n+                    }\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        Collections.shuffle(reports);\r\n+\r\n+        /**\r\n+         * Select the local priority metadata cluster.\r\n+         * In order to prevent clients from all connecting\r\n+         * to the same cluster, random sorting has been done.\r\n+         */\r\n+        reports.forEach(holder -> {\r\n+            if (isLocalDataCenter(holder.url)) {\r\n+                this.localDataCenterReportHolder = holder;\r\n+            }\r\n+        });\r\n+\r\n+        return reports;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {\r\n+        this.proxyReports.forEach((holder -> {\r\n+            if (shouldRegister(holder.url)) {\r\n+                try {\r\n+                    holder.report.storeProviderMetadata(providerMetadataIdentifier, serviceDefinition);\r\n+                } catch (Exception e) {\r\n+                    if (url.getParameter(CHECK_KEY, true)) {\r\n+                        throw e;\r\n+                    }\r\n+                }\r\n+            } else {\r\n+                if (logger.isInfoEnabled()) {\r\n+                    logger.info(\"Cancel to store provider metadata, register is false. url \" + holder.url);\r\n+                }\r\n+            }\r\n+        }));\r\n+    }\r\n+\r\n+    @Override\r\n+    public void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map<String, String> serviceParameterMap) {\r\n+        this.proxyReports.forEach(holder -> {\r\n+            if (shouldRegister(holder.url)) {\r\n+                try {\r\n+                    holder.report.storeConsumerMetadata(consumerMetadataIdentifier, serviceParameterMap);\r\n+                } catch (Exception e) {\r\n+                    if (url.getParameter(CHECK_KEY, true)) {\r\n+                        throw e;\r\n+                    }\r\n+                }\r\n+            } else {\r\n+                if (logger.isInfoEnabled()) {\r\n+                    logger.info(\"Cancel to store consumer metadata, register is false. url \" + holder.url);\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public void publishAppMetadata(SubscriberMetadataIdentifier identifier, MetadataInfo metadataInfo) {\r\n+        this.proxyReports.forEach(holder -> {\r\n+            if (shouldRegister(holder.url)) {\r\n+                try {\r\n+                    holder.report.publishAppMetadata(identifier, metadataInfo);\r\n+                } catch (Exception e) {\r\n+                    if (url.getParameter(CHECK_KEY, true)) {\r\n+                        throw e;\r\n+                    }\r\n+                }\r\n+            } else {\r\n+                if (logger.isInfoEnabled()) {\r\n+                    logger.info(\"Cancel to publish app metadata, register is false. url \" + holder.url);\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public String getServiceDefinition(MetadataIdentifier metadataIdentifier) {\r\n+        /**\r\n+         * Support local region or datacenter to read first,\r\n+         * If current region or datacenter failed, it will be demoted to another region or datacenter.\r\n+         */\r\n+        MetadataReportHolder localReportHolder = this.localDataCenterReportHolder;\r\n+        if (localReportHolder != null && shouldQuery(localReportHolder.url)) {\r\n+            try {\r\n+                String definition = localReportHolder.report.getServiceDefinition(metadataIdentifier);\r\n+                if (definition != null && definition.length() > 0) {\r\n+                    return definition;\r\n+                }\r\n+            } catch (Exception e) {\r\n+                if (logger.isWarnEnabled()) {\r\n+                    logger.warn(\"Failed to get service definition from local metadata report center, url \" + localReportHolder.url);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        for (MetadataReportHolder holder : proxyReports) {\r\n+            /**\r\n+             * Skip the local region or datacenter read,\r\n+             * which was queried already.\r\n+             */\r\n+            if (localReportHolder != null\r\n+                    && holder.url == localReportHolder.url) {\r\n+                continue;\r\n+            }\r\n+\r\n+            if (shouldQuery(holder.url)) {\r\n+                try {\r\n+                    String definition = holder.report.getServiceDefinition(metadataIdentifier);\r\n+                    if (definition != null && definition.length() > 0) {\r\n+                        return definition;\r\n+                    }\r\n+                } catch (Exception e) {\r\n+                    if (logger.isWarnEnabled()) {\r\n+                        logger.warn(\"Failed to get service definition from metadata report center, url \" + holder.url);\r\n+                    }\r\n+                }\r\n+            }\r\n+\r\n+            // should never happened.\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(\"Cancel to get service definition, should query is false. url \" + holder.url);\r\n+            }\r\n+        }\r\n+\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public MetadataInfo getAppMetadata(SubscriberMetadataIdentifier identifier, Map<String, String> instanceMetadata) {\r\n+        /**\r\n+         * Support local region or datacenter to read first,\r\n+         * If current region or datacenter failed, it will be demoted to another region or datacenter.\r\n+         */\r\n+        MetadataReportHolder localReportHolder = this.localDataCenterReportHolder;\r\n+        if (localReportHolder != null && shouldQuery(localReportHolder.url)) {\r\n+            try {\r\n+                MetadataInfo metadataInfo = localReportHolder.report.getAppMetadata(identifier, instanceMetadata);\r\n+                if (metadataInfo != null) {\r\n+                    return metadataInfo;\r\n+                }\r\n+            } catch (Exception e) {\r\n+                if (logger.isWarnEnabled()) {\r\n+                    logger.warn(\"Failed to get app metadata from local metadata report center, url \" + localReportHolder.url);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        for (MetadataReportHolder holder : proxyReports) {\r\n+            /**\r\n+             * Skip the local region or datacenter read,\r\n+             * which was queried already.\r\n+             */\r\n+            if (localReportHolder != null\r\n+                    && holder.url == localReportHolder.url) {\r\n+                continue;\r\n+            }\r\n+\r\n+            if (shouldQuery(holder.url)) {\r\n+                try {\r\n+                    MetadataInfo metadataInfo = holder.report.getAppMetadata(identifier, instanceMetadata);\r\n+                    if (metadataInfo != null) {\r\n+                        return metadataInfo;\r\n+                    }\r\n+                } catch (Exception e) {\r\n+                    if (logger.isWarnEnabled()) {\r\n+                        logger.warn(\"Failed to get app metadata from metadata report center, url \" + holder.url);\r\n+                    }\r\n+                }\r\n+            }\r\n+\r\n+            // should never happened.\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(\"Cancel to get app metadata, should query is false. url \" + holder.url);\r\n+            }\r\n+        }\r\n+\r\n+        return null;\r\n+    }\r\n+\r\n+    @Override\r\n+    public Set<String> getServiceAppMapping(String serviceKey, MappingListener listener, URL url) {\r\n+        /**\r\n+         * Support local region or datacenter to read first,\r\n+         * If current region or datacenter failed, it will be demoted to another region or datacenter.\r\n+         */\r\n+        MetadataReportHolder localReportHolder = this.localDataCenterReportHolder;\r\n+        if (localReportHolder != null && shouldQuery(localReportHolder.url)) {\r\n+            try {\r\n+                Set<String> appMapping = localReportHolder.report.getServiceAppMapping(serviceKey, listener, url);\r\n+                if (appMapping != null && !appMapping.isEmpty()) {\r\n+                    return appMapping;\r\n+                }\r\n+            } catch (Exception e) {\r\n+                if (logger.isWarnEnabled()) {\r\n+                    logger.warn(\"Failed to get service mapping from local metadata report center, url \" + localReportHolder.url);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        for (MetadataReportHolder holder : proxyReports) {\r\n+            /**\r\n+             * Skip the local region or datacenter read,\r\n+             * which was queried already.\r\n+             */\r\n+            if (localReportHolder != null\r\n+                    && holder.url == localReportHolder.url) {\r\n+                continue;\r\n+            }\r\n+\r\n+            if (shouldQuery(holder.url)) {\r\n+                try {\r\n+                    Set<String> appMapping = holder.report.getServiceAppMapping(serviceKey, listener, url);\r\n+                    if (appMapping != null && !appMapping.isEmpty()) {\r\n+                        return appMapping;\r\n+                    }\r\n+                } catch (Exception e) {\r\n+                    if (logger.isWarnEnabled()) {\r\n+                        logger.warn(\"Failed to get service mapping from metadata report center, url \" + holder.url);\r\n+                    }\r\n+                }\r\n+            }\r\n+\r\n+            // should never happened.\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(\"Cancel to get service mapping, should query is false. url \" + holder.url);\r\n+            }\r\n+        }\r\n+\r\n+        return Collections.EMPTY_SET;\r\n+    }\r\n+\r\n+    @Override\r\n+    public void registerServiceAppMapping(String serviceKey, String application, URL url) {\r\n+        this.proxyReports.forEach(holder -> {\r\n+            if (shouldRegister(holder.url)) {\r\n+                try {\r\n+                    holder.report.registerServiceAppMapping(serviceKey, application, url);\r\n+                } catch (Exception e) {\r\n+                    if (url.getParameter(CHECK_KEY, true)) {\r\n+                        throw e;\r\n+                    }\r\n+                }\r\n+            } else {\r\n+                if (logger.isInfoEnabled()) {\r\n+                    logger.info(\"Cancel to register service app mapping, register is false. url \" + holder.url);\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url) {\r\n+        this.proxyReports.forEach(holder -> {\r\n+            if (shouldRegister(holder.url)) {\r\n+                try {\r\n+                    holder.report.saveServiceMetadata(metadataIdentifier, url);\r\n+                } catch (Exception e) {\r\n+                    if (url.getParameter(CHECK_KEY, true)) {\r\n+                        throw e;\r\n+                    }\r\n+                }\r\n+            } else {\r\n+                if (logger.isInfoEnabled()) {\r\n+                    logger.info(\"Cancel to register service app mapping, register is false. url \" + holder.url);\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls) {\r\n+        this.proxyReports.forEach(holder -> {\r\n+            if (shouldRegister(holder.url)) {\r\n+                try {\r\n+                    holder.report.saveSubscribedData(subscriberMetadataIdentifier, urls);\r\n+                } catch (Exception e) {\r\n+                    if (url.getParameter(CHECK_KEY, true)) {\r\n+                        throw e;\r\n+                    }\r\n+                }\r\n+            } else {\r\n+                if (logger.isInfoEnabled()) {\r\n+                    logger.info(\"Cancel to register service app mapping, register is false. url \" + holder.url);\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier) {\r\n+        this.proxyReports.forEach(holder -> {\r\n+            if (shouldRegister(holder.url)) {\r\n+                try {\r\n+                    holder.report.removeServiceMetadata(metadataIdentifier);\r\n+                } catch (Exception e) {\r\n+                    if (url.getParameter(CHECK_KEY, true)) {\r\n+                        throw e;\r\n+                    }\r\n+                }\r\n+            }\r\n+        });\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier) {\r\n+        /**\r\n+         * Support local region or datacenter to read first,\r\n+         * If current region or datacenter failed, it will be demoted to another region or datacenter.\r\n+         */\r\n+        MetadataReportHolder localReportHolder = this.localDataCenterReportHolder;\r\n+        if (localReportHolder != null && shouldQuery(localReportHolder.url)) {\r\n+            try {\r\n+                List<String> exportedURLs = localReportHolder.report.getExportedURLs(metadataIdentifier);\r\n+                if (exportedURLs != null && !exportedURLs.isEmpty()) {\r\n+                    return exportedURLs;\r\n+                }\r\n+            } catch (Exception e) {\r\n+                if (logger.isWarnEnabled()) {\r\n+                    logger.warn(\"Failed to get exported urls from local metadata report center, url \" + localReportHolder.url);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        for (MetadataReportHolder holder : proxyReports) {\r\n+            /**\r\n+             * Skip the local region or datacenter read,\r\n+             * which was queried already.\r\n+             */\r\n+            if (localReportHolder != null\r\n+                    && holder.url == localReportHolder.url) {\r\n+                continue;\r\n+            }\r\n+\r\n+            if (shouldQuery(holder.url)) {\r\n+                try {\r\n+                    List<String> exportedURLs = holder.report.getExportedURLs(metadataIdentifier);\r\n+                    if (exportedURLs != null && !exportedURLs.isEmpty()) {\r\n+                        return exportedURLs;\r\n+                    }\r\n+                } catch (Exception e) {\r\n+                    if (logger.isWarnEnabled()) {\r\n+                        logger.warn(\"Failed to get exported urls from metadata report center, url \" + holder.url);\r\n+                    }\r\n+                }\r\n+            }\r\n+\r\n+            // should never happened.\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(\"Cancel to get exported urls, should query is false. url \" + holder.url);\r\n+            }\r\n+        }\r\n+\r\n+        return Collections.EMPTY_LIST;\r\n+    }\r\n+\r\n+    @Override\r\n+    public List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {\r\n+        /**\r\n+         * Support local region or datacenter to read first,\r\n+         * If current region or datacenter failed, it will be demoted to another region or datacenter.\r\n+         */\r\n+        MetadataReportHolder localReportHolder = this.localDataCenterReportHolder;\r\n+        if (localReportHolder != null && shouldQuery(localReportHolder.url)) {\r\n+            try {\r\n+                List<String> subscribedURLs = localReportHolder.report.getSubscribedURLs(subscriberMetadataIdentifier);\r\n+                if (subscribedURLs != null && !subscribedURLs.isEmpty()) {\r\n+                    return subscribedURLs;\r\n+                }\r\n+            } catch (Exception e) {\r\n+                if (logger.isWarnEnabled()) {\r\n+                    logger.warn(\"Failed to get subscribed urls from local metadata report center, url \" + localReportHolder.url);\r\n+                }\r\n+            }\r\n+        }\r\n+\r\n+        for (MetadataReportHolder holder : proxyReports) {\r\n+            /**\r\n+             * Skip the local region or datacenter read,\r\n+             * which was queried already.\r\n+             */\r\n+            if (localReportHolder != null\r\n+                    && holder.url == localReportHolder.url) {\r\n+                continue;\r\n+            }\r\n+\r\n+            if (shouldQuery(holder.url)) {\r\n+                try {\r\n+                    List<String> subscribedURLs = holder.report.getSubscribedURLs(subscriberMetadataIdentifier);\r\n+                    if (subscribedURLs != null && !subscribedURLs.isEmpty()) {\r\n+                        return subscribedURLs;\r\n+                    }\r\n+                } catch (Exception e) {\r\n+                    if (logger.isWarnEnabled()) {\r\n+                        logger.warn(\"Failed to get subscribed urls from metadata report center, url \" + holder.url);\r\n+                    }\r\n+                }\r\n+            }\r\n+\r\n+            // should never happened.\r\n+            if (logger.isInfoEnabled()) {\r\n+                logger.info(\"Cancel to get subscribed urls, should query is false. url \" + holder.url);\r\n+            }\r\n+        }\r\n+\r\n+        return Collections.EMPTY_LIST;\r\n+    }\r\n+\r\n+    public List<MetadataReportHolder> getProxyReports() {\r\n+        return proxyReports;\r\n+    }\r\n+\r\n+    class MetadataReportHolder {\r\n+\r\n+        final URL            url;\r\n+        final MetadataReport report;\r\n+\r\n+        public MetadataReportHolder(URL url, MetadataReport report) {\r\n+            this.url = url;\r\n+            this.report = report;\r\n+        }\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/metadata/store/failover/FailoverMetadataReportFactory.java", "source2": "org/apache/dubbo/metadata/store/failover/FailoverMetadataReportFactory.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,29 +1,29 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.store.failover;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.metadata.report.MetadataReport;\n-import org.apache.dubbo.metadata.report.support.AbstractMetadataReportFactory;\n-\n-public class FailoverMetadataReportFactory extends AbstractMetadataReportFactory {\n-\n-    @Override\n-    protected MetadataReport createMetadataReport(URL url) {\n-        return new FailoverMetadataReport(url);\n-    }\n+/*\r\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\r\n+ * contributor license agreements.  See the NOTICE file distributed with\r\n+ * this work for additional information regarding copyright ownership.\r\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\r\n+ * (the \"License\"); you may not use this file except in compliance with\r\n+ * the License.  You may obtain a copy of the License at\r\n+ *\r\n+ *     http://www.apache.org/licenses/LICENSE-2.0\r\n+ *\r\n+ * Unless required by applicable law or agreed to in writing, software\r\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n+ * See the License for the specific language governing permissions and\r\n+ * limitations under the License.\r\n+ */\r\n+package org.apache.dubbo.metadata.store.failover;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.metadata.report.MetadataReport;\r\n+import org.apache.dubbo.metadata.report.support.AbstractMetadataReportFactory;\r\n+\r\n+public class FailoverMetadataReportFactory extends AbstractMetadataReportFactory {\r\n+\r\n+    @Override\r\n+    protected MetadataReport createMetadataReport(URL url) {\r\n+        return new FailoverMetadataReport(url);\r\n+    }\r\n }\n"}, {"source1": "org/apache/dubbo/metadata/store/failover/StrategyMetadataReport.java", "source2": "org/apache/dubbo/metadata/store/failover/StrategyMetadataReport.java", "comments": ["Ordering differences only"], "unified_diff": "@@ -1,88 +1,88 @@\n-/*\n- * Licensed to the Apache Software Foundation (ASF) under one or more\n- * contributor license agreements.  See the NOTICE file distributed with\n- * this work for additional information regarding copyright ownership.\n- * The ASF licenses this file to You under the Apache License, Version 2.0\n- * (the \"License\"); you may not use this file except in compliance with\n- * the License.  You may obtain a copy of the License at\n- *\n- *     http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Unless required by applicable law or agreed to in writing, software\n- * distributed under the License is distributed on an \"AS IS\" BASIS,\n- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n- * See the License for the specific language governing permissions and\n- * limitations under the License.\n- */\n-package org.apache.dubbo.metadata.store.failover;\n-\n-import org.apache.dubbo.common.URL;\n-import org.apache.dubbo.common.extension.ExtensionLoader;\n-import org.apache.dubbo.metadata.report.MetadataReport;\n-\n-/**\n- * @author yiji@apache.org\n- */\n-public abstract class StrategyMetadataReport implements MetadataReport {\n-\n-    // failover configured url, eg: failover://127.0.1:2181?backup=localhost:2181|localhost:2181\n-    protected URL url;\n-\n-    protected static final String STRATEGY_KEY = \"strategy\";\n-\n-    // proxy metadata report strategy, used to decide whether to write or read metadata\n-    protected FailoverCondition strategy;\n-\n-    protected ExtensionLoader<FailoverCondition> failoverLoader = ExtensionLoader.getExtensionLoader(FailoverCondition.class);\n-\n-    public StrategyMetadataReport(URL url) {\n-        if (url == null) {\n-            throw new IllegalArgumentException(\"url is required.\");\n-        }\n-        this.url = url;\n-        createFailoverStrategy(url);\n-    }\n-\n-    protected void createFailoverStrategy(URL url) {\n-        String strategy = url.getParameter(STRATEGY_KEY);\n-        if (strategy != null) {\n-            if (!failoverLoader.hasExtension(strategy)) {\n-                throw new IllegalArgumentException(\"No '\" + strategy + \"' failover condition extension found.\");\n-            }\n-            this.strategy = failoverLoader.getExtension(strategy);\n-        }\n-    }\n-\n-    /**\n-     * Whether metadata should be reported.\n-     *\n-     * @param url registry url, eg: zookeeper://127.0.0.1:2181\n-     * @return true store metadata to the specified URL.\n-     */\n-    protected boolean shouldRegister(URL url) {\n-        return this.strategy == null || this.strategy.shouldRegister(url);\n-    }\n-\n-    /**\n-     * Whether metadata should be read from specified url.\n-     *\n-     * @param url registry url, eg: zookeeper://127.0.0.1:2181\n-     * @return true read metadata from specified URL.\n-     */\n-    protected boolean shouldQuery(URL url) {\n-        return this.strategy == null || this.strategy.shouldQuery(url);\n-    }\n-\n-    /**\n-     * Judge whether it is a local region or a local datacenter.\n-     * <p>\n-     * Allows the local region or datacenter to be read first.\n-     *\n-     * @param url\n-     * @return\n-     */\n-    protected boolean isLocalDataCenter(URL url) {\n-        return this.strategy == null || this.strategy.isLocalDataCenter(url);\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.store.failover;\r\n+\r\n+import org.apache.dubbo.common.URL;\r\n+import org.apache.dubbo.common.extension.ExtensionLoader;\r\n+import org.apache.dubbo.metadata.report.MetadataReport;\r\n+\r\n+/**\r\n+ * @author yiji@apache.org\r\n+ */\r\n+public abstract class StrategyMetadataReport implements MetadataReport {\r\n+\r\n+    // failover configured url, eg: failover://127.0.1:2181?backup=localhost:2181|localhost:2181\r\n+    protected URL url;\r\n+\r\n+    protected static final String STRATEGY_KEY = \"strategy\";\r\n+\r\n+    // proxy metadata report strategy, used to decide whether to write or read metadata\r\n+    protected FailoverCondition strategy;\r\n+\r\n+    protected ExtensionLoader<FailoverCondition> failoverLoader = ExtensionLoader.getExtensionLoader(FailoverCondition.class);\r\n+\r\n+    public StrategyMetadataReport(URL url) {\r\n+        if (url == null) {\r\n+            throw new IllegalArgumentException(\"url is required.\");\r\n+        }\r\n+        this.url = url;\r\n+        createFailoverStrategy(url);\r\n+    }\r\n+\r\n+    protected void createFailoverStrategy(URL url) {\r\n+        String strategy = url.getParameter(STRATEGY_KEY);\r\n+        if (strategy != null) {\r\n+            if (!failoverLoader.hasExtension(strategy)) {\r\n+                throw new IllegalArgumentException(\"No '\" + strategy + \"' failover condition extension found.\");\r\n+            }\r\n+            this.strategy = failoverLoader.getExtension(strategy);\r\n+        }\r\n+    }\r\n+\r\n+    /**\r\n+     * Whether metadata should be reported.\r\n+     *\r\n+     * @param url registry url, eg: zookeeper://127.0.0.1:2181\r\n+     * @return true store metadata to the specified URL.\r\n+     */\r\n+    protected boolean shouldRegister(URL url) {\r\n+        return this.strategy == null || this.strategy.shouldRegister(url);\r\n+    }\r\n+\r\n+    /**\r\n+     * Whether metadata should be read from specified url.\r\n+     *\r\n+     * @param url registry url, eg: zookeeper://127.0.0.1:2181\r\n+     * @return true read metadata from specified URL.\r\n+     */\r\n+    protected boolean shouldQuery(URL url) {\r\n+        return this.strategy == null || this.strategy.shouldQuery(url);\r\n+    }\r\n+\r\n+    /**\r\n+     * Judge whether it is a local region or a local datacenter.\r\n+     * <p>\r\n+     * Allows the local region or datacenter to be read first.\r\n+     *\r\n+     * @param url\r\n+     * @return\r\n+     */\r\n+    protected boolean isLocalDataCenter(URL url) {\r\n+        return this.strategy == null || this.strategy.isLocalDataCenter(url);\r\n+    }\r\n+\r\n }\n"}, {"source1": "META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory", "source2": "META-INF/dubbo/internal/org.apache.dubbo.metadata.report.MetadataReportFactory", "comments": ["Ordering differences only"], "unified_diff": "@@ -1 +1 @@\n-failover=org.apache.dubbo.metadata.store.failover.FailoverMetadataReportFactory\n+failover=org.apache.dubbo.metadata.store.failover.FailoverMetadataReportFactory\r\n"}, {"source1": "META-INF/maven/org.apache.dubbo/dubbo-metadata-report-failover/pom.xml", "source2": "META-INF/maven/org.apache.dubbo/dubbo-metadata-report-failover/pom.xml", "comments": ["Format-specific differences are supported for XML files but no file-specific differences were detected; falling back to a binary diff. file(1) reports: XML 1.0 document, ASCII text, with CRLF line terminators"], "has_internal_linenos": true, "unified_diff": "@@ -1,113 +1,111 @@\n 00000000: 3c3f 786d 6c20 7665 7273 696f 6e3d 2231  <?xml version=\"1\n 00000010: 2e30 2220 656e 636f 6469 6e67 3d22 5554  .0\" encoding=\"UT\n-00000020: 462d 3822 3f3e 0d0a 3c21 2d2d 0d0a 2020  F-8\"?>..<!--..  \n-00000030: 4c69 6365 6e73 6564 2074 6f20 7468 6520  Licensed to the \n-00000040: 4170 6163 6865 2053 6f66 7477 6172 6520  Apache Software \n-00000050: 466f 756e 6461 7469 6f6e 2028 4153 4629  Foundation (ASF)\n-00000060: 2075 6e64 6572 206f 6e65 206f 7220 6d6f   under one or mo\n-00000070: 7265 0d0a 2020 636f 6e74 7269 6275 746f  re..  contributo\n-00000080: 7220 6c69 6365 6e73 6520 6167 7265 656d  r license agreem\n-00000090: 656e 7473 2e20 2053 6565 2074 6865 204e  ents.  See the N\n-000000a0: 4f54 4943 4520 6669 6c65 2064 6973 7472  OTICE file distr\n-000000b0: 6962 7574 6564 2077 6974 680d 0a20 2074  ibuted with..  t\n-000000c0: 6869 7320 776f 726b 2066 6f72 2061 6464  his work for add\n-000000d0: 6974 696f 6e61 6c20 696e 666f 726d 6174  itional informat\n-000000e0: 696f 6e20 7265 6761 7264 696e 6720 636f  ion regarding co\n-000000f0: 7079 7269 6768 7420 6f77 6e65 7273 6869  pyright ownershi\n-00000100: 702e 0d0a 2020 5468 6520 4153 4620 6c69  p...  The ASF li\n-00000110: 6365 6e73 6573 2074 6869 7320 6669 6c65  censes this file\n-00000120: 2074 6f20 596f 7520 756e 6465 7220 7468   to You under th\n-00000130: 6520 4170 6163 6865 204c 6963 656e 7365  e Apache License\n-00000140: 2c20 5665 7273 696f 6e20 322e 300d 0a20  , Version 2.0.. \n-00000150: 2028 7468 6520 224c 6963 656e 7365 2229   (the \"License\")\n-00000160: 3b20 796f 7520 6d61 7920 6e6f 7420 7573  ; you may not us\n-00000170: 6520 7468 6973 2066 696c 6520 6578 6365  e this file exce\n-00000180: 7074 2069 6e20 636f 6d70 6c69 616e 6365  pt in compliance\n-00000190: 2077 6974 680d 0a20 2074 6865 204c 6963   with..  the Lic\n-000001a0: 656e 7365 2e20 2059 6f75 206d 6179 206f  ense.  You may o\n-000001b0: 6274 6169 6e20 6120 636f 7079 206f 6620  btain a copy of \n-000001c0: 7468 6520 4c69 6365 6e73 6520 6174 0d0a  the License at..\n-000001d0: 0d0a 2020 2020 2020 6874 7470 3a2f 2f77  ..      http://w\n-000001e0: 7777 2e61 7061 6368 652e 6f72 672f 6c69  ww.apache.org/li\n-000001f0: 6365 6e73 6573 2f4c 4943 454e 5345 2d32  censes/LICENSE-2\n-00000200: 2e30 0d0a 0d0a 2020 556e 6c65 7373 2072  .0....  Unless r\n-00000210: 6571 7569 7265 6420 6279 2061 7070 6c69  equired by appli\n-00000220: 6361 626c 6520 6c61 7720 6f72 2061 6772  cable law or agr\n-00000230: 6565 6420 746f 2069 6e20 7772 6974 696e  eed to in writin\n-00000240: 672c 2073 6f66 7477 6172 650d 0a20 2064  g, software..  d\n-00000250: 6973 7472 6962 7574 6564 2075 6e64 6572  istributed under\n-00000260: 2074 6865 204c 6963 656e 7365 2069 7320   the License is \n-00000270: 6469 7374 7269 6275 7465 6420 6f6e 2061  distributed on a\n-00000280: 6e20 2241 5320 4953 2220 4241 5349 532c  n \"AS IS\" BASIS,\n-00000290: 0d0a 2020 5749 5448 4f55 5420 5741 5252  ..  WITHOUT WARR\n-000002a0: 414e 5449 4553 204f 5220 434f 4e44 4954  ANTIES OR CONDIT\n-000002b0: 494f 4e53 204f 4620 414e 5920 4b49 4e44  IONS OF ANY KIND\n-000002c0: 2c20 6569 7468 6572 2065 7870 7265 7373  , either express\n-000002d0: 206f 7220 696d 706c 6965 642e 0d0a 2020   or implied...  \n-000002e0: 5365 6520 7468 6520 4c69 6365 6e73 6520  See the License \n-000002f0: 666f 7220 7468 6520 7370 6563 6966 6963  for the specific\n-00000300: 206c 616e 6775 6167 6520 676f 7665 726e   language govern\n-00000310: 696e 6720 7065 726d 6973 7369 6f6e 7320  ing permissions \n-00000320: 616e 640d 0a20 206c 696d 6974 6174 696f  and..  limitatio\n-00000330: 6e73 2075 6e64 6572 2074 6865 204c 6963  ns under the Lic\n-00000340: 656e 7365 2e0d 0a20 2d2d 3e0d 0a3c 7072  ense... -->..<pr\n-00000350: 6f6a 6563 7420 7873 693a 7363 6865 6d61  oject xsi:schema\n-00000360: 4c6f 6361 7469 6f6e 3d22 6874 7470 3a2f  Location=\"http:/\n-00000370: 2f6d 6176 656e 2e61 7061 6368 652e 6f72  /maven.apache.or\n-00000380: 672f 504f 4d2f 342e 302e 3020 6874 7470  g/POM/4.0.0 http\n-00000390: 733a 2f2f 6d61 7665 6e2e 6170 6163 6865  s://maven.apache\n-000003a0: 2e6f 7267 2f78 7364 2f6d 6176 656e 2d34  .org/xsd/maven-4\n-000003b0: 2e30 2e30 2e78 7364 2220 786d 6c6e 733d  .0.0.xsd\" xmlns=\n-000003c0: 2268 7474 703a 2f2f 6d61 7665 6e2e 6170  \"http://maven.ap\n-000003d0: 6163 6865 2e6f 7267 2f50 4f4d 2f34 2e30  ache.org/POM/4.0\n-000003e0: 2e30 220d 0a20 2020 2078 6d6c 6e73 3a78  .0\"..    xmlns:x\n-000003f0: 7369 3d22 6874 7470 3a2f 2f77 7777 2e77  si=\"http://www.w\n-00000400: 332e 6f72 672f 3230 3031 2f58 4d4c 5363  3.org/2001/XMLSc\n-00000410: 6865 6d61 2d69 6e73 7461 6e63 6522 3e0d  hema-instance\">.\n-00000420: 0a20 203c 6d6f 6465 6c56 6572 7369 6f6e  .  <modelVersion\n-00000430: 3e34 2e30 2e30 3c2f 6d6f 6465 6c56 6572  >4.0.0</modelVer\n-00000440: 7369 6f6e 3e0d 0a20 203c 7061 7265 6e74  sion>..  <parent\n-00000450: 3e0d 0a20 2020 203c 6772 6f75 7049 643e  >..    <groupId>\n-00000460: 6f72 672e 6170 6163 6865 2e64 7562 626f  org.apache.dubbo\n-00000470: 3c2f 6772 6f75 7049 643e 0d0a 2020 2020  </groupId>..    \n-00000480: 3c61 7274 6966 6163 7449 643e 6475 6262  <artifactId>dubb\n-00000490: 6f2d 6d65 7461 6461 7461 3c2f 6172 7469  o-metadata</arti\n-000004a0: 6661 6374 4964 3e0d 0a20 2020 203c 7665  factId>..    <ve\n-000004b0: 7273 696f 6e3e 322e 372e 3130 3c2f 7665  rsion>2.7.10</ve\n-000004c0: 7273 696f 6e3e 0d0a 2020 3c2f 7061 7265  rsion>..  </pare\n-000004d0: 6e74 3e0d 0a20 203c 6772 6f75 7049 643e  nt>..  <groupId>\n-000004e0: 6f72 672e 6170 6163 6865 2e64 7562 626f  org.apache.dubbo\n-000004f0: 3c2f 6772 6f75 7049 643e 0d0a 2020 3c61  </groupId>..  <a\n-00000500: 7274 6966 6163 7449 643e 6475 6262 6f2d  rtifactId>dubbo-\n-00000510: 6d65 7461 6461 7461 2d72 6570 6f72 742d  metadata-report-\n-00000520: 6661 696c 6f76 6572 3c2f 6172 7469 6661  failover</artifa\n-00000530: 6374 4964 3e0d 0a20 203c 7665 7273 696f  ctId>..  <versio\n-00000540: 6e3e 322e 372e 3130 3c2f 7665 7273 696f  n>2.7.10</versio\n-00000550: 6e3e 0d0a 2020 3c6c 6963 656e 7365 733e  n>..  <licenses>\n-00000560: 0d0a 2020 2020 3c6c 6963 656e 7365 3e0d  ..    <license>.\n-00000570: 0a20 2020 2020 203c 6e61 6d65 3e41 7061  .      <name>Apa\n-00000580: 6368 6520 4c69 6365 6e73 652c 2056 6572  che License, Ver\n-00000590: 7369 6f6e 2032 2e30 3c2f 6e61 6d65 3e0d  sion 2.0</name>.\n-000005a0: 0a20 2020 2020 203c 7572 6c3e 6874 7470  .      <url>http\n-000005b0: 3a2f 2f77 7777 2e61 7061 6368 652e 6f72  ://www.apache.or\n-000005c0: 672f 6c69 6365 6e73 6573 2f4c 4943 454e  g/licenses/LICEN\n-000005d0: 5345 2d32 2e30 3c2f 7572 6c3e 0d0a 2020  SE-2.0</url>..  \n-000005e0: 2020 2020 3c64 6973 7472 6962 7574 696f      <distributio\n-000005f0: 6e3e 7265 706f 3c2f 6469 7374 7269 6275  n>repo</distribu\n-00000600: 7469 6f6e 3e0d 0a20 2020 203c 2f6c 6963  tion>..    </lic\n-00000610: 656e 7365 3e0d 0a20 203c 2f6c 6963 656e  ense>..  </licen\n-00000620: 7365 733e 0d0a 2020 3c64 6570 656e 6465  ses>..  <depende\n-00000630: 6e63 6965 733e 0d0a 2020 2020 3c64 6570  ncies>..    <dep\n-00000640: 656e 6465 6e63 793e 0d0a 2020 2020 2020  endency>..      \n-00000650: 3c67 726f 7570 4964 3e6f 7267 2e61 7061  <groupId>org.apa\n-00000660: 6368 652e 6475 6262 6f3c 2f67 726f 7570  che.dubbo</group\n-00000670: 4964 3e0d 0a20 2020 2020 203c 6172 7469  Id>..      <arti\n-00000680: 6661 6374 4964 3e64 7562 626f 2d6d 6574  factId>dubbo-met\n-00000690: 6164 6174 612d 6170 693c 2f61 7274 6966  adata-api</artif\n-000006a0: 6163 7449 643e 0d0a 2020 2020 2020 3c76  actId>..      <v\n-000006b0: 6572 7369 6f6e 3e24 7b70 726f 6a65 6374  ersion>${project\n-000006c0: 2e70 6172 656e 742e 7665 7273 696f 6e7d  .parent.version}\n-000006d0: 3c2f 7665 7273 696f 6e3e 0d0a 2020 2020  </version>..    \n-000006e0: 3c2f 6465 7065 6e64 656e 6379 3e0d 0a20  </dependency>.. \n-000006f0: 203c 2f64 6570 656e 6465 6e63 6965 733e   </dependencies>\n-00000700: 0d0a 3c2f 7072 6f6a 6563 743e 0d0a       ..</project>..\n+00000020: 462d 3822 3f3e 0a3c 212d 2d0a 2020 4c69  F-8\"?>.<!--.  Li\n+00000030: 6365 6e73 6564 2074 6f20 7468 6520 4170  censed to the Ap\n+00000040: 6163 6865 2053 6f66 7477 6172 6520 466f  ache Software Fo\n+00000050: 756e 6461 7469 6f6e 2028 4153 4629 2075  undation (ASF) u\n+00000060: 6e64 6572 206f 6e65 206f 7220 6d6f 7265  nder one or more\n+00000070: 0a20 2063 6f6e 7472 6962 7574 6f72 206c  .  contributor l\n+00000080: 6963 656e 7365 2061 6772 6565 6d65 6e74  icense agreement\n+00000090: 732e 2020 5365 6520 7468 6520 4e4f 5449  s.  See the NOTI\n+000000a0: 4345 2066 696c 6520 6469 7374 7269 6275  CE file distribu\n+000000b0: 7465 6420 7769 7468 0a20 2074 6869 7320  ted with.  this \n+000000c0: 776f 726b 2066 6f72 2061 6464 6974 696f  work for additio\n+000000d0: 6e61 6c20 696e 666f 726d 6174 696f 6e20  nal information \n+000000e0: 7265 6761 7264 696e 6720 636f 7079 7269  regarding copyri\n+000000f0: 6768 7420 6f77 6e65 7273 6869 702e 0a20  ght ownership.. \n+00000100: 2054 6865 2041 5346 206c 6963 656e 7365   The ASF license\n+00000110: 7320 7468 6973 2066 696c 6520 746f 2059  s this file to Y\n+00000120: 6f75 2075 6e64 6572 2074 6865 2041 7061  ou under the Apa\n+00000130: 6368 6520 4c69 6365 6e73 652c 2056 6572  che License, Ver\n+00000140: 7369 6f6e 2032 2e30 0a20 2028 7468 6520  sion 2.0.  (the \n+00000150: 224c 6963 656e 7365 2229 3b20 796f 7520  \"License\"); you \n+00000160: 6d61 7920 6e6f 7420 7573 6520 7468 6973  may not use this\n+00000170: 2066 696c 6520 6578 6365 7074 2069 6e20   file except in \n+00000180: 636f 6d70 6c69 616e 6365 2077 6974 680a  compliance with.\n+00000190: 2020 7468 6520 4c69 6365 6e73 652e 2020    the License.  \n+000001a0: 596f 7520 6d61 7920 6f62 7461 696e 2061  You may obtain a\n+000001b0: 2063 6f70 7920 6f66 2074 6865 204c 6963   copy of the Lic\n+000001c0: 656e 7365 2061 740a 0a20 2020 2020 2068  ense at..      h\n+000001d0: 7474 703a 2f2f 7777 772e 6170 6163 6865  ttp://www.apache\n+000001e0: 2e6f 7267 2f6c 6963 656e 7365 732f 4c49  .org/licenses/LI\n+000001f0: 4345 4e53 452d 322e 300a 0a20 2055 6e6c  CENSE-2.0..  Unl\n+00000200: 6573 7320 7265 7175 6972 6564 2062 7920  ess required by \n+00000210: 6170 706c 6963 6162 6c65 206c 6177 206f  applicable law o\n+00000220: 7220 6167 7265 6564 2074 6f20 696e 2077  r agreed to in w\n+00000230: 7269 7469 6e67 2c20 736f 6674 7761 7265  riting, software\n+00000240: 0a20 2064 6973 7472 6962 7574 6564 2075  .  distributed u\n+00000250: 6e64 6572 2074 6865 204c 6963 656e 7365  nder the License\n+00000260: 2069 7320 6469 7374 7269 6275 7465 6420   is distributed \n+00000270: 6f6e 2061 6e20 2241 5320 4953 2220 4241  on an \"AS IS\" BA\n+00000280: 5349 532c 0a20 2057 4954 484f 5554 2057  SIS,.  WITHOUT W\n+00000290: 4152 5241 4e54 4945 5320 4f52 2043 4f4e  ARRANTIES OR CON\n+000002a0: 4449 5449 4f4e 5320 4f46 2041 4e59 204b  DITIONS OF ANY K\n+000002b0: 494e 442c 2065 6974 6865 7220 6578 7072  IND, either expr\n+000002c0: 6573 7320 6f72 2069 6d70 6c69 6564 2e0a  ess or implied..\n+000002d0: 2020 5365 6520 7468 6520 4c69 6365 6e73    See the Licens\n+000002e0: 6520 666f 7220 7468 6520 7370 6563 6966  e for the specif\n+000002f0: 6963 206c 616e 6775 6167 6520 676f 7665  ic language gove\n+00000300: 726e 696e 6720 7065 726d 6973 7369 6f6e  rning permission\n+00000310: 7320 616e 640a 2020 6c69 6d69 7461 7469  s and.  limitati\n+00000320: 6f6e 7320 756e 6465 7220 7468 6520 4c69  ons under the Li\n+00000330: 6365 6e73 652e 0a20 2d2d 3e0a 3c70 726f  cense.. -->.<pro\n+00000340: 6a65 6374 2078 7369 3a73 6368 656d 614c  ject xsi:schemaL\n+00000350: 6f63 6174 696f 6e3d 2268 7474 703a 2f2f  ocation=\"http://\n+00000360: 6d61 7665 6e2e 6170 6163 6865 2e6f 7267  maven.apache.org\n+00000370: 2f50 4f4d 2f34 2e30 2e30 2068 7474 7073  /POM/4.0.0 https\n+00000380: 3a2f 2f6d 6176 656e 2e61 7061 6368 652e  ://maven.apache.\n+00000390: 6f72 672f 7873 642f 6d61 7665 6e2d 342e  org/xsd/maven-4.\n+000003a0: 302e 302e 7873 6422 2078 6d6c 6e73 3d22  0.0.xsd\" xmlns=\"\n+000003b0: 6874 7470 3a2f 2f6d 6176 656e 2e61 7061  http://maven.apa\n+000003c0: 6368 652e 6f72 672f 504f 4d2f 342e 302e  che.org/POM/4.0.\n+000003d0: 3022 0a20 2020 2078 6d6c 6e73 3a78 7369  0\".    xmlns:xsi\n+000003e0: 3d22 6874 7470 3a2f 2f77 7777 2e77 332e  =\"http://www.w3.\n+000003f0: 6f72 672f 3230 3031 2f58 4d4c 5363 6865  org/2001/XMLSche\n+00000400: 6d61 2d69 6e73 7461 6e63 6522 3e0a 2020  ma-instance\">.  \n+00000410: 3c6d 6f64 656c 5665 7273 696f 6e3e 342e  <modelVersion>4.\n+00000420: 302e 303c 2f6d 6f64 656c 5665 7273 696f  0.0</modelVersio\n+00000430: 6e3e 0a20 203c 7061 7265 6e74 3e0a 2020  n>.  <parent>.  \n+00000440: 2020 3c67 726f 7570 4964 3e6f 7267 2e61    <groupId>org.a\n+00000450: 7061 6368 652e 6475 6262 6f3c 2f67 726f  pache.dubbo</gro\n+00000460: 7570 4964 3e0a 2020 2020 3c61 7274 6966  upId>.    <artif\n+00000470: 6163 7449 643e 6475 6262 6f2d 6d65 7461  actId>dubbo-meta\n+00000480: 6461 7461 3c2f 6172 7469 6661 6374 4964  data</artifactId\n+00000490: 3e0a 2020 2020 3c76 6572 7369 6f6e 3e32  >.    <version>2\n+000004a0: 2e37 2e31 303c 2f76 6572 7369 6f6e 3e0a  .7.10</version>.\n+000004b0: 2020 3c2f 7061 7265 6e74 3e0a 2020 3c67    </parent>.  <g\n+000004c0: 726f 7570 4964 3e6f 7267 2e61 7061 6368  roupId>org.apach\n+000004d0: 652e 6475 6262 6f3c 2f67 726f 7570 4964  e.dubbo</groupId\n+000004e0: 3e0a 2020 3c61 7274 6966 6163 7449 643e  >.  <artifactId>\n+000004f0: 6475 6262 6f2d 6d65 7461 6461 7461 2d72  dubbo-metadata-r\n+00000500: 6570 6f72 742d 6661 696c 6f76 6572 3c2f  eport-failover</\n+00000510: 6172 7469 6661 6374 4964 3e0a 2020 3c76  artifactId>.  <v\n+00000520: 6572 7369 6f6e 3e32 2e37 2e31 303c 2f76  ersion>2.7.10</v\n+00000530: 6572 7369 6f6e 3e0a 2020 3c6c 6963 656e  ersion>.  <licen\n+00000540: 7365 733e 0a20 2020 203c 6c69 6365 6e73  ses>.    <licens\n+00000550: 653e 0a20 2020 2020 203c 6e61 6d65 3e41  e>.      <name>A\n+00000560: 7061 6368 6520 4c69 6365 6e73 652c 2056  pache License, V\n+00000570: 6572 7369 6f6e 2032 2e30 3c2f 6e61 6d65  ersion 2.0</name\n+00000580: 3e0a 2020 2020 2020 3c75 726c 3e68 7474  >.      <url>htt\n+00000590: 703a 2f2f 7777 772e 6170 6163 6865 2e6f  p://www.apache.o\n+000005a0: 7267 2f6c 6963 656e 7365 732f 4c49 4345  rg/licenses/LICE\n+000005b0: 4e53 452d 322e 303c 2f75 726c 3e0a 2020  NSE-2.0</url>.  \n+000005c0: 2020 2020 3c64 6973 7472 6962 7574 696f      <distributio\n+000005d0: 6e3e 7265 706f 3c2f 6469 7374 7269 6275  n>repo</distribu\n+000005e0: 7469 6f6e 3e0a 2020 2020 3c2f 6c69 6365  tion>.    </lice\n+000005f0: 6e73 653e 0a20 203c 2f6c 6963 656e 7365  nse>.  </license\n+00000600: 733e 0a20 203c 6465 7065 6e64 656e 6369  s>.  <dependenci\n+00000610: 6573 3e0a 2020 2020 3c64 6570 656e 6465  es>.    <depende\n+00000620: 6e63 793e 0a20 2020 2020 203c 6772 6f75  ncy>.      <grou\n+00000630: 7049 643e 6f72 672e 6170 6163 6865 2e64  pId>org.apache.d\n+00000640: 7562 626f 3c2f 6772 6f75 7049 643e 0a20  ubbo</groupId>. \n+00000650: 2020 2020 203c 6172 7469 6661 6374 4964       <artifactId\n+00000660: 3e64 7562 626f 2d6d 6574 6164 6174 612d  >dubbo-metadata-\n+00000670: 6170 693c 2f61 7274 6966 6163 7449 643e  api</artifactId>\n+00000680: 0a20 2020 2020 203c 7665 7273 696f 6e3e  .      <version>\n+00000690: 247b 7072 6f6a 6563 742e 7061 7265 6e74  ${project.parent\n+000006a0: 2e76 6572 7369 6f6e 7d3c 2f76 6572 7369  .version}</versi\n+000006b0: 6f6e 3e0a 2020 2020 3c2f 6465 7065 6e64  on>.    </depend\n+000006c0: 656e 6379 3e0a 2020 3c2f 6465 7065 6e64  ency>.  </depend\n+000006d0: 656e 6369 6573 3e0a 3c2f 7072 6f6a 6563  encies>.</projec\n+000006e0: 743e 0a                                  t>.\n"}]}
