Java 25 发布,这是继 Java 21 之后的又一个 长期支持(LTS)版本,带来了更简洁的语法、更强的性能优化以及更现代化的工具支持

望舒的头像
望舒
标签:
java25发布

Java 25 概览

  • Java 25 是一个 长期支持(LTS) 版本,将于 2025年9月16日 正式 GA 发布时间。
  • 本次版本中包含 18 个 JEPs(Java Enhancement Proposals),包括一些预览(preview)、孵化(incubator)、实验性(experimental)以及最终稳定(closed / 已交付)特性。

主要语言/语法/编译器增强

  1. 灵活的构造函数体 (Flexible Constructor Bodies, JEP 513)

在 Java25 中,可以在调用 super(...)this(...) 之前写一些语句,比如参数验证等。以前这些调用必须是构造函数中的第一行。

复制
展开
class Person {
    final int age;

    Person(int age) {
        this.age = age;
    }
}

class Employee extends Person {
    final String name;

    public Employee(String name, int age) {
        // 验证参数
        if (age < 18 || age > 67) {
            throw new IllegalArgumentException("Age must be between 18 and 67");
        }
        // 可以在调用 super(...) 前做设置
        this.name = name;
        super(age);
    }
}
  1. 原始类型在模式匹配 (Primitive Types in Patterns, instanceof, and switch, JEP 507, 第三预览)

模式匹配(pattern matching)中现在支持原始类型(primitive types,比如 int, long, double 等)。也就是说 instanceofswitch 中的模式可以直接匹配原始类型,而不必总是用封装类型。

复制
展开
Object obj = 42;

if (obj instanceof int i) {
 System.out.println("It's an int: " + i);
}

// 在 switch 中
int x = 3;
switch (x) {
case int i -> System.out.println("int: " + i);
case long l -> System.out.println("long: " + l);
default -> System.out.println("other");
}
  1. 紧凑源文件与实例 main 方法 (Compact Source Files and Instance Main Methods, JEP 512)

Java 25 简化了写“最小程序/脚本/示例”的流程。现在可以写更少样板代码,不必每次都声明 public class … public static void main(String[] args)。可以有顶层的或者实例级main 方法,源文件更紧凑。

复制
展开
void main() {
    System.out.println("Hello from Java 25 compact source!");
}
  1. 模块导入声明 (Module Import Declarations, JEP 511)

新增 import module 声明,允许在源文件顶部导入整个模块,使模块依赖在源代码里可见,而不仅仅在 module-info.java 中。对于大型模块化系统,有助于可读性和管理。

复制
展开
import module java.base;
import module java.sql;

import java.sql.Date;

public class Test {
  public static void main(String[] args) {
    Date d = Date.valueOf("2025-09-16");
    System.out.println(d);
  }
}

性能 /运行时 /JVM /工具增强

下面这些是提升性能、缩短启动时间、减少资源消耗、改进监控/profiling 等方面的重要特性。

  1. 紧凑对象头 (Compact Object Headers, JEP 519)
  • 对象的头部(object header)从旧的 16 字节缩减到 8 字节(在满足条件下),节省大量内存,特别是当应用中有很多小对象时。
复制
展开
-XX:+UseCompactObjectHeaders
  1. Generational Shenandoah 垃圾收集器 (JEP 521)
  • Shenandoah GC 的分代(generation)模式成为生产支持的特性(之前为实验性)。分代 GC 可以提高短生命周期对象的回收效率,从而减少延迟和提升吞吐。
  1. 提前方法分析 / 启动优化 (Ahead-of-Time Method Profiling, JEP 515; AOT 命令行工程化, JEP 514)
  • JEP 515:对于热点方法(被频繁调用的方法)进行“提前”采样或预分析,以帮助在应用启动阶段更快地做优化。
  • JEP 514:改进 AOT(Ahead-of-Time)类加载与链接的命令行体验,使得生成并使用 AOT 缓存更加简明。
  1. Java Flight Recorder (JFR) 的增强
  • CPU-time profiling(在 Linux 上实验性) — 跟踪线程的 CPU 使用时间以便更精确的性能剖析。
  • 方法计时与追踪 (method timing & tracing);
  • 协作采样 (cooperative sampling) 等机制改善分析偏差 /延迟问题。
  1. 稳定值 (Stable Values, JEP 502)(Preview)
  • 这个特性允许某些值被初始化后视为常量,由 JVM 在访问后可做更多优化,比如类似 final 的行为但更强(对延迟初始化、安全性或反射访问可能有不同处理)。
  1. 加密与密钥派生/PEM 编码 (Key Derivation Function API, JEP 510;PEM Encodings of Cryptographic Objects, JEP 470)
  • 提供标准 API 来做密钥派生(例如 PBKDF2,Argon2 等)功能。
  • 提供 PEM 格式的编/解码功能,对密钥、证书、CRL(撤销列表)等的 PEM 表示支持更方便。

其他变动 /弃用 /移除

  • 移除 32 位 x86 架构的支持(即不再为 32 位 x86 平台提供 JDK 构建)。
  • 一些 I/O/File 行为的小改动,例如 java.io.File("") 表示当前目录的行为一致性改进。
  • Windows 上 File.delete() 不再删除标记为 “只读(Read-only)” 的文件,除非有特定系统属性允许。

简单示例几个组合用法

以下是一个小示例程序,综合使用几个新特性来演示 Java 25 的写法差异/优势。

复制
展开
// 文件名:Demo25.java

import module java.base;
// 引入整个 java.base 模块,例子中 java.lang, java.util 等包可以直接使用

class Demo25 {
    // 使用实例 main 方法 + 紧凑源文件特性 (Compact source files & instance main methods)
    void main() {
        System.out.println("Starting Demo25");

        int x = 10;
        switch (x) {
            case int i -> System.out.println("Primitive pattern matched int: " + i);
            case long l -> System.out.println("Primitive pattern matched long: " + l);
            default -> System.out.println("other");
        }

        Employee emp = new Employee("Bob", 30);
        System.out.println("Employee: " + emp.name + ", age: " + emp.age);
    }
}

class Person {
    final int age;
    Person(int age) {
        this.age = age;
    }
}

class Employee extends Person {
    final String name;

    public Employee(String name, int age) {
        // 在调用 super(...) 前做验证 + 初始化 name 字段
        if (name == null || name.isBlank()) {
            throw new IllegalArgumentException("Name must be non-null and non-blank");
        }
        this.name = name;
        super(age);
    }
}

在这个例子中:

  • 用了 import module java.base; 显示模块导入声明。
  • 用了紧凑源文件 + 实例 main 方法(不用 public static void main(String[] args))。
  • 用了原始类型模式匹配 in switch
  • 用了灵活构造函数体,在调用 super 前做验证 &初始化字段。

总结

Java 25 是一个在很多方面 “打磨” 过的版本 —— 不只是新特性,更是在性能、内存、编译器体验、语法简化、模块化支持上都有提升。对于开发者来说:

  • 写更少样板代码(样板 class /main 方法 /构造函数限制减弱等)意味着更快速原型/demo/脚本开发更轻松。
  • 性能与内存方面的提升(紧凑对象头、Shenandoah 分代 GC、JFR 的精准剖析、AOT 方法分析等)对生产环境尤其重要。
  • 安全/加密支持(密钥派生/PEM 编码等)更现代、更方便。

作者:https://blog.xn--rpv331d.com/望舒

链接:https://blog.xn--rpv331d.com/望舒/blog/115

转载注意保留文章出处...

‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌​‌​‌​‌​​​​​​​‌‌​‌​‌​‌‌​‌​​‌‌‌‌​​​​​‌​​​​‌‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​​‌​‌​​​‌‌‌​‌​‌‌​​​‌‌‌‌​‌‌‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌​‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​​‌​‌​​​‌‌‌​‌​‌‌​​​‌‌‌‌​‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌​‌‌​​‌​‌‌‌‌​‌​‌​‌​​‌‌​‌​‌‌​​​‌​​​​​​​‌​​​​‌‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​​‌​‌​​​‌‌‌​‌​‌‌​​​‌‌‌‌​‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌​‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​​‌​‌​​​‌‌‌​‌​‌‌​​​‌‌‌‌​‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌‌​​​​​‌‌​​​​​‌‌‌‌​​​‌​‌‌​​​​‌‌‌‌‌‌‌​​​​‌​​‌‌​​​‌​‌‌‌​​​​‌‌​​‌​‌‌‌​‌​‌​‌​​​​​‌​​​‌‌‌​‌​​​‌​‌​‌​‌‌​‌‌​​‌​​‌‌​​‌​​​‌​‌‌​‌​‌​​‌‌​​​​‌‌‌‌‌​‌‌‌‌‌​​​​​​‌‌‌​‌‌​​​​​​​‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌
No data